kswapd:sの数はどのように決まりますか?

kswapd:sの数はどのように決まりますか?

kswapdこのシステムではわずか8秒しかかかりません。

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■実行回数はどのように決定されますか?

答え1

持つkswapdメモリノードごとに1つつまり接続されたメモリを持つノード(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

関連情報