是否有可能在不减少整个缓存大小的情况下减少用于Linux中radix_tree_node缓存的空间?
例如,我目前
$ sudo slabtop -sc --once | awk '{ if (0 + $1 > 0) { printf "%20s: % 6d MB, active %3.0f%%\n", $8, $7 / 1024, (100*$2/$1); } }'
ext4_inode_cache: 10387 MB, active 100%
dentry: 2042 MB, active 100%
radix_tree_node: 263 MB, active 90%
buffer_head: 117 MB, active 100%
kmalloc-rcl-64: 92 MB, active 100%
kmalloc-rcl-96: 79 MB, active 100%
dmaengine-unmap-2: 43 MB, active 100%
vm_area_struct: 18 MB, active 99%
task_struct: 13 MB, active 98%
ext4_extent_status: 12 MB, active 100%
ext4_groupinfo_4k: 10 MB, active 100%
inode_cache: 10 MB, active 90%
kmalloc-4k: 7 MB, active 99%
kmalloc-rcl-128: 7 MB, active 100%
kernfs_node_cache: 5 MB, active 100%
proc_inode_cache: 5 MB, active 99%因此,所有其他缓存至少有98%的活动,除了radix_tree_node只有90%的活动。这个系统并没有浪费大量内存,但是如果减少radix_tree_node大小以消除非活动缓存,那么整个缓存的使用似乎会得到改善。如果我只运行slabtop -sc,就会得到radix_tree_node的USE 0%,但我认为这只是不正确的会计。
例如,我可能需要减少/proc/sys/vm/vfs_cache_pressure,因为dentry缓存只占ext4_inode_cache的20%,两者都有100%的活动。对于我的工作负载,系统需要统计大量的目录条目。
发布于 2022-08-16 07:44:48
在对此进行了实验之后,我想说,您应该运行LinuxVersion5.4或更高版本,然后根据需要调整/proc/sys/vm/vfs_cache_pressure。我会尝试使用尽可能小的价值,这仍然不会导致系统的减速。在我的经验中,范围为1-10的vfs_cache_pressure值对于内核版本5.3很好,但是内核版本5.4需要接近100的值才能得到类似的行为。
vfs_cache_pressure的低值将有利于在内存中保留更多的目录元数据,这样当处理访问文件时,存储介质只需要获取文件的实际内容。这是特别重要的HDD,因为它是缓慢的随机访问。对于存储介质,获取深层目录层次结构的元数据似乎是随机的数据访问,因为系统需要在多个级别上读取目录,而每个目录位于不同的目录中,都位于实际的存储介质上。
但是,如果您减少了太多的vfs_cache_pressure,系统可能会开始交换,而不是从缓存中删除目录元数据,这显然也会导致性能低下。
我想我需要尝试对/proc/sys/vm/vfs_cache_pressure和/proc/sys/vm/swappiness的不同组合进行基准测试。我目前运行的vfs_cache_pressure为120,swappiness运行为80,当后台进程检查系统中的许多目录(备份脚本检查系统中的新文件)时,有时会遇到减速。在我看来,系统对RAM的使用有点过于激进,当RAM需要释放时,请求更多内存的程序就会慢下来,因为在请求得到服务之前,需要丢弃一些缓存。
https://unix.stackexchange.com/questions/590141
复制相似问题