Linux 内核 (/proc/meminfo) 未报告所有内存

Eri*_*ric 4 linux memory

除了内核版本之外,我有两台机器在各方面(硬件、分发、应用程序工作负载、/proc/sys/vm 设置等)都相同。一个是 2.6.33,另一个是 3.1.0。对于给定的工作负载,2.6.33 机器的性能要好得多(两者都受 I/O 限制,主要是读取)。我注意到 3.1.0 机器上的缓存/活动/活动(文件)要小得多(超过 20GB),并且似乎没有被报告的任何其他指标考虑在内。3.1.0 机器上发生的读取次数更多这一事实也证实了这一点(由于最有可能用于页面缓存的内存较少)。我查看了每一个可调参数,/proc/buddyinfo 用于碎片,/proc/slabinfo 用于平板使用(使用了几 GB,但不是大约 20GB),但没有任何问题。任何想法将不胜感激。

这是来自运行 2.6.33 内核的机器,一切正常。

> cat /proc/meminfo
MemTotal:       74372248 kB
MemFree:          200492 kB
Buffers:            2976 kB
Cached:         65324256 kB
SwapCached:            0 kB
Active:         32949324 kB
Inactive:       32689844 kB
Active(anon):     287904 kB
Inactive(anon):    27272 kB
Active(file):   32661420 kB
Inactive(file): 32662572 kB
Unevictable:       19832 kB
Mlocked:           19832 kB
SwapTotal:       8393952 kB
SwapFree:        8393952 kB
Dirty:              8324 kB
Writeback:             0 kB
AnonPages:        332036 kB
Mapped:            12576 kB
Shmem:               304 kB
Slab:            8217640 kB
SReclaimable:    7859644 kB
SUnreclaim:       357996 kB
KernelStack:        4592 kB
PageTables:        10652 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    45580076 kB
Committed_AS:     934328 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      314652 kB
VmallocChunk:   34359294955 kB
HardwareCorrupted:     0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:        6384 kB
DirectMap2M:     2080768 kB
DirectMap1G:    73400320 kB
Run Code Online (Sandbox Code Playgroud)

这是来自运行 3.1.0 内核的机器。请注意,缓存/活动大小要小 20G 以上,并且似乎没有由任何其他指标构成。

> cat /proc/meminfo
MemTotal:       74370628 kB
MemFree:          415680 kB
Buffers:          384916 kB
Cached:         42088392 kB
SwapCached:            0 kB
Active:          5636160 kB
Inactive:       37170092 kB
Active(anon):     300656 kB
Inactive(anon):    36620 kB
Active(file):    5335504 kB
Inactive(file): 37133472 kB
Unevictable:       19880 kB
Mlocked:            7616 kB
SwapTotal:       8393956 kB
SwapFree:        8393956 kB
Dirty:              6524 kB
Writeback:             0 kB
AnonPages:        354084 kB
Mapped:            14588 kB
Shmem:               472 kB
Slab:           11419580 kB
SReclaimable:    9835632 kB
SUnreclaim:      1583948 kB
KernelStack:        2944 kB
PageTables:        12084 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:    45579268 kB
Committed_AS:    1006028 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      290448 kB
VmallocChunk:   34321698548 kB
HardwareCorrupted:     0 kB
AnonHugePages:    135168 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:      100592 kB
DirectMap2M:     6180864 kB
DirectMap1G:    69206016 kB
Run Code Online (Sandbox Code Playgroud)

Eri*_*ric 6

事实证明,XFS 元数据缓冲区正在消耗内存。他们从内核页面缓存移动到 2.6.39 内核中的 XFS 特定缓冲区。可以在此处找到更改行为的补丁:

http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=0e6e847ffe37436e331c132639f9f872febce8​​2e

性能差异是由于 XFS 更改导致文件数据和元数据缓存之间的平衡不同。