0. examples
examples 디렉토리에서 hello_blob과 hello_bdev를 통해 확인하려고 했으나
예제 작동만을 위해 hello를 포함하는 함수들이 많았고
물론 내부 구현은 실제 작동에 사용되는 함수들로 구현되어 있겠지만
실제 작동에 잘 사용되지 않는 함수도 포함되어 있어
이해하기 쉽게 헤더 파일을 기반으로 코드를 확인했다
1. blobfs.c
1-1. spdk_file_read_async()
아직 spdk도 익숙하지 않고 커널 코드 분석도 익숙하지 않아서
헤더를 보고 read 작업이 본격적으로 시작되는 지점일 것 같은 함수를 찾아서
탐색을 시작했다
예상했던 지점보다 조금 더 먼저 시작하는 것 같아서
조금 더 이전 함수로 올라가서 내려가는 방식으로 확인했다
blobfs/blobstore layer에서는 blobstore 기반으로 blobfs가 동작하기 때문에
blobfs부터 application layer의 요청을 전달받는다
즉 read 작업을 본격적으로 수행하게 되면
blobfs 관련 함수부터 동작하게 되는 것이다
서론이 길었다
spdk_file_read_async()부터 시작점으로 삼았고
해당 함수는 파일을 비동기적으로 처리하는 함수이다
비동기란 요청한 작업이 종료될 때까지 기다리는 것이 아니라
다른 작업을 수행하고 있다가 먼저 진행 중인 것이 종료되면
나머지를 수행하는 방식이다
1-2. __readwrite()
파일 읽기 쓰기 함수로 실제 읽기 작업이 시작된다
1-3. __readwritev()
파일 r/w에 필요한 파일 i/o 벡터를 처리하는 함수로
본격적인 읽기 작업을 위해서 __do_blob_read를 호출하게 된다
1-4. __do_blob_read()
blob file system은 blob에서 데이터를 읽기 위해 blobstore.c에 속하는
spdk_blob_io_read()를 호출한다
2. blobstore.c
2-1. spdk_blob_io_read()
blobstore에 저장된 데이터를 기본 단위인 blob으로 읽는
즉 blob의 데이터를 읽는 함수이다
2-2. blob_request_submit_op()
블록 디바이스에서 데이터 읽기를 수행하도록 하는 함수이다
요청을 수행하는 방식을 결정하는 코드를 포함하고 있고
단일 io로 처리하면 single 함수를,
분할 io로 처리하면 split 함수를 호출하게 된다
2-3-1-1. blob_request_submit_op_single()
블록 디바이스에서 단일 io 처리 방식으로 읽을 때 호출되는 함수이다
2-3-1-2. cb_fn()
할당에 실패하는 경우 에러를 출력하는 cb_fn을 콜백한다
동일한 이름의 사용자 정의 콜백 함수가 정말 많았으나
spdk_bs_cpl 구조체의
spdk_blob_op_complete에 해당하는 콜백 함수로 예상된다
2-3-2-1. blob_request_submit_op_split()
블록 디바이스에서 분할 io 처리 방식으로 읽을 때 호출되는 함수이다
2-3-2-2. blob_request_submit_op_split_next()
split 함수가 정상적으로 실행되면
split_next 함수도 호출한다
2-4. blob_request_submit_op()
split next 함수의 Spdk_blob_read case에서
Spdk_blob_io_read()를 호출하고
이전에 io처리 방식을 결정했던
blob_request_submit_op 로
다시 돌아오게 된다
'[ Laboratory ] > System Software & Storage' 카테고리의 다른 글
[SPDK/examples] nvme/hello_world 예제 수정 및 실행 (0) | 2024.10.10 |
---|---|
[SPDK/examples] spdk/build/examples 하위 예제 파일 실행하기 (0) | 2024.10.10 |
[SPDK] spdk 빌드 및 example 실행 (4) | 2024.10.10 |
[SPDK] spdk_bdev_read() 작동 방식 (0) | 2024.08.26 |
[SPDK/NVMe] NVMe 마운트 방법 (0) | 2024.08.06 |
[FIO] Flexible I/O tester FIO 설치 방법 (0) | 2024.07.31 |
[Linux Kernel] 리눅스 커널 버전 업그레이드 빌드 (0) | 2024.07.30 |