gpt4 book ai didi

linux - vmsplice(2) 的语义是什么,有和没有 gifting?

转载 作者:IT王子 更新时间:2023-10-29 00:43:28 25 4
gpt4 key购买 nike

我正在尝试了解 vmsplice(2) 系统调用的功能(手册页 here)。关于 SPLICE_F_GIFT 标志的效果,我有两个问题:

  1. 手册页说,一旦将页面赠送给内核,就绝不能再修改内存。这是否意味着内存被永久固定,或者它可能指的是可以通过赠送过程取消映射的虚拟内存,而不是物理内存?换句话说,这个的典型用法是什么样的?

  2. 如果我不设置 SPLICE_F_GIFTvmsplice(2) 是否与像 writev(2) ?

最佳答案

1 - 是的,它不同。
如果您使用 write 将 1GB 写入管道,它将循环直到这 1GB 被传送到管道,除非信号中断工作。
如果你 vmsplice 1GB 到管道,它只会在管道缓冲区已满时阻塞,然后只写入管道缓冲区中可用的内容。
非常令人沮丧的是它不会循环并继续像常规写入一样写入。您不得不进行一大堆 vmsplice 调用并且必须为部分 vmsplice 写入实现循环,而不是进行复制。

2 - 我从映射区域进行 vmslicing,并且能够在 vmsplicing 之后立即进行 munmap,没有崩溃或数据损坏。

关于linux - vmsplice(2) 的语义是什么,有和没有 gifting?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32000832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com