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

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

我有两台机器,除了内核版本不同外,它们在各个方面都完全相同(硬件、分布、应用程序工作负载、/proc/sys/vm 设置等)。一台是 2.6.33,另一台是 3.1.0。2.6.33 机器在给定工作负载下的表现明显更好(两者都主要受 I/O 限制,主要在读取上)。我注意到 3.1.0 机器上的 Cached/Active/Active(文件)要小得多(超过 20GB),而且似乎没有在报告的任何其他指标中得到说明。3.1.0 机器上发生的读取次数要多得多(很可能是因为可用于页面缓存的内存较少),这也证实了这一点。我查看了每个可调参数,/proc/buddyinfo 的碎片化情况,/proc/slabinfo 的 slab 使用情况(多用了几 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

这是从运行 3.1.0 内核的机器上获取的。请注意,Cached/Active 大小小了 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

答案1

事实证明,内存被 XFS 元数据缓冲区占用。它们从内核页面缓存移至 2.6.39 内核中的 XFS 特定缓冲区。可在此处找到更改此行为的补丁:

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

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

相关内容