我有两台机器,除了内核版本不同外,它们在各个方面都完全相同(硬件、分布、应用程序工作负载、/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 特定缓冲区。可在此处找到更改此行为的补丁:
性能差异是由于 XFS 变化导致的文件数据和元数据缓存之间的平衡不同造成的。