Linux kernel 什么';s blk_队列_段_边界()的用法

Linux kernel 什么';s blk_队列_段_边界()的用法,linux-kernel,linux-device-driver,block-device,Linux Kernel,Linux Device Driver,Block Device,ldd一书中对函数blk_queue_segment_boundary()的描述如下: 某些设备无法处理跨越特定大小的请求 内存限制元;如果您的设备是其中之一,请使用此功能 告诉内核这个边界。例如,如果您的设备 对于跨越4MB边界的请求有问题,请传入掩码 0x3fffff的。默认掩码为0xFFFFFF 我不太明白边界在这里意味着什么,例如,我有一个虚拟块设备,它实际上由4MB文件组成,所以我希望请求不超过4MB边界 unsigned long sector = blk_rq_pos(req);

ldd一书中对函数blk_queue_segment_boundary()的描述如下:

某些设备无法处理跨越特定大小的请求 内存限制元;如果您的设备是其中之一,请使用此功能 告诉内核这个边界。例如,如果您的设备 对于跨越4MB边界的请求有问题,请传入掩码 0x3fffff的。默认掩码为0xFFFFFF

我不太明白边界在这里意味着什么,例如,我有一个虚拟块设备,它实际上由4MB文件组成,所以我希望请求不超过4MB边界

unsigned long sector = blk_rq_pos(req);
unsigned long offset = sector << 9;
unsigned long nbytes = blk_rq_bytes(req);

int file_offset = offset % (1 << 22);
无符号长扇区=blk\U rq\U位置(req);
unsigned long offset=sector某些控制器(特别是IDE)无法处理4MB跨内存区域的DMA请求。可以将其视为段:索引寻址,其中索引不能大于设置的边界

还有一个
blk\u队列\u最大\u段\u大小
。这两种方法都用于构造对设备的正确请求——请求被重新排序和合并

还有其他用途。例如,从
xen blkfront.c

/* Each segment in a request is up to an aligned page in size. */
blk_queue_segment_boundary(rq, PAGE_SIZE - 1);
blk_queue_max_segment_size(rq, PAGE_SIZE);
为了获得更好的性能,请求被限制在
页面大小

一些控制器(特别是IDE)无法处理4MB跨内存区域的DMA请求。可以将其视为段:索引寻址,其中索引不能大于设置的边界

还有一个
blk\u队列\u最大\u段\u大小
。这两种方法都用于构造对设备的正确请求——请求被重新排序和合并

还有其他用途。例如,从
xen blkfront.c

/* Each segment in a request is up to an aligned page in size. */
blk_queue_segment_boundary(rq, PAGE_SIZE - 1);
blk_queue_max_segment_size(rq, PAGE_SIZE);
请求限制为
页面大小
,以获得更好的性能