Linux 커널: 더 큰 스왑 블록

Linux 커널: 더 큰 스왑 블록

디스크 일시 중단에 매우 만족합니다. 그러나 메모리가 점점 더 많아지면 예전만큼 효율적이지 않습니다.

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를 초과하면 작동하지 않으므로 일반적인 해결책은 아닙니다.)

관련 정보