desc 블록 디바이스 디스크립터
ch io 작업에 사용할 채널
buf 데이터를 저장할 버퍼
offset 오프셋
nbytes 읽을 바이트 수
cb 완료하면 호출될 콜백 함수
사용자가 spdk_bdev_read 함수를 호출하면
블록 디바이스 디스크립터에서 블록 디바이스 구조체를 가져오고
바이트 단위 오프셋과 크기를 블록 단위로 바꾸고
변환을 실패하면 오류를 반환하고
변환을 성공하면 spdk_bdev_read_blocks를 호출하여 읽기를 진행한다
spdk_bdev_read_blocks는
블록 단위로 데이터 읽는 함수이며
spdk_bdev_read_blocks_with_md 를 리턴한다
spdk_bdev_read_blocks_with_md 는
메타 데이터도 함께 읽을 수 있는 함수이다
spdk_bdev_read_blocks 에서 리턴할 때
메타 베이터 버퍼를 NULL로 설정하였기 때문에
spdk_bdev_read_blocks_with_md 에서
spdk_bdev_read_blocks_with_md 를 다시 리턴할 때도
메타 데이터가 없이 단순히 io 버퍼만 담은 구조체를 넘겨주게 되고
실제로 io를 처리하는 spdk_bdev_read_blocks_with_md 함수로 연결된다
spdk_bdev_read_blocks_with_md 는
최종적으로 데이터를 읽는 함수이다
내부적으로 블록 디바이스에서 데이터를 읽고
필요할 때는 메타 데이터도 함께 읽는다
io 채널을 통해서 데이터를 처리하고
유효한 데이터인지 확인하고
버퍼를 설정한 후에
데이터를 읽기 위해 블록 디바이스로 전달하는 bdev_io_submit 함수를 호출한다
'[ Laboratory ] > System Software & Storage' 카테고리의 다른 글
[SPDK/examples] spdk/build/examples 하위 예제 파일 실행하기 (0) | 2024.10.10 |
---|---|
[SPDK] spdk 빌드 및 example 실행 (4) | 2024.10.10 |
[SPDK] blobfs/blobstore layer에서의 read 작업 처리 (0) | 2024.08.27 |
[SPDK/NVMe] NVMe 마운트 방법 (0) | 2024.08.06 |
[FIO] Flexible I/O tester FIO 설치 방법 (0) | 2024.07.31 |
[Linux Kernel] 리눅스 커널 버전 업그레이드 빌드 (0) | 2024.07.30 |
[SPDK/xNVMe] Getting Started xNVMe - xnvme 설치 (0) | 2024.07.28 |