除了内核版本之外,我有两台机器在各方面(硬件、分发、应用程序工作负载、/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)
事实证明,XFS 元数据缓冲区正在消耗内存。他们从内核页面缓存移动到 2.6.39 内核中的 XFS 特定缓冲区。可以在此处找到更改行为的补丁:
性能差异是由于 XFS 更改导致文件数据和元数据缓存之间的平衡不同。