Description of problem: 性能优化,x86平台当前UB总分不及预期,通过检视代码发现 osq_lock 存在伪共享的情况 Version-Release number of selected component (if applicable): How reproducible: Steps to Reproduce: 使用UnixBench测试套./Run fstime进行测试, Actual results: 通过 UnixBench 测试套件发现,在文件复制项目中,osq_lock() 导致了极高的开销。 开销占比如下:osq_lock() 为 94.25%,rwsem_spin_on_owner 为 0.74%,filemap_get_read_batch 为 0.32%。 对 osq_lock() 进行分析后有一些发现: 在 osq_lock() 的序言中,将 percpu 结构的 cpu 成员设置为本地 CPU 标识,且该值实际上不再改变,可视为常量变量。 percpu 结构的其他成员如 next、prev 和 locked 被频繁修改,会使其他 CPU 上的 cpu 成员缓存失效。 ftime的测试数据相对欧拉系统要低。 Expected results: 解决spinlock的false sharing,从而优化unixbench的 file copy性能 Additional info:
The PR Link: https://gitee.com/anolis/cloud-kernel/pulls/4116
Merged by @dtc Mark it as "Fixed"