kswapd:s 的数量由什么决定?

kswapd:s 的数量由什么决定?

在这个系统上只有 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

相关内容