You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多核服务器上Linux pthreads性能骤降问题求助

问题分析与排查方案

核心现象拆解

  • 单线程(单进程)性能正常,可达60M操作/秒;同进程双线程时,每个线程性能骤降至0.7M操作/秒,CPU负载拉满200%
  • 跨进程运行两个单线程程序时,无性能下降
  • perf stat检测到异常指标:LLC-load-misses高达99.88%,iTLB-load-misses达19477.24%
  • 该问题仅出现在本地双Xeon Gold 5118物理服务器,GCloud、AWS EC2云服务器无此现象

排查方向与验证步骤

1. NUMA架构适配问题

Xeon Gold 5118属于NUMA架构,两颗CPU对应独立的NUMA节点,跨节点内存访问延迟是本地的数倍。若同进程双线程被调度到不同NUMA节点,且内存仅分配在其中一个节点,会直接触发极高的缓存/TLB miss。

  • 查看NUMA硬件拓扑:执行numactl --hardware确认节点数量、核心分布及内存绑定情况
  • 检查进程内存的NUMA分布:用numastat -p <进程PID>查看内存是否集中在单个节点
  • 强制绑定到单NUMA节点测试:执行numactl --cpunodebind=0 --membind=0 ./你的C测试程序,观察双线程性能是否恢复

2. 硬件层面故障排查

本地物理服务器可能存在CPU缓存、内存控制器或QPI链路故障,跨NUMA调度时触发性能异常:

  • 运行服务器厂商提供的硬件诊断工具(如Dell OpenManage、HP iLO诊断),排查内存、LLC缓存、CPU互连链路是否存在错误
  • 临时禁用一颗CPU(通过BIOS设置),仅用单颗CPU运行双线程测试,验证问题是否消失

3. 内核与系统配置问题

Ubuntu 23.10搭载的6.5.x内核可能存在NUMA调度或内存管理的bug,而云服务器通常使用更稳定的LTS内核:

  • 对比云服务器内核版本,尝试降级到Ubuntu 22.04的5.15 LTS内核测试
  • 关闭NUMA自动平衡:执行echo 0 > /proc/sys/kernel/numa_balancing后重新运行测试,避免内核强制迁移线程到不同节点

4. 测试程序内存分配优化

即使程序无显式内存共享,也可能存在隐含的跨NUMA内存分配:

  • 修改C程序,让每个线程独立分配本地内存(使用numa_alloc_local等NUMA感知的分配函数),确保线程内存与运行节点绑定
  • 在线程初始化时调用malloc_trim(0),避免内存分配器复用跨节点的内存块

5. CPU亲和性验证

系统默认调度策略可能将同进程的两个线程分散到不同NUMA节点,而跨进程线程可灵活调度到同一节点:

  • 查看线程的CPU亲和性:先用ps -L -p <进程PID>获取线程TID,再执行taskset -c -p <线程TID>确认核心绑定情况
  • 手动绑定双线程到同一NUMA节点的核心:执行taskset -c 0,1 ./你的C测试程序(0、1为同一节点的核心编号),测试性能变化

内容的提问来源于stack exchange,提问作者Taylan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 09:35:10