80 个内核中有 16 个内核未被利用

Hen*_*est 11 cpu-load cpu 14.04

最近我发现我们的服务器不再使用系统中的所有 80 个线程。尽管系统负载很高,但看起来 16 个内核始终处于空闲状态。

它是戴尔 powerEdge R900 服务器,有 4 个插槽,是 10 核至强的 4 倍。所以 40 个内核,HT 有 80 个线程。(Intel(R) Xeon(R) CPU E7-4850 @ 2.00GHz)。系统内存为 512GB 运行 Ubuntu 14.04.1 LTS。我还没有重新启动服务器,我希望避免这种情况。

uname -a
Linux 程序集 3.13.0-35-generic #62-Ubuntu SMP Fri Aug 15 01:58:42 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

我检查了以下内容:

i7z测温:(不能显示4个插座

来自 cpuinfo 1994.00Mhz 的 CPU 速度
真频(不计 Turbo) 1994 MHz

套接字 [0] - [物理内核 = 10,逻辑内核 = 20,最大在线内核数 = 10]
  CPU 倍频器 15x || 总线时钟频率 (BCLK) 132.93 MHz
  TURBO 在 10 个内核上启用,超线程打开
  不考虑 Turbo 的最大频率 2126.93 MHz (132.93 x [16])
  具有 1/2/3/4/5/6 个内核的最大 TURBO 乘数(如果启用)为 0x/0x/0x/0x/0x/0x
  实际电流频率 1994.02 MHz(以下最大值)
        核心 [核心 ID]:实际频率(倍数) C0% Halt(C1)% C3 % C6 % Temp
        核心 1 [1]:1994.01 (15.00x) 100 0 0 0 75
        核心 2 [5]:1994.00 (15.00x) 100 0 0 0 77
        核心 3 [9]:1994.02 (15.00x) 100 0 0 0 76
        核心 4 [13]:1994.00 (15.00x) 100 0 0 0 77
        核心 5 [17]:1994.00 (15.00x) 100 0 0 0 77
        核心 6 [21]:1994.00 (15.00x) 97.7 0.404 0 1.86 77
        核心 7 [25]:1994.00 (15.00x) 94.5 0 1 5.27 77
        核心 8 [29]:1994.00 (15.00x) 100 0 0 0 76
        核心 9 [33]:1994.00 (15.00x) 99.8 0 1 1 75
        核心 10 [37]:1994.00 (15.00x) 100 0 0 0 73
  不考虑 Turbo 的最大频率 2126.93 MHz (132.93 x [16])
  具有 1/2/3/4/5/6 个内核的最大 TURBO 乘数(如果启用)为 0x/0x/0x/0x/0x/0x
  实际电流频率 1994.02 MHz(以下最大值)
        核心 [核心 ID]:实际频率(倍数) C0% Halt(C1)% C3 % C6 % Temp
        核心 1 [1]:1994.02 (15.00x) 100 0 0 0 74
        核心 2 [5]:1994.00 (15.00x) 100 0 0 0 76
        核心 3 [9]:1994.02 (15.00x) 100 0 0 0 76
        核心 4 [13]:1994.00 (15.00x) 100 0 0 0 77
        核心 5 [17]:1994.00 (15.00x) 100 0 0 0 76
        核心 6 [21]:1994.00 (15.00x) 97 0 1 2.43 77
        核心 7 [25]:1994.00 (15.00x) 92.9 0 1 6.81 77
C0 = 处理器不停机运行00x) 100 0 0 0 75
C1 = 处理器停止运行(状态 >C0 是省电模式) 1 1 75
C3 = 在 PLL 关闭且核心缓存关闭的情况下运行的内核 0 0 73
C6 = C3 中的所有内容 + 保存到最后一级缓存的核心状态
  表中的以上值是过去 1 秒的百分比
[core-id] 指的是 /proc/cpuinfo 中的 core-id 编号
读取垃圾值时打印“垃圾值”消息
  Ctrl+C 退出

空闲:最后 16 个内核都是 100% 空闲:

