jac*_*bsa 5 linux linux-kernel splice zero-copy
我试图了解vmsplice(2)syscall 的功能(此处的手册页)。关于SPLICE_F_GIFT标志的作用,我有两个问题:
手册页指出,一旦将页面赠予内核,就不能再修改内存。这是否意味着该内存将永远固定,还是可能指的是赠礼过程无法映射的虚拟内存,而不是物理内存?换句话说,这种用法的典型用法是什么样的?
如果我不设置SPLICE_F_GIFT,vmsplice(2)与矢量化写syscall 有什么不同writev(2)吗?
这是否意味着内存被永远固定,或者它是否可能指的是可以通过赠送过程取消映射的虚拟内存,而不是物理内存?换句话说,它的典型用途是什么样的?
您承诺不修改该页面。不是页面的虚拟寻址。对于大多数用例,建议操作类似于:
mmap
read
vmsplice
munmap
Run Code Online (Sandbox Code Playgroud)
一般来说,您需要使用mmapovermalloc来确保您拥有一个页面,而不仅仅是 4096 字节的 RAM。它可以位于 2MB 或 1GB 的中间HUGE_PAGE(如果您的分配器确定这更有效)。
如果我不设置 SPLICE_F_GIFT,
vmsplice(2)与矢量化写入系统调用有什么不同writev(2)?
是的
内核中的大多数缓冲区都是管道。或者实际上管道由与缓冲区相同的数据结构表示。
| 归档时间: |
|
| 查看次数: |
316 次 |
| 最近记录: |