Linux 为什么内存没有完全用于缓存数据

Linux 为什么内存没有完全用于缓存数据,linux,memory-management,Linux,Memory Management,在CentOS 7.3.1611(linux内核3.10)上,我的程序是I/O绑定的,使用缓冲区I/O读取磁盘设备,通常linux内核可能会使用完整的内存将磁盘数据缓存为缓冲区,但它始终保留约20G未使用的内存,并且kswapd守护进程始终保持回收页面 顶 cat/proc/meminfo MemTotal: 131755580 kB MemFree: 21335956 kB MemAvailable: 102232248 kB Buffers: 75

在CentOS 7.3.1611(linux内核3.10)上,我的程序是I/O绑定的,使用缓冲区I/O读取磁盘设备,通常linux内核可能会使用完整的内存将磁盘数据缓存为缓冲区,但它始终保留约20G未使用的内存,并且kswapd守护进程始终保持回收页面

cat/proc/meminfo

MemTotal:       131755580 kB
MemFree:        21335956 kB
MemAvailable:   102232248 kB
Buffers:        75100216 kB
Cached:          6990768 kB
SwapCached:            0 kB
Active:         69447392 kB
Inactive:       38154608 kB
Active(anon):   26890392 kB
Inactive(anon):   709920 kB
Active(file):   42557000 kB
Inactive(file): 37444688 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:               180 kB
Writeback:             0 kB
AnonPages:      25511156 kB
Mapped:            35036 kB
Shmem:           2090184 kB
Slab:            1835540 kB
SReclaimable:    1684472 kB
SUnreclaim:       151068 kB
KernelStack:       15536 kB
PageTables:        59556 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    65877788 kB
Committed_AS:    5750772 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      551220 kB
VmallocChunk:   34358888444 kB
HardwareCorrupted:     0 kB
AnonHugePages:  21006336 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      294840 kB
DirectMap2M:    11159552 kB
DirectMap1G:    124780544 kB
cat/proc/buddyinfo

Node 0, zone      DMA      1      0      1      0      2      1      1      0      1      1      3 
Node 0, zone    DMA32    785    898    869    489    260    227    442    316    142      0      0 
Node 0, zone   Normal  71568 1575732 446338     39      9      0      0      0      0      0      0
sar-B-r1

Linux 3.10.0-514.el7.x86_64 (PZ-R-01)   02/09/2018  _x86_64_    (32 CPU)

02:13:57 PM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
02:13:58 PM 139388.00     48.00   4622.00      0.00 399474.00      0.00  17844.00  17908.00    100.36

02:13:57 PM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
02:13:58 PM  20986792 110768788     84.07  75421044   7021576   5743480      4.36  69832168  38119340       200
似乎可用内存页已经足够了,为什么kswapd仍然回收页

//2018/3/13更新

当linux内核从3.10更新到4.4时,它可以使用几乎全部的内存来缓存磁盘数据,因此这一定是由kswapd行为引起的,linux内核3.11改进了页面回收行为

详情见:

Linux 3.10.0-514.el7.x86_64 (PZ-R-01)   02/09/2018  _x86_64_    (32 CPU)

02:13:57 PM  pgpgin/s pgpgout/s   fault/s  majflt/s  pgfree/s pgscank/s pgscand/s pgsteal/s    %vmeff
02:13:58 PM 139388.00     48.00   4622.00      0.00 399474.00      0.00  17844.00  17908.00    100.36

02:13:57 PM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
02:13:58 PM  20986792 110768788     84.07  75421044   7021576   5743480      4.36  69832168  38119340       200