我正在尝试测试块设备驱动程序。
当我使用具有不同bs块大小的'dd'命令时,'bio'结构中的bi_size字段似乎没有改变。它仍然是4KB。
我做错了什么?
顺便说一句,我正在运行'dd'直接输出到我的设备(= / dev / xxx)而不是通过VFS。
答案 0 :(得分:0)
似乎4KB是块设备的扇区大小,因此对它的所有请求都与该值对齐。
完成后,内核会遵守设备的硬件扇区大小。所有I / O请求都在硬件扇区的开头正确对齐,每个请求的长度是一个整数扇区。
注意,通过在块设备文件(= / dev / xxx)上使用dd
,您实际上通过VFS 。块设备的接口与文件之一不同,因此代表块设备的文件上的操作(例如,读/写)是块设备操作的包装。 (此外,对任何文件的任何访问都通过VFS。)
答案 1 :(得分:0)
dd
的块大小就是dd
读取和写入文件时使用的块大小。内核不需要使用与请求写入该大小的用户空间进程相同的块大小(或同时)写入设备。内核对VFS操作进行缓冲(并且还保证某些块大小写入将是原子的,这是4KB IIRC)。顺便说一句,/dev/
块设备确实通过了VFS(块大小不受你控制的事实应该足够证据)。
所以是的,bs
中的dd
选项不会影响内核在实际序列化写入设备时使用的块大小。