【发布时间】:2017-09-06 11:35:45
【问题描述】:
我需要有关直接磁盘 IO 的帮助。我通过带有标志 O_DIRECT 的文件描述符 (fd) 打开一个文件。在我的用户空间应用程序中,我想从文件中读取大量数据,而这些数据只使用了一次。通过“set_memory_uc”(使用x86)和“remap_pfn_range”在我的内核模块中分配了一块未缓存的内存缓冲区,其中vm_page_prot设置为非缓存(pgrot_noncached)。此缓冲区旨在用于通过 PCIe 进行 DMA 传输。
我试过了
读取(fd,缓冲区,len)
和
lseek(fd, 0x1000, SEEK_SET)
'buffer' VA 对齐到 4k 边界。 'len' (n*4k) 也是如此
出于某种原因,'lseek' 似乎有效,因为在调用 lseek 后它返回 0x1000
但“读取”返回 -1
直接磁盘读取磁盘数据到mmap缓冲区有什么限制吗?
【问题讨论】:
标签: linux linux-kernel