내 스왑 디스크는 100MB/s의 속도로 쓸 수 있습니다. 시스템을 교체하면 8~20MB/s만 기록됩니다.
iostat
장치가 100% 활성 상태라고 되어 있으므로 Linux가 드라이브에서 작은 덩어리를 찾거나 교환하는 것처럼 느껴집니다.
스와핑이 동시에 존재하는 경우 이를 설명할 수 있지만 스와핑도 없고 다른 디스크 I/O도 없습니다.
예를 들어, 가장 오래된 10MB 페이지를 식별하여 하나의 블록으로 바꾸도록 Linux에 지시할 수 있습니까?
스왑의 페이지 프레임 크기가 4K가 아니라 10M라고 말하는 것과 약간 비슷합니다.
내 시스템에서는 다음과 같은 알고리즘이 이상적이라고 생각합니다.
dirty_pct = dirty pages / all RAM
if dirty_pct > 50%:
# Half of memory is dirty, slowly start swapping out
if busy_time(swapdevice) < dirty_pct:
# if RAM is 60% dirty, start swapping if disk is less than 60% busy
# if RAM is 90% dirty, start swapping if disk is less than 90% busy
identify the next 10 MB that would be swapped if dirty_pct had been 100%
save the 10 MB to swap as a single chunk
mark the pages as clean
이렇게 하면 내 시스템이 50% 더티에 도달하면 교체를 시작하며 유휴 드라이브에서 수행되므로 성능에 영향을 미치지 않습니다. 어쩌면 교환된 데이터가 전혀 사용되지 않을 수도 있고 유휴 IO가 낭비될 수도 있습니다.
$ uname -a
Linux r815 4.15.0-99-generic #100-Ubuntu SMP Wed Apr 22 20:32:56 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
답변1
아니요. 그것은 불가능합니다.
Linux 커널은 다양한 알고리즘을 사용하여 RAM, 스왑 공간, 마지막으로 사용된 스왑 위치, 디스크 캐시 응답, 스왑 가능성 등과 같은 스왑 메모리 할당 사용 시기와 방법을 결정합니다.
시스템 정지 및 프로세스 종료를 방지하기 위해 메모리 관리가 필요하기 때문에 시스템은 "10MB> 페이지 수집"을 기다릴 수 없습니다.
그러나 시스템이 스왑을 시작할 때 성능이 매우 저하되어 RAM 및 스왑 관리와 관련된 여러 버그가 수년에 걸쳐 보고되었습니다.
zswap을 사용하면 디스크 사용량이 향상된다고 말할 수 있습니다. 여기서 가장 큰 문제는 스왑에 도달했을 때 페이지가 기하급수적으로 두 배로 늘어나는 것입니다(이는 메모리 페이지 연결 때문입니다).
zswap은 이러한 곱셈을 압축하여 디스크 읽기/쓰기를 줄이고 CPU 사용량에 상당한 영향을 미칩니다.
zswap은 커널 관리형이며 시스템 요구 사항에 맞게 조정할 수 있는 유용한 하위 수준 구성이 많이 있습니다.
https://www.maketecheasier.com/use-zswap-improve-old-linux-performance/
답변2
좋은 질문. 이는 설치한 파일 시스템 유형에 따라 다릅니다. 나는 이것이 커널 공간과 관련이 있다고 생각했지만 인터넷 검색에서 찾았습니다.xfs파일 시스템 사용자 공간 수준에서 디버깅할 수 있습니다.