首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >blk_queue_segment_boundary()的用法是什么

blk_queue_segment_boundary()的用法是什么
EN

Stack Overflow用户
提问于 2013-01-07 16:36:03
回答 1查看 164关注 0票数 1

对于函数blk_queue_segment_boundary(),书中写着如下所示:

有些设备无法处理跨越特定大小内存绑定的请求;如果您的设备是其中之一,请使用此函数将该边界告知内核。例如,如果您的设备遇到了跨越4 MB边界的请求问题,请传递0x3fffff掩码。默认掩码是0 0xffffffff。

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

代码语言:javascript
运行
复制
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);

我想要的是(file_offset +n字节)不大于4M,但实际上有时超过4M,那么,对blk_queue_segment_boundary()有什么误解吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-01-08 13:57:45

有些控制器(特别是IDE)无法处理4MB跨内存区域的DMA请求。把它看作是段:索引寻址的索引不能比设定的边界更大。

还有一个blk_queue_max_segment_size。两者都用于构造对设备的正确请求-请求被重新排序和合并。

还有其他用途。例如,来自xen-blkfront.c

代码语言:javascript
运行
复制
/* 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);

为了获得更好的性能,请求仅限于PAGE_SIZE

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14200095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档