파일에서 cat / dev / null을 두 번 연속적으로 호출하면 두 번째 통화가 no-op이 될 것입니까?

StackOverflow https://stackoverflow.com/questions/6088169

  •  09-09-2020
  •  | 
  •  

문제

싼 메모리 캐싱 메커니즘으로 cat filepath > /dev/null를 사용하고 싶습니다. 내가 궁금해하고있는 것은 다음과 같습니다. 두 번째로 전화를 걸면 파일과 파일 이미 디스크 캐시에 있으며 OS가 아무 것도 할만 큼 충분히 스마트합니까?

업데이트 : FADVISE POSIX_FADV_WILLNEED를 사용하여 CIFS 볼륨 에서이 테스트를 테스트했습니다. 파일을 로컬로 캐시하려면 (명령 줄에서 Linux-FTools를 사용하여).그걸 밖으로 나온다 이를 읽기 위해 읽기 - 쓰기 모드로 볼륨을 장착해야합니다.읽기 전용으로 모드에서는 Fadvise가 무시되는 것 같습니다.이것은 삼바와 관련이 있어야합니다 oplock 메커니즘.

도움이 되었습니까?

해결책

POSIX_FADVISE (..., POSIX_FADV_WILLNEED)는 / dev / null의 파일을 CAT에보다 낫습니다. 실제 IO가 적어지며 Userspace RAM으로 읽을 수있는 파일 내용이 필요하지 않으며 CPU 캐시를 파괴합니다..

파일의 관련 부분이 이미 캐시에있는 경우 POSIX_FADVISE는 고양이 파일> / dev / null

보다 훨씬 적은 작업을 수행합니다.

이제 을 정말로 필요하다고 생각되면 파일의 관련 섹션을 MMAP (이후에 잠금 해제하십시오. 메모리 압력이있는 경우 즉시 삭제 될 수 있습니다)단단하다).루트 권한이 필요합니다.

일반적으로 이러한 종류의 일은 비관적이며 피해야합니다.커널이 원하는 방식을 수행하도록 강제로 지금 실제 작업 부하를 최적화 할 수있는 기능을 줄일 수 있습니다.

다른 팁

아니오, 할 수 없습니다.

프로그램이 수행할지 여부를 결정하는 것은 일반적으로 실행하는 것보다 일반적으로 더 복잡합니다.

어쨌든 메모리 캐싱을 제어 해야하는 이유는 무엇입니까?절대적으로 필요한 경우 TMPFS 파일 시스템을 사용하거나 CompCache (압축 된 RAM 블록 장치)

을 사용하십시오.

다른 답변이 말한 것처럼 아무것도 하지 않습니다.그러나 정말로 의 의미가있는 경우 :

내가 두 번째로 전화하면 파일은 이미 디스크 캐시에 있습니다 OS가 을 읽지 않도록 충분히 똑똑합니다. 디스크에서 두 번째로?

... 그런 다음 대답은 예 1 입니다.그것이 디스크 캐시가 모든 후에 작동하는 방식입니다.


1.문제의 파일 시스템이 페이지 캐시를 사용하는 한 페이지 캐시를 사용합니다.

It will be fast as hell, but it won't be a no-op (if it were, there would be legit reasons for syscalls to do unexpected things instead of their promised functions...). However, depending on the filesystem driver used, and the kernel options, you could be running close to the memory bandwidth.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top