![radix_tree_node의 캐시 크기를 줄이는 방법은 무엇입니까?](https://linux55.com/image/174325/radix_tree_node%EC%9D%98%20%EC%BA%90%EC%8B%9C%20%ED%81%AC%EA%B8%B0%EB%A5%BC%20%EC%A4%84%EC%9D%B4%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
radix_tree_node
전체 캐시 크기를 줄이지 않고 Linux에서 캐시에 사용되는 공간을 줄이는 것이 가능합니까?
예를 들어, 나는 현재
$ 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
을 실행했는데 그냥 잘못된 회계라고 생각합니다 USE 0%
.radix_tree_node
예를 들어 캐시는 20%에 불과하고 /proc/sys/vm/vfs_cache_pressure
둘 다 활성 상태가 100%이므로 줄여야 할 것 같습니다 . 내 작업 부하의 경우 시스템은 많은 수의 디렉터리 항목을 계산해야 합니다.dentry
ext4_inode_cache
답변1
실험 후에는 Linux 커널 버전 5.4 이상을 실행하고 필요에 따라 조정해야 한다고 말하고 싶습니다 /proc/sys/vm/vfs_cache_pressure
. 시스템 속도가 느려지지 않는 가능한 가장 작은 값을 사용하려고 합니다. 내 경험상 vfs_cache_pressure
커널 버전 5.3에서는 1~10 범위의 값이 잘 작동하지만 커널 버전 5.4에서는 유사한 동작을 얻으려면 100에 가까운 값이 필요합니다.
값이 낮을수록 vfs_cache_pressure
더 많은 디렉터리 메타데이터를 RAM에 보관할 수 있으므로 프로세스가 파일에 액세스할 때 저장 매체는 파일의 실제 내용만 가져오면 됩니다. 이는 랜덤 액세스 속도가 느린 HDD의 경우 특히 중요합니다. 저장소 미디어의 경우 시스템이 여러 수준의 디렉터리를 읽어야 하고 각 디렉터리가 실제 저장소 미디어의 다른 영역에 위치하기 때문에 깊은 디렉터리 계층에 대한 메타데이터를 얻는 것은 무작위 데이터 액세스로 보입니다.
그러나 너무 많이 줄이면 vfs_cache_pressure
시스템이 캐시에서 디렉터리 메타데이터를 제거하는 대신 스왑을 시작할 수 있으며 이로 인해 성능이 저하될 수도 있습니다. 저는 이것이 커널 버전 5.3과 5.4의 가장 중요한 차이점이라고 생각합니다. 버전 5.3에서는 시스템이 RAM에 남아 있도록 스왑을 시작하지 않도록 vfs_cache_pressure
항상 설정할 수 있습니다. 커널 버전 5.4를 사용하는 시스템의 경우 다음 사항을 알고 있으면 교체가 더 즐거워집니다 .1
dentries
100
/proc/sys/vm/vfs_cache_pressure
와 의 다양한 조합을 벤치마킹 해 봐야 할 것 같습니다 /proc/sys/vm/swappiness
. 현재
vfs_cache_pressure
120과 swappiness
80을 실행하고 있는데 백그라운드 프로세스가 시스템의 많은 디렉터리를 확인할 때 가끔 속도가 느려지는 경우가 있습니다(예: 백업 스크립트가 시스템에서 새 파일을 확인하는 경우). 내 생각에는 시스템이 캐싱을 위해 RAM을 사용하는 현재 방식 dentries
은 너무 공격적이며 더 많은 메모리를 요청하는 프로그램은 요청을 처리하기 전에 다른 캐시를 삭제하여 RAM을 확보해야 할 때 속도가 느려집니다.