리눅스에서. 하드디스크로의 전송단위가 궁금합니다!

puresupe의 이미지

안녕하세요.

블록 디바이스 계층을 공부중에 궁금한게 있어서 글을 올립니다.

리눅스는 블록 디바이스 드라이버와 효율적인 데이터 전달을 위해서

bio단위로 block io 를 수행하는걸로 알고있습니다.

각 bio구조체는 여러개의 세그먼트(bio_vec)로 이루어져 있구요.

이것이. 각 디바이스의 큐에 연결이 되는걸로 알고있습니다.

gendisk에 연결되어있는 각 물리적 장치의 request_queue에

request구조체의 형태로 들어가게되서 i/o scheduler에 의해, 초기에 하나의 bio로 구성되어있던 request구조체가

물리적으로 근접한 bio들이 점점 추가되서 , i/o 성능을 올리는 역할을 하겠지요.



음. 서론이 너무길었는데

제가 궁금한것은. 이렇게 블락 디바이스 레이어 에서 request_queue에 있는 request들이

실제 디바이스 드라이버에 전송되는 "단위(구조체나,,데이터 크기)"가 궁금하구요.

가장 궁금한건.. 이렇게 물리적으로 연속적인 request들이. 디바이스 드라이버에의해서 실제 하드디스크에 씌여질때

어떤 단위로 전송되는지 궁금합니다.

LBA와 size값으로 parameter가 주어지는걸로 알고있는데.

그 size라는게..하나의 request 구조체의 모든 bio들이 크기인지...

그중 하나의 bio의 크기인지..

그중 하나의 segment(bio_vec)의 크기인지...

궁금합니다^-^


p.s. 제가 궁금해하는 부분 참고할만한 자료가 있을까용?