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

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

Linux에서 이동식 장치(USB 스틱/HDD, SD 카드 등)에 콘텐츠를 쓸 때 처음 몇 초 동안 놀라운 쓰기 속도를 보이는 경우가 종종 있으며, 때로는 GB/s(버퍼 쓰기 쓰기) 정도의 속도도 나타납니다. 몇 분간 침묵이 흐릅니다(버퍼가 실제로 장치에 기록되는 중입니다).

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

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

참고: 이는 파일 시스템 캐싱과 아무 관련이 없으며 이 효과는 원시 장치에서도 발생합니다.

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

감사해요!

답변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/

관련 정보