皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

两年后继续追求更快的 getrandom() 性能

在 vDSO 中添加 getrandom() 的提议可以追溯到不到两年前,当时的目的是为了在用户空间中获得更快的随机数性能。这项工作看似简单,但仍在进行中,且存在争议。

因开发 WireGuard 而闻名的 Jason Donenfeld 继续在 vDSO 中加入 getrandom(),并对其他 Linux RNG 进行改进。这项工作的目的是为用户空间提供更快的加密安全随机数,并解决用户空间无法以与内核 getrandom() 相同的安全保证推出自己的 RNG 的问题。最近,Donenfeld 在发送 vDSO 中 getrandom() 的 v16 补丁时,对现状进行了总结:
“经过一段时间的中断后,这个功能又回来了。在 2023 年初的最后一次尝试中,我认为我们在一些事情上达成了共识–用例、vDSO 实现和语义、与 libc 的集成、测试代码和文档等等。基本上已经 “准备就绪”。差不多了。但是,有一个挥之不去的问题让这一切陷入了僵局,那就是它需要一些新的mm语义,而这些语义并不是很受欢迎。

特别是,去年的系列产品利用 x86 指令解码器跳过了故障指令。我仍然认为这很有趣,但实际上对于所需的语义来说并不重要,而且我也能理解为什么这是迄今为止最大的反对意见。因此,所有这一切都被放弃了,从而简化了很多。

在mm讨论的另一个渠道中,安迪曾提到使用 _install_special_mapping() 代替 VM_DROPPABLE 工作,我花了很长时间研究这个问题,并多次尝试编写使用该方法的可行代码。但是,如果不在大量其他核心代码中添加钩子,不重复大量不应该重复的代码,语义就无法实现。因此,我在这里保留了 VM_DROPPABLE 补丁,但由于 x86 指令解码的内容已被删除,该补丁实际上要小得多、简单得多,我认为不应该引起太大争议。就实际的 C 代码而言,它只增加了大约十行,而且足够紧凑,你只需搜索 VM_DROPPABLE 就能看到全部内容。

投稿附信原文如下。我迫切希望最终能让这个补丁集动起来,很抱歉之前的 v+1 版本迟迟没有发布。

如果进展顺利,我计划在我的 6.11 random.git 树上打上这个补丁。如果mm部分看起来还不错,我将尽快在 linux-next 中完成这一工作。

很高兴看到隧道尽头出现了曙光,乐观地说,它甚至有可能出现在即将到来的 Linux 6.11 周期中。更新后的补丁已通过审核和讨论。

两年后继续追求更快的 getrandom() 性能

就在三天前,这些补丁还在 random.git 的 vdso 分支中进行了更新。希望这个有助于提高 getrandom() 性能的补丁系列能在过去两年的工作中为 Linux 6.11 内核做好准备。

转自 The Quest For Faster getrandom() Performance Continues Two Years Later – Phoronix