![](/img/trans.png)
[英]How does making the virtual address contiguous in physical address zone improve performance?
[英]Kernel scatterlists contiguous in virtual address?
我想询问/验证至少在虚拟地址域中,用blk_rq_map_sg
映射的struct scatterlist
数组是否都是连续的。 众所周知,散点列表主要用于DMA,其中每个散点聚集(sg)数组元素描述一块内存,而这些块在其物理地址中是不连续的。
我正在编写块设备驱动程序。 假设我收到我的request_queue结构的要求,我想这样做与我的要求是持有,如I / O数据进行处理memcpy
荷兰国际集团他们的地方。 该操作将需要一个虚拟地址和长度参数。 现在,我所知道的是,我可以通过通过辅助函数blk_map_rq_sg()
映射的blk_map_rq_sg()
访问请求的数据。 我的假设正确吗,这些sg元素在虚拟中是连续的,并且我可以通过sg_virt()
获取数据地址,并将该地址和总长度用于memcpy
? 还是它们在虚拟环境中是不连续的,我必须遍历每个sg数组元素和memcpy
往返于每个sg内存块(在虚拟中),这更难吗?
诸如writev之类的功能允许提交不连续的请求,并且高内存中的页面没有虚拟地址开头。
要使用CPU访问SG列表内容,请使用sg_copy_from_buffer
类的sg_copy_from_buffer
,它会自动临时映射页面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.