캐싱 찾기 / ls


10

처음 find또는 ls디렉토리에서 실행하는 것처럼 작동하는 데 시간이 걸립니다. 그러나 그 이후에는 디렉토리의 내용 목록이 어딘가에 캐시되거나 인덱싱되는 것처럼 빠릅니다.

컴퓨터를 다시 부팅해도이 캐시를 유지하는 방법이 있습니까?


1
실제로 캐시됩니다. 리눅스는 사용하지 않는 메모리를 캐시와 버퍼로 사용한다 ( "충분한"RAM으로도 항상 스왑을해야하는 이유이다). 자유 명령은 사용 가능한 양을 보여줍니다. 재부팅 사이의 캐싱 시점이 확실하지 않은 경우, 부팅간에 많은 부분이 변경 될 수 있습니다. 10,30 분마다 가장 낮은 우선 순위로 크론 작업을 수행하여 모든 파일을 간단히 처리하는 것은 어떻습니까? 캐시를 항상 상대적으로 최신 상태로 유지해야합니다. 또한 파일 변경을 감지하는 방법 (커널 용)이 있다고 생각하십시오.
Baard Kopperud 2016 년

답변:


8

vmtouch 를 사용 하여 파일을 페이지 캐시 (디스크 캐시)에 추가 할 수 있습니다 .

넣어 nohup vmtouch -dl <files or directories> &당신의 /etc/rc.local부팅 페이지 캐시에 추가 할 파일 및 잠금 파일. 페이지 캐시에 파일을 추가하려고하지만 파일을 메모리에 고정하지 않으려면 -t플래그 대신 플래그를 사용하십시오 -ld.

페이지 캐시에 대한 자세한 내용은 여기 , 여기wikipedia를 참조하십시오 .


그 명령은 우분투에서 사용할 수없는 것 같습니다-시도 할 수있는 대안이 있습니까?
Richard

@Richard vmtouch를 직접 컴파일하는 것은 매우 쉽습니다 build-essential. 패키지를 설치하십시오 . 다운로드 vmtouch.c. 실행 gcc -O2 -o vmtouch vmtouch.c또는 make vmtouch당신은 바이너리 얻을 vmtouch당신이에 예를 들어 복사 한 후 수 있습니다 /usr/local/bin하거나 전화를 ./vmotouch.
jofel

@Richard 나는 우분투를 사용하지 않으므로 이것을 테스트하지 않았고 책임을지지 않지만 인터넷 검색 "Ubuntu mvtouch"는이 ppa를 가져 왔습니다 .
terdon

@ jofel, 예, 컴파일하기가 쉽습니다. 감사합니다. 가능한 경우 패키지를 사용하는 것을 선호합니다.
Richard

@Evan, 내가 틀렸다면 수정하지만 vmtouch부팅 명령으로 사용하지 않으면 전체 작업 속도가 느려 집니까? 매번 (비싸게) 다시 생성하는 대신 부츠 전체에서 캐시를 보존하려고했습니다.
Richard

2

"재부팅 전반에 걸쳐 보존", 의심합니다. 그러나 부팅 할 때 캐시를 간단하게 재 구축 할 수 있습니다. 이는 거의 동일한 지연 시간을 뺀 것과 거의 같습니다.

파일을 작성 /etc/cron.d/rebuild-fs-cache하고 다음을 넣습니다.

@reboot root /usr/bin/nice -n 19 /usr/bin/ionice -c 3 -t /usr/bin/find / >/dev/null 2>&1

이 사용 nice하고 ionice(기본적으로 설치, 확실히 패키지 관리자를 통해 사용할 수 있습니다되어야한다 데비안 풋 그들 coreutilsutil-linux각각은,)의 우선 순위를 낮추는 find것이 다른 어떤 방해해서는 안 수단 가능한 가장 좋은 수준에 과정을 시스템에서 실행되지만 완료하는 데 약간 더 오래 걸립니다. 커널 find자체가 stat()파일 시스템 데이터를 디스크에서 메모리로로드하도록 강제합니다.

캐시가 구축되면, OS가 다른 것을 위해 메모리를 필요로하기 때문에 제거되지 않는 한 캐시를 유지해야합니다. 나는 이것을 잠시 동안 사용했으며 큰 디렉토리에서도 디렉토리 목록 은 위의 cron 작업이없는 것보다 훨씬 빠르지 만 정확한 숫자를 인용 할 수는 없습니다.


1
휠을 재발 명하려는 경우로 케이트 데이터베이스를 업데이트하기 위해 locate제공되는 updatedb을 사용할 수도 있습니다 . en.wikipedia.org/wiki/Locate_(Unix)
laebshade

@ laebshade 전혀 사용하지 않지만 많이 locate사용 ls합니다. 그리고 때때로 find. (또한 find와 ls는 OP가 요구하는 특정 명령입니다.) 여기서 사용하는 요점은 findstat ()를 호출하는 스토리지의 모든 항목을 반복하므로 커널은 메타 데이터를 메모리에로드해야합니다. 일단 있으면 재부팅을 통해 저장된 것처럼 좋습니다.
CVn
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.