그렇게하는 이유는 프로그램이 "이 데이터 쓰기"라고 말하고 리눅스 커널은 메모리 버퍼에 복사하여 디스크로 이동 한 다음 "ok, done"이라고 말합니다. 그래서 프로그램은 모든 것을 복사했다고 생각합니다. 그런 다음 프로그램이 파일을 닫지 만 갑자기 버퍼가 디스크로 푸시되는 동안 커널이 대기하게됩니다.
따라서 불행히도 프로그램은 버퍼를 모르기 때문에 버퍼를 플러시하는 데 걸리는 시간을 알려줄 수 없습니다.
고급 사용자 트릭을 사용하려면 커널 매개 변수 vm.dirty_bytes
를 15000000
(15MB) 로 설정하여 Linux에서 사용하는 버퍼 크기를 줄일 수 있습니다 . 이는 응용 프로그램이 실제 진행보다 15MB를 초과 할 수 없음을 의미합니다. (커널을 사용하여 커널 매개 변수를 즉시 변경할 수 sudo sysctl vm.dirty_bytes=15000000
있지만 재부팅을 계속 유지하려면 /etc/sysctl.conf
배포판에 따라 구성 파일을 변경해야합니다 .)
부작용은이 설정으로 컴퓨터의 데이터 쓰기 처리량이 낮을 수 있지만 전체적으로 많은 데이터를 쓰는 동안 프로그램이 오래 실행되고 있음을 알면 혼란 스럽습니다. 프로그램은 작업으로 완료된 것으로 보이지만 커널이 실제 작업을 수행함에 따라 시스템이 심하게 지연됩니다. dirty_bytes
비교적 작은 값으로 설정 하면 사용 가능한 메모리가 부족하고 갑자기 많은 데이터를 쓰는 프로그램을 실행할 때 시스템이 응답하지 않는 것을 방지 할 수 있습니다.
그러나 너무 작게 설정하지 마십시오! 커널이 1/4 초 이하의 시간에 일반 하드 드라이브로 버퍼를 플러시 할 수 있다고 대략 15MB를 사용합니다. 시스템이 "게으른"느낌이 들지 않게합니다.