Linus::我略微出手修改几行内核代码就提升了2.6%性能
admin
阅读:64
2024-11-06 12:52:56
评论:0
OSCHINALinus Torvalds 本周三向内核合并了自己编写的一个补丁,该补丁通过修改几行代码,就在英特尔的某项性能基准测试中(名为"will it scale"的 per-thread-ops 基准测试) 实现了 2.6% 的性能提升。 根据介绍,这个补丁的目的是避免在 64 位 copy_from_user 函数中使用 barrier_nospec 。copy_from_user 用于将数据块从用户空间复制到内核空间。Linus 解释道: “64 位 copy_from_user 中的 barrier_nospec 函数运行速度很慢。 如果地址无效,可以使用 pointer masking 来强制用户指针全为 1。”整体的代码改动如下(有请懂的大佬在评论区解读一波): @@ -38,6 +38,7 @@#else#define can_do_masked_user_access 0#define masked_user_access_begin(src) NULL+ #define mask_user_address(src) (src)#endifbarrier_nospec;- instrument_copy_from_user_before(to, from, n);- res = raw_copy_from_user(to, from, n);- instrument_copy_from_user_after(to, from, n, res);}- if (unlikely(res))- memset(to + (n - res), 0, res);+ instrument_copy_from_user_before(to, from, n);+ res = raw_copy_from_user(to, from, n);+ instrument_copy_from_user_after(to, from, n, res);+ if (likely(!res))+ return 0;+fail:+ memset(to + (n - res), 0, res);return res;}extern __must_check unsigned long虽然不清楚这一微小的优化最终是否会对其他合成或实际工作负载产生影响,但无论如何,对内核的每一点优化终归是好事...... 尤其是当这种优化是避免 barrier_nospec 开销的结果。该补丁已合并到 Linux 内核的 Git 代码仓库中,并将成为 11 月下旬发布的 Linux 6.12 稳定版的一部分。详情查看发布公告:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0fc810ae3ae110f9e2fcccce80fc8c8d62f97907END
本文 htmlit 原创,转载保留链接!网址:https://dgghz.com.cn/keji/4743.html
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
发表评论