Linux I/O Stack의 구조를 보도록 하자.

출처: https://systemdesigner.tistory.com/32

Application->Virtual File System(VFS)->Block I/O Layer->I/O Scheduler->SCSI Layer->Block Device의 순서를 거친다.

 

1. Application에서 I/O 명령이 들어온다.

2. VFS, 가상 파일 시스템은 실제 파일 시스템 위의 추상 계층으로, Application이 여러 파일 시스템에 같은 방법으로 접근할 수 있도록 한다. 커널과 실제 파일 시스템과의 인터페이스와 규격을 정의하고 있다. 커널 코드는 'fs/'에 위치한다.

3. Block I/O Layer는 Kernel subsystem으로 Block 단위로 접근하는 저장 장치인 Block Device의 입출력 명령을 담당한다. 다양한 Storage Device 에 대한 추상화 작업을 진행한다. 리눅스 커널 코드는 'block/'에 위치한다.

 

여기서 알아볼 것은 Block I/O Layer이다. 이 Block I/O Layer에 대해 설명해둔 글이 있는데, 영어로 되어 있는 것을 한글로 번역한 블로그를 찾아 첨부하겠다.

https://xoit.tistory.com/51

 

The block I/O layer

http://everylwn.blogspot.kr/search?q=The+block+I/O+layer http://ari-ava.blogspot.kr/2014/06/opw-linux-block-io-layer-part-1-base.html Base concepts 지난 몇주동안 Linux kernel의 block I/O layer가 어..

xoit.tistory.com

Block I/O Layer는 'Block I/O 구조', Bio의 리스트를 생성한다. 이 Bio는 저장 장치에 제출되는 I/O 동작을 나타낸다. 즉, Block I/O Layer는 디스크에 요청되는 I/O 명령의 리스트인 것이다. 이는 Block Device의 특정성을 제거하고 추상적인 개념을 제공하는 역할을 한다. 간단한 I/O는 single bio로, 복잡한 I/O는 Large-sized I/Os 또는 vector I/O로 표현된다. 최종적으로 Block Layer는 I/O 명령을 특정 sector, 저장장치의 특정 영역에 대한 request로 변환하여 Disk Controller에게 전송한다. 각 Request는 하나 이상의 bio를 포함한다.

내가 이해한 대로 정리하자면, Block Layer는 디스크에 대한 추상화를 통해 위에서 내려온 I/O 명령이 실제 디스크에 적용될 수 있도록 변환하여 Disk Controller에게 전달하는 역할을 한다.

 

그렇다면 우리는 ZNS 하드디스크에 입출력 명령을 입력한 후 위의 과정들을 거치면서 사용되는 함수들을 분석하고, 그 함수들이 ZNS 하드디스크의 어느 부분에 데이터를 저장하게 하는지를 알아볼 필요가 있겠다.

+ Recent posts