쓰기 저장 캐시 제한 비활성화 - vm.dirty_ratio 조정

쓰기 저장 캐시 제한 비활성화 - vm.dirty_ratio 조정

내 워크로드는 짧은 기간 동안 쓰기 버스트 비율이 매우 높습니다. 대상 디스크는 꽤 느리지만 RAM이 충분하고 일시적인 데이터 손실에 매우 관대합니다.

더티 페이지에 사용 가능한 RAM 공간을 최대화하기 위해 vm.dirty_ratio를 조정해 보았습니다.

# free -g
              total        used        free      shared  buff/cache   available
Mem:            251           7         213           3          30         239
Swap:             0           0           0

# sysctl -a | grep -i dirty
vm.dirty_background_bytes = 0
vm.dirty_background_ratio = 5
vm.dirty_bytes = 0
vm.dirty_expire_centisecs = 90000
vm.dirty_ratio = 90

그러나 기본 디스크 속도에 따라 일부 쓰기 저장 제한이 여전히 발생하는 것 같습니다. 이 기능을 비활성화하려면 어떻게 해야 합니까?

# dd if=/dev/zero of=/home/me/foo.txt bs=4K count=100000 oflag=nonblock
100000+0 records in
100000+0 records out
409600000 bytes (410 MB) copied, 10.2175 s, 40.1 MB/s

여유 메모리가 있고 더티 비율을 초과하지 않는 한 페이지 캐시에 최고 속도로 쓰고 싶습니다.

답변1

문제는 더티 스로틀링이 아니라 즉각적인 동기화입니다. 내가 얻은 열을 통해 bo이를 확인할 수 있습니다.vmstat 1

   -----io----
   bi    bo
    0     0
    0     0
    0  4000
    0     0
    ...

뒤쪽에 dd if=/dev/zero of=16/test bs=4k count=1000. (vmstat 출력에는 1K-"단위"만 있음 - /proc/diskstats에는 512B-단위가 있음)

추가하면 이전 conv=notrunc과 마찬가지로 이를 방지할 수 있습니다 . rmsourcejedi의 의견을 참조하세요.

ext4 마운트 옵션noauto_da_alloc이것이 정확히 의미하는 바는 sync이러한 "파일 다시 쓰기" 작업에는 추가 작업이 필요하지 않다는 것입니다. man ext4몇 가지 훌륭한 예가 있습니다. 문제는 편집기에서 파일을 "쓰기" 또는 "저장"하는 것이 무엇을 의미하는지, 그리고 해당 파일(전원)을 실패하지 않도록 만드는 방법으로 돌아옵니다.


반대쪽도 확인할 수 있습니다. 더티 페이지가 계속해서 늘어나고 있습니다.

]# grep nr_dirty /proc/vmstat      
nr_dirty 7886
nr_dirty_threshold 427666
nr_dirty_background_threshold 170815

임계값은 현재 사용 가능한 메모리에 적용되는 비율입니다. 주기적 쓰기 저장을 완전히 비활성화했기 때문에 12개 이상의 더티 페이지가 표시되었습니다.


이것은 실제로 복잡한 상황입니다. vim에는 쓰기 후 파일 fs동기화 와 백업을 통한 덮어쓰기라는 두 가지 주요 옵션이 있습니다.wb

ext2에서는 vim으로 설정하는 것만으로도 충분합니다 nofs. ext4(기본 지연 할당)에서는 noauto_da_alloc이번에는 파일 시스템에 의한 즉각적인 동기화를 방지하기 위해 마운트 옵션도 필요합니다.

( 또는 와 다른 dd파일의 일부만 쓰기(덮어쓰기)를 선택할 수 있습니다 )cpvim

관련 정보