이동식 장치에 대한 Linux의 쓰기 버퍼를 줄이는 방법은 무엇입니까?

이동식 장치에 대한 Linux의 쓰기 버퍼를 줄이는 방법은 무엇입니까?

Linux에서 이동식 장치(USB 스틱/HDD, SD 카드 등)에 콘텐츠를 쓸 때 처음 몇 초 동안 놀라운 쓰기 속도가 나타나는 경우가 종종 있습니다. 때로는 GB/s(쓰기 버퍼 채우기) 순서로 이어지며 여러 차례에 걸쳐 쓰기도 합니다. 몇 분 동안 조용합니다(버퍼가 실제로 장치에 기록되고 있음).

오해의 소지가 있습니다. 실제 쓰기 속도를 판단하기가 어렵습니다. 짜증스럽습니다(버퍼를 플러시하는 동안 프로그램을 중단할 수 없습니다). 이는 FS 손상을 일으킬 수 있으며, 기록하는 동안 장치의 플러그를 뽑으면 최소한 기록되지 않은 콘텐츠가 발생할 수 있습니다.

제 경우에는 쓰기 버퍼가 1GB를 넘는 것 같습니다. 그것을 제어할 수 있는 방법이 있나요? 좀 더 합리적인 값으로 줄이고 싶습니다.

참고: 이는 파일 시스템 캐시에 관한 것이 아니며 이 효과는 원시 장치에도 나타납니다.

참고: 쓰기 버퍼를 완전히 비활성화하고 싶지는 않습니다.

감사해요!

답변1

나는 답을 찾았다. 64비트 Linux는 기본적으로 큰 쓰기 버퍼(사용 가능한 메모리의 20%!)를 유지합니다. (흥미롭게도 32비트 Linux는 최대 180MB로 제한됩니다.) 더티 버퍼 크기를 예를 들어 200MB로 변경하려면 다음을 사용할 수 있습니다.

echo 200000000 > /proc/sys/vm/dirty_bytes

또는RAM의 비율을 사용하려면(예: 1%):

echo 1 > /proc/sys/vm/dirty_ratio

추가 정보:https://lwn.net/Articles/572911/

관련 정보