在这个系统上只有 8kswapd
秒:
top - 00:10:37 up 3:18, 5 users, load average: 60.96, 61.95, 58.34
Tasks: 4318 total, 47 running, 2433 sleeping, 1836 stopped, 2 zombie
%Cpu(s): 0.2 us, 80.9 sy, 4.4 ni, 11.6 id, 0.2 wa, 0.0 hi, 2.8 si, 0.0 st
GiB Mem : 472.4 total, 1.2 free, 470.5 used, 0.7 buff/cache
GiB Swap: 16681.0 total, 14502.9 free, 2178.1 used. 0.1 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
437 root 20 0 0 0 0 R 97.6 0.0 54:16.04 kswapd3
439 root 20 0 0 0 0 R 89.9 0.0 50:29.51 kswapd5
436 root 20 0 0 0 0 R 88.7 0.0 46:20.85 kswapd2
441 root 20 0 0 0 0 R 87.5 0.0 50:12.31 kswapd7
434 root 20 0 0 0 0 R 82.8 0.0 41:19.56 kswapd0
438 root 20 0 0 0 0 R 81.6 0.0 51:17.61 kswapd4
435 root 20 0 0 0 0 R 76.3 0.0 44:02.43 kswapd1
440 root 20 0 0 0 0 R 74.2 0.0 44:34.82 kswapd6
1005926 tange 39 19 789232 778236 1448 S 34.1 0.2 0:06.77 swapout
1009124 tange 39 19 780016 769156 1576 S 32.6 0.2 0:03.25 swapout
kswapd
什么决定了s运行的数量?
答案1
有kswapd
每个内存节点一个,IE带有附加内存的节点(在 NUMA 意义上)。
答案2
也许尝试将 /proc/sys/vm/kswapd_threads 设置为更高的值。上限由MAX_KSWAPD_THREADS
内核kern_src/include/linux/mmzone.h
编译期间确定,因此是硬编码的。
~ # sysctl vm.kswapd_threads=<int>
我最多可以在我的设备上创建 16 个 kswapd 线程。
┌──(root@termux)-[~]
└─# pgrep -fa kswapd
153 [kswapd0:0]
┌──(root@termux)-[~]
└─# sysctl vm.kswapd_threads=16
vm.kswapd_threads = 16
┌──(root@termux)-[~]
└─# pgrep -fa kswapd
153 [kswapd0:0]
8058 [kswapd0:1]
8059 [kswapd0:2]
8060 [kswapd0:3]
8061 [kswapd0:4]
8062 [kswapd0:5]
8063 [kswapd0:6]
8064 [kswapd0:7]
8065 [kswapd0:8]
8066 [kswapd0:9]
8067 [kswapd0:10]
8068 [kswapd0:11]
8069 [kswapd0:12]
8070 [kswapd0:13]
8071 [kswapd0:14]
8072 [kswapd0:15]
┌──(root@termux)-[~]
└─# sysctl vm.kswapd_threads=17
sysctl: setting key "vm.kswapd_threads": Invalid argument