mpstat -p ALL 1:
平均:CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
平均值:全部 70.69 0.00 0.70 0.00 0.00 0.00 0.00 0.00 0.00 28.61
平均值:0 92.93 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 7.07
平均值:1 94.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 6.00
平均值:2 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均值:3 83.33 0.00 2.08 0.00 0.00 0.00 0.00 0.00 0.00 14.58
平均值:4 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
平均值:5 100.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
………………………………………………………………………………………………………………………………………………………… …………
平均值:64 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:65 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:66 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:67 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:68 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:69 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:70 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:71 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:72 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:73 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:74 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:75 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:76 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:77 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:78 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:79 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

最高负荷数字:

top - 17:41:48 up 35 days, 6:28, 15 users, load average: 77.69, 70.48, 62.73
任务:共 1327 个,运行 44 个,睡眠 1281 个,停止 2 个,僵尸 0 个
%Cpu(s): 63.7 us, 13.6 sy, 0.0 ni, 22.3 id, 0.2 wa, 0.0 hi, 0.2 si, 0.0 st
KiB Mem: 52837942+total, 52553190+used, 2847524 free, 535660 buffers
KiB 交换:总共 78124032,已使用 2105608,免费 76018416。40637328+缓存内存

有时空闲 % 不再是 100,而是少了一点,正如你在这里看到的,但大多数情况下它保持在 100% 空闲。

平均:CPU %usr %nice %sys %iowait %irq %soft %steal %guest %gnice %idle
平均值:全部 70.69 0.00 0.70 0.00 0.00 0.00 0.00 0.00 0.00 28.61
平均值:64 0.13 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 99.87
平均值:65 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:66 0.00 0.00 2.63 0.00 0.00 0.00 0.00 0.00 0.00 97.37
平均值:67 0.00 0.00 0.13 0.13 0.00 0.00 0.00 0.00 0.00 99.75
平均值:68 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:69 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:70 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:71 0.00 0.00 0.12 0.00 0.00 0.00 0.00 0.00 0.00 99.88
平均值:72 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:73 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:74 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:75 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:76 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:77 0.00 0.00 0.13 0.00 0.00 0.00 0.00 0.00 0.00 99.87
平均值:78 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00
平均值:79 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 100.00

我还运行了这个命令以确保它们都在线:

对于`seq 01 79`中的计数;执行 echo 1 > /sys/devices/system/cpu/cpu${COUNT}/online; 

使用 HTop 程序,我可以将每个线程的 CPU 使用率可视化,并看到 64 个填充条和 16 个空条(最后 16 个)。

当我尝试在核心 >63 处启动进程时,这样做也失败了:

root@server:~#taskset -c 63 时间
用法:时间 [-apvV] [-f 格式] [-o 文件] [--append] [--verbose]
       [--portability] [--format=format] [--output=file] [--version]
       [--quiet] [--help] 命令 [arg ...]
root@server:~# taskset -c 64 时间
任务集:未能设置 pid 0 的关联:无效参数
root@server:~#taskset -c 65 时间
任务集:未能设置 pid 0 的关联:无效参数

相关线程:https : //askubuntu.com/questions/536541/ubuntu-uses-only-2-out-of-4-processor-cores

编辑:事实证明,内核会即时关闭,但无法正常启动。这些不可用的核心上似乎有进程正在运行,但无法在其上启动任何新进程。根据 dmesg 日志,内核被禁用并快速启用。我不得不说这是关闭这些内核的意图,所以我们禁用了这个“功能”。DMESG 示例日志:

[Mon Jan 12 12:42:40 2015] kvm:在 CPU79 上禁用虚拟化
[Mon Jan 12 12:42:40 2015] smpboot:CPU 79 现在离线
....
[2015 年 1 月 12 日星期一 12:43:12] smpboot:引导节点 0 处理器 79 APIC 0xf3
[Mon Jan 12 12:43:12 2015] kvm:在 CPU79 上启用虚拟化

我们通过以下方式启用/禁用内核:

对于`seq 64 79`中的计数;执行 echo 1 > /sys/devices/system/cpu/cpu${COUNT}/online;done

我们从未将这些命令与我们的 16 个不可用内核相关联,因为通常上述命令可以正常工作。(我们也尝试禁用 powermanager,但这没有帮助)

小智 1

并非所有程序都可以使用多线程。例如,php 就是其中之一。如果一个 php 进程需要大量 CPU,则只有 1 个 CPU 会达到最大。而其他人就会闲着。