文章预览
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(
………………………………