Linus::我略微出手修改几行内核代码就提升了2.6%性能

科技   2024-11-04 17:21   江苏  

点击关注公众号,Java干货及时送达

来源:OSC开源社区
Linus 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) #endif
/*@@ -159,19 +160,27 @@ _inline_copy_from_user(void *to, const void __user *from, unsigned long n) { unsigned long res = n; might_fault();- if (!should_fail_usercopy() && likely(access_ok(from, n))) {+ if (should_fail_usercopy())+ goto fail;+ if (can_do_masked_user_access())+ from = mask_user_address(from);+ else {+ if (!access_ok(from, n))+ goto fail; /* * Ensure that bad access_ok() speculation will not * lead to nasty side effects *after* the copy is * finished: */ barrier_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=0fc810ae3ae110f9e2fcccce80fc8c8d62f97907


宝子们,小编给大家安排福利了~

你喜欢本次推文吗?欢迎各位评论区聊一聊

留言抽 3位 家人,赠送8.88元现金红包

↓ 分享在看点赞
至少我要拥有一个吧

  

1、停止使用 `let` 或为什么它在 JavaScript/TypeScript 中是不必要的【包邮送书】

2、MyBatis-Plus 开发提速器:mybatis-plus-generator-ui

3、MyBatis-Plus 开发提速器:mybatis-plus-generator-ui

4、美团一面:Spring Cloud 远程调用为啥要采用 HTTP,而不是 RPC?

5、相比高人气的Rust、Go,为何 Java、C 在工具层面进展缓慢?

6、SQLite这么小众的数据库,到底是什么人在用?

点在看

Java技术迷
专注于计算机编程语言知识分享。主要包括Java基础技术、数据结构、相关工具、spring Cloud、intellij idea......,送书、送红包福利等你来!
 最新文章