내 워크로드는 짧은 기간 동안 쓰기 버스트 비율이 매우 높습니다. 대상 디스크는 꽤 느리지만 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
과 마찬가지로 이를 방지할 수 있습니다 . rm
sourcejedi의 의견을 참조하세요.
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
파일의 일부만 쓰기(덮어쓰기)를 선택할 수 있습니다 )cp
vim