232 Star 881 Fork 435

GVPopenEuler / kernel

 / 详情

[OLK-5.10] 回合特性 "x86/tlb: Concurrent TLB flushes"

Done
Task
Opened this issue  
2021-07-09 10:20

The series improves TLB shootdown by flushing the local TLB concurrently
with remote TLBs, overlapping the IPI delivery time with the local
flush. Performance numbers can be found in the previous version [1].

v5 was rebased on 5.11 (long time after v4), and had some bugs and
embarrassing build errors. Peter Zijlstra and Christoph Hellwig had some
comments as well. These issues were addressed (excluding one 82-chars
line that I left). Based on their feedback, an additional patch was also
added to reuse on_each_cpu_cond_mask() code and avoid unnecessary calls
by inlining.

KernelCI showed RCU stalls on arm64, which I could not figure out from
the kernel splat. If this issue persists, I would appreciate it someone
can assist in debugging or at least provide the output when running the
kernel with CONFIG_CSD_LOCK_WAIT_DEBUG=Y.

[1] https://lore.kernel.org/lkml/20190823224153.15223-1-namit@vmware.com/

Comments (4)

Tong Tiangen created任务
Tong Tiangen set related repository to openEuler/kernel
Expand operation logs

Hey Tong-Tiangen, Welcome to openEuler Community.
All of the projects in openEuler Community are maintained by @openeuler-ci-bot .
That means the developers can comment below every pull request or issue to trigger Bot Commands.
Please follow instructions at https://gitee.com/openeuler/community/blob/master/en/sig-infrastructure/command.md to find the details.

openeuler-ci-bot added
 
sig/Kernel
label

该特性已进入主线,包含9个补丁,在v5.13-rc1合入:
a5aa5ce30059 smp: Inline on_each_cpu_cond() and on_each_cpu()
1608e4cf31b8 x86/mm/tlb: Remove unnecessary uses of the inline keyword
291c4011dd7a cpumask: Mark functions as pure
09c5272e4861 x86/mm/tlb: Do not make is_lazy dirty for no reason
2f4305b19fe6 x86/mm/tlb: Privatize cpu_tlbstate
4ce94eabac16 x86/mm/tlb: Flush remote and local TLBs concurrently
6035152d8eeb x86/mm/tlb: Open-code on_each_cpu_cond_mask() for tlb_is_not_lazy()
4c1ba3923e6c x86/mm/tlb: Unify flush_tlb_func_local() and flush_tlb_func_remote()
a32a4d8a815c smp: Run functions concurrently in smp_call_function_many_cond()

其中补丁:a32a4d8a815c smp: Run functions concurrently in smp_call_function_many_cond()
依赖前置补丁:545b8c8df41f smp: Cleanup smp_call_function*()
改前置补丁在 v5.11-rc1 合入主线。

本次合入补丁集包含原补丁集的9个补丁 + 1个前置补丁。

补丁:smp: Run functions concurrently in smp_call_function_many_cond() 修改了__call_single_data结构的定义,但是没用同步修改csd_lock_wait_getcpu()函数中相关的引用。这个问题主线meger合入主线时一并修改掉了(commit a787bdaff83a085288b6fc607afb4bb648da3cc9)

a787bdaff83a085288b6fc607afb4bb648da3cc9涉及到两处修改:

  1. kernel/sched/core.c文件中的try_to_wake_up()

  2. kernel/smp.c 文件中的csd_lock_wait_getcpu() (也就是上面提到的没有同步修改的位置)

因此,在OLK-5.10分支中,ec618b84f6e15281cc3660664d34cd0dd2f2579e需要同步引入,经过分析,第1)处修改已经在ec618b84f6e15281cc3660664d34cd0dd2f2579e中完成修改。因此只要完成第2)处的修改。

第2)处的修改这里我放到smp: Run functions concurrently in smp_call_function_many_cond()补丁上完成。

ae2b24908089 smp: Inline on_each_cpu_cond() and on_each_cpu()
82672cc0fe32 x86/mm/tlb: Remove unnecessary uses of the inline keyword
cbb279a55376 cpumask: Mark functions as pure
ee525ce35500 x86/mm/tlb: Do not make is_lazy dirty for no reason
5819c241f707 x86/mm/tlb: Privatize cpu_tlbstate
fcb63284ba29 x86/mm/tlb: Flush remote and local TLBs concurrently
4ffc0ff5a3a7 x86/mm/tlb: Open-code on_each_cpu_cond_mask() for tlb_is_not_lazy()
d8da76fc9c39 x86/mm/tlb: Unify flush_tlb_func_local() and flush_tlb_func_remote()
618bab373124 smp: Run functions concurrently in smp_call_function_many_cond()
4f9ed36f0984 smp: Cleanup smp_call_function*()

Tong Tiangen changed issue state from 待办的 to 已完成

Sign in to comment

Status
Assignees
Projects
Milestones
Pull Requests
Successfully merging a pull request will close this issue.
Branches
Planed to start   -   Planed to end
-
Top level
Priority
Duration (hours)
参与者(2)
5329419 openeuler ci bot 1632792936
C
1
https://toscode.gitee.com/openeuler/kernel.git
git@toscode.gitee.com:openeuler/kernel.git
openeuler
kernel
kernel

Search