서울대학교 컴퓨터공학과 김진수 교수님의 "고급 운영체제" 강의를 필기한 내용입니다.
다소 잘못된 내용과 구어적 표현 이 포함되어 있을 수 있습니다.
Storage Interface
- Storage interface 와 File interface 는 다르다.
- Storage interface 는 block 단위의 논리적인 1차원 공간 (LBA 공간) 을 제공하는 interface 이다.
- 즉, 이것은 block device 에 대해 block device driver 가 OS 에게 제공하는 abstraction 인 것.
- 흔히 Block Interface 라고도 불린다.
- File interface 는 block 단위가 아니고, block interface 위에서의 “파일” 단위 abstraction 이다.
- 파일 open, close, 이름, 크기 등의 메타데이터와 오퍼레이션 등을 제공
- 흔히 사용되는 File interface 에는 POSIX 가 있다.
- Storage interface 를 활용해 File interface 를 제공해주는 놈을 Filesystem 이라고 부르는 것.
- Storage interface 는 block 단위의 논리적인 1차원 공간 (LBA 공간) 을 제공하는 interface 이다.
- Storage 함수들:
identify()
: 제조사 등의 정보와, 제일 중요하게 섹터의 개수를 제공read(start_sect int, sect_count int, addr buffer)
: 읽기write(start_sect int, sect_count int, addr buffer)
: 쓰기
- 아랫단에서 어떻게 되어있던 간에 위와 같은 인터페이스를 제공하면 storage 를 사용할 수 있다
- 단순하게 HDD 부터 시작해서
- FTL 를 거친 SSD,
- 네트워크를 거친 NFS 등등
- 아랫단의 media 가 어떤 것이든 위와 같은 인터페이스를 제공하면 전부 storage 인 것.
여기부터는
2024-03-26
강의
Storage types
DAS (Direct Attached Storage)
- 그냥 머신에 바로 붙어있는 storage 를 말함
SAN (Storage Area Network), NAS (Network Attached Storage)
- 조보아씨 솔직히 SAN 이랑 NAS 아직도 헷갈리쥬?
- 둘 다 host machine 에서 스토리지에 접근하는 느낌이어서 똑같은거 아닌가 싶을 수 있는데, 둘 간에는 차이점이 있다.
- 우선 “전용네트워크” 가 SAN 에서는 필요하다.
- NAS 도 망분리해서 전용 네트워크로 구성할 수도 있지만, 그러지 않아도 된다.
- 가령 SAN 프로토콜 중 하나인 RDMA 를 사용하기 위해서는 별도의 Infiniband LAN 을 구축해야 하지만, NAS 프로토콜인 NFS, SMB 를 사용할 때는 그러지 않아도 되잖아?
- SAN 은 Storage (Block) interface 로 접근하고, NAS 는 File interface 로 접근한다.
- SAN 은 filesystem 을 host machine 에 설치하지만, NAS 는 storage 에도 설치한다.
- 즉, SAN 을 사용하면 host machine 에 설치된 filesystem 에서 storage 로 network 를 통해 NVMe 같은 commend 를 보내는 것이고,
- NAS 를 사용하면 host machine 의 일반 software 가
open()
와 같은 POSIX command 를 network 를 통해 storage 의 filesystem 으로 보내는 것이다. - 따라서 SAN 을 사용하면 host machine 에서는 하나의 block device 가 mount 된 것처럼 보이고, NAS 를 사용하면 filesystem 이 mount 된 것처럼 보인다.
- 추가적으로, SAN 에서는 여러 client 가 접근할 수 없다고 한다.
- Storage 입장에서는 각기 다른 여러 client 의 fs 에서 command 가 날라오기 때문에 metadata 가 깨지는 등 문제가 생김
- 여러 fs 들을 sync 하는 방식이 있긴 하지만, 너무 느려서 안쓴다 하더라
- 하지만 NAS 의 경우에는 fs 가 server 에 설치되기에, 여기에 여러 client 가 접근하는 것이 가능하다.
- Storage 입장에서는 각기 다른 여러 client 의 fs 에서 command 가 날라오기 때문에 metadata 가 깨지는 등 문제가 생김
- 우선 “전용네트워크” 가 SAN 에서는 필요하다.
NAS/SAN Convergence
- 이제 NAS 에 SAN 을 접목시켜서
- client 는 NAS 에 접속해서 fs 를 사용하고
- NAS 는 SAN 에 접속해서 디스크를 사용하는
- 따라서 NAS 서버에는 별도의 local disk 가 없는
- 3계층으로 분리될 수도 있다
- NAS Head 가 client 의 fs 접속을 처리하는 NAS 서버를 일컫는데
- NAS Head 가 여러개의 서버로 구성되는 경우에는 각각의 서버가 fs 의 특정 subdirectory 를 담당하는 식으로 땅따먹기하기 위해서라고 한다.
- 아니면 뭐 HA 구성도 가능할듯
- 또는 다음과 같은 구성도 가능하다:
- 이전에는 client 가 NAS 에 요청하고 NAS 가 SAN 에 요청하는 식이었다면 (recursive 하게)
- 최근에는 client 가 NAS 에 요청하면 NAS 는 블럭 정보를 반환하고 그럼 client 가 직접 이 정보를 받아들고 SAN 에 접근하는 방식 (iterative 하게) 도 사용된다고 한다.
Distributed FS
- server 여러대 중에 client 하나가 접근해서 작업을 요청하고 server 는 다른 서버의 도움을 받아 이것을 처리하는 형태
SNIA Shared Storage Model (SSM)
- SNIA Shared Storage Model 은 storage 계의 OSI-7 model 라고 생각하면 된다.
- Application:
- 일반 end-user 로서 File interface (e.g. POSIX) 등을 이용해 파일 단위로 하위 레이어에 접근하는 곳이다.
- File/Records Layer:
- 여기에는 Filesystem 과 DBMS 가 포함된다.
- 전에도 말한것 처럼, DBMS 도 SQL 와 같은 인터페이스를 Application 에게 제공하기에 filesystem 과 유사한 위치에 있다고 생각할 수 있다.
- 물론 DBMS 도 filesystem 을 사용하긴 한다: 이전에는 DBMS 가 fs 없이 접근하기도 했는데 요즘은 그렇게 안한다고 한다.
- 요즘은 device 에 이 레이어가 있는 경우도 있다고 하더라.
- NAS 같은 경우에는 server 에 있지만 client 에서도 일부 이 layer 를 이용해서 command 를 날린다.
- 여기에는 Filesystem 과 DBMS 가 포함된다.
- Block layer:
- 여기서는 RAID 등으로 여러 디스크를 하나처럼 쓸 수 있게 하는 것 (block aggregation)
- 여기서 나오는 몇가지 용어는
- Slicing: 디스크를 합쳐 하나처럼
- Dicing: 디스크를 나눠 여러개처럼
- Striping: 여러 디스크에 분산 병렬 저장해 성능 향상
- Host 상에서는
- device driver 의 LVM (Logical Volume Manager) 에서 이 기능을 제공 - 하나의 디스크처럼 보이게 함
- 아니면 RAID 나 HBA 에서 제공하기도 한다더라
- SAN 에서도 switch level 에서 이런 것을 제공하기도 한다 하더라
- Device 상에서는
- Physical RAID Controller 같은게 이런걸 제공해준다고 생각하면 되니라