시스템에 여유 저장 공간이 있음에도 불구하고 Linux가 대용량 파일을 어딘가에 복사할 때 스왑 공간에 쓰는 이유는 무엇입니까?

시스템에 여유 저장 공간이 있음에도 불구하고 Linux가 대용량 파일을 어딘가에 복사할 때 스왑 공간에 쓰는 이유는 무엇입니까?

일부 저장 장치(시스템의 HDD, SSD 또는 썸 드라이브)에 파일을 복사하면 소량의 데이터(20~30MB)가 스왑 공간에 기록되고 개수가 증가한다는 사실을 발견했습니다. 예, 시스템에도 RAM을 사용할 수 있습니다.

스왑 공간에 쓰면 장치 속도가 매우 느려질 수 있습니다. 폭행은 당연한 사건이었습니다.

복사하기 전에 스왑을 끄면 파일이 잘 복사됩니다!

스크린샷은 다음과 같습니다.

여기에 이미지 설명을 입력하세요.

대용량 파일을 /dev/sda2에 복사하고 있습니다. 사용 가능한 RAM이 있지만 일부 데이터는 항상 스왑을 위해 기록됩니다. 이 동작은 내가 소유하고 사용할 시간이 있는 모든 장치에서 동일합니다.

다음을 사용하여 교환성을 변경해 보았습니다.

sysctl vm.swappiness=n # n for a value from 0..100

swappiness를 0으로 설정하고 swappiness를 100으로 설정해 보십시오. 행동은 변하지 않습니다. 모든 시스템 모니터에 여유 RAM이 충분하다는 것이 표시됩니다. 여전히 스왑 영역에 데이터를 씁니다.

답변1

일반적으로 동작은 응용 프로그램에 따라 다르며 복사 응용 프로그램이 복사 중인 파일을 읽는 방법에 대해 커널에 올바른 지침을 제공하는지 여부에 따라 달라집니다.

귀하의 경우에는 귀하의 파일이 전체 메모리보다 약간 더 크기 때문에 GUI의 파일 관리자가 mmap파일을 덩어리로 복사하는 대신 파일의 전체 복사본을 요청할 수 있습니다.

cp터미널 창에서 복사해 보세요. 이 cp 명령은 커널에 지침을 부지런히 제공하고 시스템에 가장 적합한 것으로 감지된 블록에 파일을 복사합니다. 여전히 캐시가 메모리를 채우는 것을 볼 수 있지만 메모리 압력의 급증으로 인한 것이 아니라 단지 많은 바이트에 대한 경우에는 스와핑이 트리거되어서는 안 됩니다.

답변2

일어날 수 있는 일은 메모리가 디스크 캐싱에 사용되고 있다는 것입니다. 표시되는 모니터에 디스크 캐시가 표시되지 않습니다. 그런 다음 커널은 캐시를 삭제하는 대신 비활성 메모리를 교체하기로 결정할 수 있습니다.

성능 문제(단지 잠재적인 문제가 아님)가 있는 경우 디스크 캐시에 쓰지 않고 시스템에 작업(예: 파일 복사)을 수행하도록 지시할 수 있는 방법이 있습니다. 이로 인해 쓰기 속도가 느려지지는 않지만 향후 파일 읽기 속도가 느려집니다(예: 파일을 복사한 다음 읽는 경우).

관련 정보