TMPFS 내의 파일을 교환할 가능성을 높이는 방법

TMPFS 내의 파일을 교환할 가능성을 높이는 방법

내 디렉토리는 tmpfs 를 사용합니다 /tmp. /tmp컴퓨터가 사용 중인 파일을 교체하기 전에 응용 프로그램의 파일을 교체하도록 하려면 어떻게 해야 합니까?

/tmp기본적으로 내부 파일은 프로세스에서 사용하는 메모리보다 더 많이 스왑 가능해야 합니다.

이 답변인 것 같습니다https://unix.stackexchange.com/a/90337/56970말이 되지만 개별 디렉토리의 상호 교환성을 변경할 수는 없습니다. cgroup에 대해 알고 있지만 tmp를 cgroup으로 전환할 수 있는 방법이 없습니까?

답변1

모든 것이 순조롭게 진행된다면 커널은 스스로 "올바른 일을 하기"로 결정해야 합니다. 메모리 압박이 있는 경우 다양한 고급 경험적 방법을 사용하여 무엇을 교체하고 무엇을 유지할지 결정합니다. 이러한 경험적 방법은 메모리 관리에 대한 광범위한 경험을 가진 정말 똑똑한 사람들이 신중하게 구축했으며 개선하기 어려울 만큼 충분히 훌륭합니다.

커널은 다음과 같은 조합을 사용하여 무엇을 바꿀지 결정합니다.

  • 최근 메모리 사용량.
  • 매핑 이후 메모리가 수정되었는지 여부입니다. 예를 들어, 힙 메모리가 더러워서 스왑에 기록해야 하기 때문에 공유 라이브러리는 힙 메모리로 푸시되는 반면, 공유 라이브러리 매핑 메모리는 다시 필요할 경우 디스크의 원본 파일에서 다시 로드할 수 있습니다. , 따라서 교체하기 위해 해당 페이지를 작성할 필요가 없습니다. 여기서는 tmpfs백업할 것이 없기 때문에 메모리가 항상 더럽다는 점을 알아야 합니다 (0으로 가득 찬 새 페이지가 아닌 한).
  • 의 팁 mprotect().
  • 더 있을 수도 있습니다.

짧은 대답: 아니요. 메모리 관리 방법에 대한 커널의 결정을 직접 무시할 수는 없습니다.

답변2

cgroup은 파일 시스템이 아닌 애플리케이션을 제어하도록 설계되었습니다. 원하는 것은 전체 파일 시스템에 적용되는 sysctl 또는 mount 옵션입니다. 불행하게도 두 기능 모두 이 문제를 염두에 두고 만들어진 것 같지 않습니다. 이는 이와 같은 문제가 매우 독특하기 때문일 수 있습니다.

이 문제를 해결하려면 다음과 같은 cronjob을 작성해 보세요.

*/5 * * * * find /tmp -type f -exec cat {} \; >/dev/null 2>&1

이렇게 하면 커널이 모든 파일을 읽게 되어 페이지가 메모리로 다시 스왑됩니다.

즉, 워크로드 애플리케이션에서 자주 액세스하는 파일은 기본적으로 cronjob에서 수행하는 것과 동일합니다(전체 마운트가 아닌 실제로 사용하는 특정 파일에 대해서만). 나는 이것에 어떤 이점도 없다고 생각합니다.

여기서 실제 목표는 무엇입니까?

관련 정보