이것질문캐시의 일부를 찾는 방법에 대한 질문에 답하세요. 그러나 fincore
실행 파일에서는 파일 이름을 전달하여 해당 파일이 캐시의 일부인지 확인해야 합니다.
파일 이름을 전달하지 않고 캐시 메모리에 속한 모든 항목을 찾는 도구나 방법이 있습니까?
추신: 우리는 이것을 임베디드 시스템에서 실행하고 있습니다. for 루프를 실행하고 모든 파일을 fincore
자체적으로 전달하는 것은 더 많은 시간과 메모리를 소비하는 프로세스입니다. 그래서 다른 방법을 찾아보고 있어요.
답변1
커널이 캐시된 블록과 관련된 파일 이름을 어디에서 노출하는지 모르겠습니다. 이 답변에 따르면
https://stackoverflow.com/a/4941371
사용자 정의 커널 모듈을 사용하더라도 최선의 방법은 inode 및 장치 목록을 얻는 것입니다. 그러면 파일 시스템에서 이러한 파일을 찾아야 할 수도 있습니다.
그런 다음 " fincore
내가 어떤 파일을 나열했는지 어떻게 알 수 있나요?"라고 물을 수도 있고 그렇지 않을 수도 있지만 이 방법이 꽤 영리하다고 생각해서 여기에 있습니다. 이 fincore
도구는 다음을 수행하여 작동합니다.
- 부르다매핑(2)주어진 파일에 (https://code.google.com/p/linux-ftools/source/browse/linux-fincore.c#260)
- 부르다최소 코어(2)mmap이 반환한 메모리 영역(https://code.google.com/p/linux-ftools/source/browse/linux-fincore.c#279)
시스템 mincore
호출은 주어진 메모리 페이지가 코어 메모리에 있는지 여부를 알려줍니다(즉, 액세스할 때 페이지 오류를 일으키지 않습니다). 매핑 파일이 지연 로드 되어 mmap
아직 매핑된 영역을 읽지 않았으므로 모든 페이지습관페이지 오류의 원인은 캐시의 일부여야 합니다.