반응형

이번에는 리눅스 커널에서 중요한 부분인 I/O (Storage) Stack에 대해 알아보고자 합니다. I/O (Storage) Stack은 리눅스 커널 시스템에서 가장 중요한 부분중에 하나이며 현재 리눅스 커널 소스 코드에서 다양하게 업데이트 되고 있는 부분입니다.

 

이유는, 메모리 관리 / 스케줄러 / 프로세스 등 리눅스&유닉스의 핵심이자 가장 전통적인 기능들은 수십년을 거쳐오면서 거의 안정화 되어가고 있으며 현재는 최적화에 초점이 맞춰 있습니다.

 

그렇지만 스토리지는 지금도 새로운 디바이스가 출시되고 있으며 특히 SSD의 보급화로 통해 기존의 HDD와는 전혀 다른 메커니즘을 갖고 있기때문에 지금도 I/O (Storage) Stack 부분은 많이 수정이 되고 있습니다.

 

현재 리눅스 커널은 현재까지 4.14 버젼까지 출시된 상태이고 stable version : 4.9, 로 되어 있습니다.

 

간단하게 I/O (Storage) Stack의 구조를 보게 되면

크게 보게 되면

Application → VFS(Virtual File System) → Block I/O Layer → I/O Scheduler → SCSI Layer → Block Device

 

각각의 기능을 보게 되면

 

Application은 read / write / open ... 통해 I/O Stack을 호출하게 됩니다.

 

VFS(Virtual File System) : 가장 파일시스템으로서 block F/S, Network F/S, Special Purpose F/S 등 다양종류의 파일 시스템을 지원을 하고 이들의 구동 방식은 Direct I/O 나 Page cache(MMAP)을 사용하여 I/O를 수행하게 됩니다. 또한 부가적으로 LVM, SW Raid 등의 기능을 지원하게 됩니다.

 

Block I/O Layer는 QUEUE를 이용해서 상위 레이어에서 받은 데이터를 저장하게 되고 이를 통해 구동을 하게 됩니다. 또한 다양한 Storage Device에 대한 추상화 작업을 1차적으로 진행하게 됩니다. 예전에는 이부분에서 추상화 작업은 진행하지 않았지만 nvme를 비롯한 SCSI 계열이 아닌 Storage 디바이스가 나오게 되면서 이부분의 기능이 추가 되었습니다.

 

I/O Scheduler는 noop, cfq, deadline의 기능을 지원하게 됩니다.

 

앞으로 storage stack에 대해서는 추가적으로 연재를 하도록 하겠습니다

 

끝으로 storage stack full diagram입니다.

 

 

 

출처 : https://www.thomas-krenn.com/en/wiki/Linux_Storage_Stack_Diagram#License

반응형

+ Recent posts