컨텐츠보다 파일 메타 데이터를 캐시하도록 Linux를 구성하는 방법은 무엇입니까?


14

파일 시스템 메타 데이터 캐싱에 대부분의 RAM을 사용하도록 시스템을 설정하고 싶지만 읽기 / 쓰기 캐싱 및 프리 페치 파일에는 상당히 적은 양만 있습니다. 이상적으로는 실제로 파일을 열 때까지 디스크를 회전시키지 않고 파일 시스템 (RAM에 맞는만큼)을 탐색 할 수 있기를 원합니다.

세부 사항은 다음과 같습니다.

집에서 만든 파일 서버가 있습니다. 약 9TB의 LVM 볼륨에 5 개의 디스크가 있지만 4GB의 RAM 만 있습니다. 서버는 파일을 제공하는 다른 많은 작업을 수행하지 않기 때문에 대부분의 RAM이 캐싱에 사용됩니다. (“free”는 캐시에 사용 된 3.9G 중 3.4G를보고합니다.)

서버는 내 침실에 있으며 모든 디스크가 돌아 가면 조용 할 때 성 가실 정도로 충분한 소음을 발생시킵니다. (저는 소음을 찾는 것이 아니라 회전하는 소음을 의미하지 않습니다. 디스크는 다양한 제조사와 모델로 구성되어 있으며 회전 속도의 약간의 차이로 인해 간섭이 발생한다고 생각합니다. 헤르츠 미만의 기간에는 약간의 소음이 발생합니다.) 따라서 디스크를 대부분 스핀 다운하도록 서버를 구성했습니다.

물론 파일 관리자에서 폴더를 열 때 디스크가 분리되면 해당 폴더가 회전하는 디스크가있는 동안 지연이 발생합니다. 그다지 큰 문제는 아닙니다. 그러나 내가 보는 위치에 따라 LVM이 다른 디스크의 각 하위 폴더에 대한 메타 데이터를 확산시키는 경우 연속으로 여러 번 발생할 수 있습니다.

나는 리눅스가 대부분 캐시를 파일 내용으로 채우고 아마도 프리 페치 된 데이터를 채운 것으로 생각합니다. 캐싱은 원활한 재생을 위해 몇 MB 이상으로 유용하지 않습니다. 방금 영화를 본다면 곧 다시는 못 볼 것입니다. 프리 페치 (prefetching)가 발생 하면 몇 MB 이상이 지나도 제 경우에는 완전히 쓸모가 없습니다 .

그러나 4GB는 대부분 이미 방문한 부분 인 대부분의 파일 시스템 메타 데이터를 캐시 할 수있을 정도로 충분해야한다고 생각합니다. 자고

파일을 열 때 여전히 지연이 발생하지만 괜찮습니다. “클릭; 대기 ; 딸깍 하는 소리; 대기 ; 딸깍 하는 소리; 대기 ; 플레이; "클릭"으로 시청; 딸깍 하는 소리; 딸깍 하는 소리; 플레이; 대기 ; 손목 시계". 전자는 놀라 울 정도로 실망 스럽다. 후자는 거의 예상됩니다.

