频率
[apps@gd16-sre-manage-034 ~]$ sudo cpupower frequency-info
analyzing CPU 0:
driver: intel_pstate
CPUs which run at the same hardware frequency: 0
CPUs which need to have their frequency coordinated by software: 0
maximum transition latency: Cannot determine or is not supported.
hardware limits: 1.20 GHz - 2.60 GHz
available cpufreq governors: performance powersave
current policy: frequency should be within 1.20 GHz and 2.60 GHz.
The governor "powersave" may decide which speed to use
within this range.
current CPU frequency: 2.60 GHz (asserted by call to hardware)
boost state support:
Supported: no
Active: no
2900 MHz max turbo 4 active cores
2900 MHz max turbo 3 active cores
3000 MHz max turbo 2 active cores
3100 MHz max turbo 1 active cores
# 频率信息
# 是否开超频,应为No,默认看第一个CPU
sudo cpupower frequency-info | grep Active
# 是否有降频,查看频率浮动范围是否小于1
lscpu | grep 'CPU MHz:'
cat /proc/cpuinfo | grep "cpu MHz"|sort|head -n 1
# 实时监控CPU频率
watch sudo cpupower monitor
信息
# cpu信息
lscpu
# 核数
lscpu|grep ^CPU\(s\):
# numa信息
lscpu|grep "NUMA node"
缓存信息
cpu cache line
$ getconf -a|grep -i cache
LEVEL1_ICACHE_SIZE 32768
LEVEL1_ICACHE_ASSOC 8
LEVEL1_ICACHE_LINESIZE 64
LEVEL1_DCACHE_SIZE 32768
LEVEL1_DCACHE_ASSOC 8
LEVEL1_DCACHE_LINESIZE 64
LEVEL2_CACHE_SIZE 262144
LEVEL2_CACHE_ASSOC 8
LEVEL2_CACHE_LINESIZE 64
LEVEL3_CACHE_SIZE 15728640
LEVEL3_CACHE_ASSOC 20
LEVEL3_CACHE_LINESIZE 64
LEVEL4_CACHE_SIZE 0
LEVEL4_CACHE_ASSOC 0
LEVEL4_CACHE_LINESIZE 0
# 另一个命令
cat /sys/devices/system/cpu/cpu0/cache/index0/coherency_line_size
以下命令经过生产环境检验,是绝对可靠的
进程绑定CPU
taskset,绑定了就不会使用其他CPU,这个命令有风险
sudo taskset -pc $core $pid
硬中断绑定核
echo $bitmask > /proc/irq/IRQ#/smp_affinity
# 示例(把44号中断绑定到前4个CPU(CPU0-3)上面)
echo f > /proc/irq/44/smp_affinity
# 示例(把IID号中断绑定到第二个CPU(CPU1)上面)
echo 2 > /proc/irq/${IID}/smp_affinity
/proc/irq/{IID}/smp_affinity 自身是一个位掩码(bitmask),文件默认是全部ffffffff,特定的位对应特定的 CPU,这样,01 就意味着只有第一个 CPU 可以处理对应的中断,而 0f(0x1111)意味着四个 CPU 都会参与中断处理。2 表示第二个CPU可以处理对应中断,3表示第一和第二个cpu处理这个中断以此类推。
隔离CPU
isolcpus,被隔离的CPU,操作系统是不会调度其他进程的
GRUB_CMDLINE_LINUX="<前面的参数不变> isolcpus=6,7,8,9,10,11,15,16,17,18,19,20,21,22,23"
# 对比并生效
diff /root/backup/grub /etc/default/grub
grub2-mkconfig -o /etc/grub2.cfg
# 重启机器
sudo systemctl reboot
NUMA
- BIOS关闭NUMA
BIOS的Memory Setting菜单找到Node Interleaving项,设置为Disabled表示启用NUMA,非一致访问方式访问,是默认配置;设置为Enabled表示关闭NUMA,采用SMP方式启用内存交错模式。 - 软件层次关闭NUMA
- 如果应用会占用大规模内存,应该选择关闭NUMA Node限制(或从硬件关闭NUMA)
- 如果应用并不占用大内存,而是要求更快的程序运行时间,应该选择限制只访问本NUMA Node方法来进行处理。
# 检查BIOS是否开启NUMA
grep -i numa /var/log/dmesg
# 检查当前系统的NUMA节点
numactl --hardware
# 查看内存数据
numastat
NUMA模式
numactl [--interleave nodes] [--preferred node] [--membind nodes] [--cpunodebind nodes] [--physcpubind cpus] [--localalloc] command
–interleave=nodes, -i nodes用于设定内存的交织分配模式,系统在为多个节点分配内存空间时,将会以轮询分发的方式被分配给多个节点。如果在当前众多的交织分配内存节点中的目标节点无法正确的分配内存空间,内存空间将会由其它的节点来分配。
–membind=nodes, -m nodes从指定节点中分配内存空间,如果节点内存空间不足,分配操作将会失败。
–cpunodebind=nodes, -N nodes用于绑定进程到CPU Node。
–physcpubind, -C cpus用于把进程绑定到CPU核心上。
–localalloc , -l 启动进程,并在当前CPU节点分配内存。
–preferred=node用于指定优先分配内存空间的节点,如果无法在节点分配空间,会从其它节点分配。
# 绑定进程
numactl --cpubind=0 --membind=0 top
# 显示当前NUMA机制
numactl --show
policy: default
preferred node: current
physcpubind: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
cpubind: 0 1
nodebind: 0 1
membind: 0 1
# 显示当前系统中有多少个可用的节点。
sudo numactl --hardware
available: 2 nodes (0-1)
node 0 cpus: 0 1 2 3 4 5 12 13 14 15 16 17
node 0 size: 16355 MB
node 0 free: 13608 MB
node 1 cpus: 6 7 8 9 10 11 18 19 20 21 22 23
node 1 size: 16384 MB
node 1 free: 13294 MB
node distances:
node 0 1
0: 10 20
1: 20 10
cpudist
bcc的工具
cd /usr/share/bcc/tools/
# 在线CPU
sudo ./cpudist -p 87635 1
Tracing on-CPU time... Hit Ctrl-C to end.
usecs : count distribution
0 -> 1 : 0 | |
2 -> 3 : 0 | |
4 -> 7 : 0 | |
8 -> 15 : 0 | |
16 -> 31 : 1 |****************************************|
usecs : count distribution
0 -> 1 : 0 | |
2 -> 3 : 0 | |
4 -> 7 : 0 | |
8 -> 15 : 0 | |
16 -> 31 : 0 | |
32 -> 63 : 0 | |
64 -> 127 : 0 | |
128 -> 255 : 0 | |
256 -> 511 : 0 | |
512 -> 1023 : 0 | |
1024 -> 2047 : 0 | |
2048 -> 4095 : 0 | |
4096 -> 8191 : 0 | |
8192 -> 16383 : 0 | |
16384 -> 32767 : 0 | |
32768 -> 65535 : 0 | |
65536 -> 131071 : 0 | |
131072 -> 262143 : 0 | |
262144 -> 524287 : 0 | |
524288 -> 1048575 : 0 | |
1048576 -> 2097151 : 1 |****************************************|
usecs : count distribution
0 -> 1 : 0 | |
2 -> 3 : 0 | |
4 -> 7 : 0 | |
8 -> 15 : 0 | |
16 -> 31 : 0 | |
32 -> 63 : 0 | |
64 -> 127 : 0 | |
128 -> 255 : 0 | |
256 -> 511 : 0 | |
512 -> 1023 : 0 | |
1024 -> 2047 : 0 | |
2048 -> 4095 : 0 | |
4096 -> 8191 : 0 | |
8192 -> 16383 : 0 | |
16384 -> 32767 : 0 | |
32768 -> 65535 : 0 | |
65536 -> 131071 : 0 | |
131072 -> 262143 : 0 | |
262144 -> 524287 : 0 | |
524288 -> 1048575 : 1 |****************************************|
usecs : count distribution
0 -> 1 : 0 | |
2 -> 3 : 0 | |
4 -> 7 : 0 | |
8 -> 15 : 0 | |
16 -> 31 : 0 | |
32 -> 63 : 0 | |
64 -> 127 : 0 | |
128 -> 255 : 0 | |
256 -> 511 : 0 | |
512 -> 1023 : 0 | |
1024 -> 2047 : 0 | |
2048 -> 4095 : 0 | |
4096 -> 8191 : 0 | |
8192 -> 16383 : 1 |****************************************|
16384 -> 32767 : 0 | |
32768 -> 65535 : 0 | |
65536 -> 131071 : 0 | |
131072 -> 262143 : 0 | |
262144 -> 524287 : 0 | |
524288 -> 1048575 : 0 | |
1048576 -> 2097151 : 0 | |
2097152 -> 4194303 : 1 |****************************************|
usecs : count distribution
0 -> 1 : 0 | |
2 -> 3 : 0 | |
4 -> 7 : 0 | |
8 -> 15 : 0 | |
16 -> 31 : 0 | |
32 -> 63 : 0 | |
64 -> 127 : 0 | |
128 -> 255 : 0 | |
256 -> 511 : 0 | |
512 -> 1023 : 0 | |
1024 -> 2047 : 0 | |
2048 -> 4095 : 0 | |
4096 -> 8191 : 0 | |
8192 -> 16383 : 0 | |
16384 -> 32767 : 0 | |
32768 -> 65535 : 0 | |
65536 -> 131071 : 0 | |
131072 -> 262143 : 0 | |
262144 -> 524287 : 0 | |
524288 -> 1048575 : 0 | |
1048576 -> 2097151 : 0 | |
2097152 -> 4194303 : 1 |****************************************|
usecs : count distribution
0 -> 1 : 0 | |
2 -> 3 : 0 | |
4 -> 7 : 0 | |
8 -> 15 : 0 | |
16 -> 31 : 0 | |
32 -> 63 : 0 | |
64 -> 127 : 0 | |
128 -> 255 : 0 | |
256 -> 511 : 0 | |
512 -> 1023 : 0 | |
1024 -> 2047 : 0 | |
2048 -> 4095 : 0 | |
4096 -> 8191 : 0 | |
8192 -> 16383 : 0 | |
16384 -> 32767 : 0 | |
32768 -> 65535 : 0 | |
65536 -> 131071 : 0 | |
131072 -> 262143 : 0 | |
262144 -> 524287 : 0 | |
524288 -> 1048575 : 1 |****************************************|
^C
usecs : count distribution
0 -> 1 : 0 | |
2 -> 3 : 0 | |
4 -> 7 : 0 | |
8 -> 15 : 0 | |
16 -> 31 : 1 |****************************************|
32 -> 63 : 0 | |
64 -> 127 : 0 | |
128 -> 255 : 0 | |
256 -> 511 : 0 | |
512 -> 1023 : 0 | |
1024 -> 2047 : 0 | |
2048 -> 4095 : 0 | |
4096 -> 8191 : 0 | |
8192 -> 16383 : 0 | |
16384 -> 32767 : 0 | |
32768 -> 65535 : 0 | |
65536 -> 131071 : 0 | |
131072 -> 262143 : 0 | |
262144 -> 524287 : 0 | |
524288 -> 1048575 : 0 | |
1048576 -> 2097151 : 1 |****************************************|
# 离线CPU
sudo ./cpudist -O -p 87635 1
Tracing off-CPU time... Hit Ctrl-C to end.
usecs : count distribution
0 -> 1 : 0 | |
2 -> 3 : 0 | |
4 -> 7 : 1 |****************************************|
usecs : count distribution
0 -> 1 : 0 | |
2 -> 3 : 1 |****************************************|
usecs : count distribution
0 -> 1 : 0 | |
2 -> 3 : 0 | |
4 -> 7 : 0 | |
8 -> 15 : 1 |****************************************|
16 -> 31 : 0 | |
32 -> 63 : 1 |****************************************|
usecs : count distribution
0 -> 1 : 0 | |
2 -> 3 : 1 |****************************************|
usecs : count distribution
0 -> 1 : 0 | |
2 -> 3 : 0 | |
4 -> 7 : 1 |****************************************|
usecs : count distribution
0 -> 1 : 0 | |
2 -> 3 : 0 | |
4 -> 7 : 1 |****************************************|
8 -> 15 : 0 | |
16 -> 31 : 0 | |
32 -> 63 : 1 |****************************************|
^C
usecs : count distribution
0 -> 1 : 0 | |
2 -> 3 : 0 | |
4 -> 7 : 0 | |
8 -> 15 : 1 |****************************************|