Linux는 RAM 캐시를 비활성화합니다.

Linux는 RAM 캐시를 비활성화합니다.

저는 ARM M1 MacBook Air에서 커널 6.5를 사용하여 Debian stable을 실행하고 있습니다. 가장 큰 문제는 RAM과 VRAM이 통합되어 있다는 점이며, 사용된 RAM의 양이 VRAM인지 확인할 수 있는 구체적인 방법이 없습니다(Asahi Linux 메인 개발자의 확인).

이로 인해 여유 RAM이 500MiB에 가까워지면 시스템이 지속적으로 중단됩니다. 이론적으로는 이 프로그램을 사용하여 메모리를 할당할 수 stress있으며 커널은 이를 종료하지만 실제로 너무 많은 메모리를 사용하는 다른 프로그램은 커널이 사용된 메모리의 VRAM 부분을 고려하지 않기 때문에 결국 컴퓨터를 정지하게 됩니다. 커널은 200MiB의 RAM을 사용하는 프로그램을 종료하지만 3GiB의 VRAM을 사용하는 프로그램은 그대로 둡니다.

커널이 스왑을 시작하면 로그를 작성할 시간도 없이 시스템이 즉시 정지되기 때문에 SWAP을 생성하는 것도 도움이 되지 않습니다.

sysctl더 많은 RAM을 사용할 수 있도록 RAM의 디스크 캐싱을 비활성화하도록 커널 매개변수 또는 매개변수를 설정할 수 있습니까 ? 시스템을 계속 실행하려면 스크립트를 지속적으로 실행해야 하며 drop-caches, 스크립트를 키보드 단축키에 바인딩하고 특정 프로그램이 닫힌 후 자동으로 실행되도록 했습니다.

가장 기본적인 사용(Firefox에서 4개의 YouTube 탭 열기, 누군가 Telegram으로 나에게 전화하기, Telegram이 자동으로 다운로드하는 60초 비디오 보내기) 중에 충돌이 발생하는 경우가 있습니다.

이와 같은 질문에 대해 내가 찾은 대답은 "당신은 바보입니다. 캐시를 비활성화할 필요가 없습니다. 이 질문을 다시 묻지 마십시오"이며 실제 해결책은 없습니다.

"while true; echo 3 > /proc/sys/vm/drop_caches ; sleep 60" &이런 것을 넣는 것보다 더 좋은 방법이 있어야합니다/etc/rc.local

이것이 문제를 해결하는 올바른 방법이 아니라는 것을 알고 있지만 최대한 많은 여유 RAM을 확보하려면 커널 캐시를 차단해야 합니다.

답변1

나는 일어난 일에 대한 근거가 매우 회의적입니다.

AFAIK, 최신 Macbook에는 RAM 및 VRAM 전용의 별도 RAM 영역이 없으며 RAM 및 VRAM 할당을 위해 응용 프로그램에서 사용할 수 있는 통합 메모리 블록이며 Linux 커널은 RAM 할당이 VRAM을 차지하지 않도록 해야 합니다.

당신이 설명하는 내용은 Asahi 개발자에게 보고해야 할 커널 버그처럼 들립니다.

mem=MAX_RAM예를 들어 mem=7G(7GB) 커널 부팅 옵션을 사용해 보고 도움이 되는지 확인할 수 있지만 그럴지는 의문입니다.

답변2

Artyom처럼 저는 매우 회의적입니다. 저는 MAC M1 아키텍처에 대해 특별히 잘 알지는 못하지만 비디오가 메인 RAM(사용자 프로세스가 시작되기 오래 전에 정적으로 할당된 IME)을 사용하는 누락된 시스템에서 Linux를 실행했습니다.

하지만 귀하의 주장이 타당하다고 가정하면 저는 엄격하게 0%로 문제를 해결하려고 노력할 것입니다.메모리 과잉 할당:

vm.overcommit_memory=2
vm.overcommit_ratio=0

(overcommit_ratio나 overcommit_kbytes 모두 음수를 허용하지 않을 것으로 생각됩니다. 하지만 위 값이 구문 분석되지 않으면 확실히 테스트해 볼 가치가 있습니다.)

고쳐 쓰다 후속 의견은 이것이 일반적인 남용/OOMKiller 문제일 뿐임을 시사합니다. 그렇다면 여기서 제가 제안하는 것은 문제를 해결하는 올바른 방법입니다. 비록 초과 비율이 0이면 지나치게 열성적일 수 있지만요.로그를 확인하세요.

관련 정보