디스크 일시 중단에 매우 만족합니다. 그러나 메모리가 점점 더 많아지면 예전만큼 효율적이지 않습니다.
TO 디스크를 일시 중지하는 것은 잘 작동합니다. 1~2분 정도 걸리며 이는 내 디스크 성능을 고려하여 예상했던 것입니다.
문제는일어서다일시 중지 후: 디스크는 검색하는 데 오랜 시간이 걸리고 단일 페이지만 읽으므로 페이지 인 속도가 1MB/s 미만이 됩니다.
커널이 다음 페이지(예: 10MB)를 읽고 단일 페이지를 읽는 대신 기회에 맞게 교체하도록 하는 방법이 있습니까?
10MB의 페이지가 빨리 필요하더라도 낭비되지 않습니다. 10MB의 대부분이 필요하지 않더라도 이러한 페이지는 여전히 깨끗하며 무료 페이지로 간단히 재활용할 수 있습니다. 교환된 복사본은 영향을 받지 않습니다.
예
이는 6.5G의 RAM을 소비하며 해당 메모리를 적극적으로 사용하고 전체 코어를 100% 사용합니다.
perl -e 'while(1){for(1..25000000){$t{$_}++}}'
디스크에 일시중단하기 전:
total used free shared buffers cached
Mem: 8074280 7876864 197416 93460 169524 625912
-/+ buffers/cache: 7081428 992852
Swap: 8282108 8 8282100
디스크 일시 중단에 소요되는 시간: 7분 10초
디스크의 원시 성능은 50MB/s입니다.
디스크에서 모니터를 복원하고 실행하는 데 소요되는 시간: 0분 32초
그러나 시스템이 키 누름에 반응하기 전에 추가로 전환해야 합니다: 2m02s
이때 메모리 사용량은 다음과 같습니다.
total used free shared buffers cached
Mem: 8074280 2846392 5227888 74232 8312 157588
-/+ buffers/cache: 2680492 5393788
Swap: 8282108 5103264 3178844
Perl 프로그램에서 사용하는 전체 6.5G 공간은 교체되지 않았습니다. 또한 4-5GB가 필요합니다.
vmstat 1
시스템이 600KB/s로 교환하고 있음을 보고합니다.
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
0 2 3506124 1525652 27732 274036 632 0 632 0 228 740 6 1 50 44 0
iostats
디스크 I/O 사용률을 100%로 보고합니다(항상 확인하기 때문일 수 있음).
이 perl
프로그램은 어떤 일을 할 때마다 페이지 폴트를 일으키기 때문에 CPU의 약 0.3%를 사용합니다.
다른 교환으로 계속됩니다: 1h15m12s
마지막으로 perl
프로그램이 완전히 교체되어 다시 100%로 실행될 수 있습니다.
그래서 내가 원하는 것은 필요를 교환하는 것입니다.많은더 짧습니다. 이를 달성하는 한 가지 방법은 단일 페이지 프레임 대신 한 번에 10MB를 교환하여 600K/s를 늘리는 것입니다.
그러나 스왑을 더 빠르게 수행할 수 있는 다른 조정 매개변수가 있을 수도 있습니다.
( swapoff -a
내 경우에는 이것이 옵션이었습니다. 10MB/s로 스왑 인되었지만 스왑 아웃된 데이터가 8GB를 초과하면 작동하지 않으므로 일반적인 해결책은 아닙니다.)