노트:

  1. 중요한 경우 커널은 3.2이고 OS는 데비안이고 볼륨은 lvm2이며 FS는 ext4입니다.

  2. 스핀 다운의 유일한 이유는 밤 동안 소음입니다. 그렇지 않으면 서버가 계속 실행 중입니다. (저는 합리적인 저전력으로 만들었습니다.) 스핀 다운 지연은 시간에 따라 다릅니다.

  3. 하드 디스크는 미디어 전용입니다. OS가 별도 (소형) 플래시 드라이브에 있습니다. (스핀 업 지연은 데이터가 /usr무엇이든 필요한 것이 아니라 데이터에서 발생한다는 것을 의미합니다 . 어떻게 든 문제에 도움이된다면 몇 GB를 절약 할 수 있습니다.

  4. 성능에 대한 합리적인 영향은 큰 문제가 아닙니다. 어쨌든 디스크가 네트워크보다 빠릅니다.

답변:


10

리눅스가 물건을 캐시하는 방법을 제어하려면 https://www.kernel.org/doc/Documentation/sysctl/vm.txt를 참조 하십시오.

특히 vfs_cache_pressure를 살펴보면 아마도 실제로 낮은 값이나 0을 원할 것입니다 (1은 조금 더 안전합니다).

vfs_cache_pressure
------------------

Controls the tendency of the kernel to reclaim the memory which is used for
caching of directory and inode objects.

At the default value of vfs_cache_pressure=100 the kernel will attempt to
reclaim dentries and inodes at a "fair" rate with respect to pagecache and
swapcache reclaim.  Decreasing vfs_cache_pressure causes the kernel to prefer
to retain dentry and inode caches. When vfs_cache_pressure=0, the kernel will
never reclaim dentries and inodes due to memory pressure and this can easily
lead to out-of-memory conditions. Increasing vfs_cache_pressure beyond 100
causes the kernel to prefer to reclaim dentries and inodes.

또한 swappiness데이터를 교환하거나 극단적 인 경우에만 발생 하도록 수정 하지 않을 수도 있습니다 .

drop_caches옵션은 더 이상 캐시하지 않으려는 데이터를 명시 적으로 삭제하는 데 유용 할 수 있습니다.

도움이 될만한 다른 옵션이있을 것이므로 커널 설명서를 검토하십시오.

그것들을 적용하기 위해 변경하려는 설정 /etc/sysctl.conf이나 부팅시 OS가 복원 해야하는 모든 것을 넣었습니다 .


3
좋은 게시물이지만 OP의 목표를 감안할 때 가능한 한 많은 스왑을 원할 것입니다. 스와핑은 사용자 메모리에만 영향을 미치므로 디스크로 스왑 아웃되는 경향이 높아지고 캐시가 차지할 물리적 메모리가 더 많이 남습니다. swappiness를 늘리면 메모리가
비워 지지만

카일 안녕하세요, 아이디어 주셔서 감사합니다. vfs_cache_pressure 일종의 작동하지만 충분하지 않습니다. 여기 제가 한 일이 있습니다 :
bogdanb

vcp를 0으로 설정하면을 수행 한 find / -ls > /dev/null다음 디스크를 스핀 다운 한 다음 find모든 파일을 다시 스핀하면 디스크가 스핀 업되지 않습니다. free이 작업을 수행 할 때 버퍼가 약 202MB로 증가하는 것을 보여줍니다. 하지만, 내가 할 경우 find, 다음 cat /file/bigger/than/ram > /dev/null, 다음 freecached빈 공간, 그리고 몇 가지 이유를 채우기 위해 상승은 buffers1백95메가바이트 약으로 내려갑니다. 그런 다음 디스크를 스핀 다운하고 find다시 디스크를 회전 시키면 디스크가 여전히 스핀 업합니다 :-(
bogdanb

정보 swappiness: 기본값으로 설정되어 60있지만 컴퓨터에 스왑 파티션이 없으므로 많이 있는지 확실하지 않습니다. 스왑 파일을 플래시 드라이브에 넣을 수는 있지만 그것이 어떻게 도움이되는지 또는 크기를 조정하는 방법을 모르겠습니다.
bogdanb

1
리눅스는 캐싱에 대해 현명하게 노력하고 있습니다. vfs = 0 설정이 예상대로 작동하는지 확실하지 않습니다. 응용 프로그램 (예 : malloc ())의 압력이 더 많은 메모리를 요청할 때 다른 항목을 회수하려고 생각합니다. 캐시에 2GB 이상을 사용하지 말라고 리눅스에 알리는 방법에 대해서는 모르겠습니다. 대부분의 경우 RAM을 낭비하고 있습니다. 당신이보고 싶을 또 다른 것은 "노트북 모드"입니다. 이것은 랩탑을 위해 디스크를 분리하기 위해 다르게 동작을 시도합니다. 나는 그것을 사용하지 않았으므로 그것에 대해 많이 모른다.
Kyle
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.