본문 바로가기
[ Laboratory ]/System Software & Storage

[SPDK] spdk_bdev_read() 작동 방식

by dev charlotte 2024. 8. 26.

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 함수를 호출한다

 

728x90