사용자 프로세스 차단을 피하기 위해 Linux 디스크 플러시 간격 조정


4

약 6MB / s (대역폭 제한)로 rtorrent를 사용하여 라즈베리 파이에 장착 된 SD 카드의 파일을 다운로드하고 있습니다. 사용자 프로세스는 데이터 자체를 플러시하지 않으며 디스크 캐시가 플러시되는 간격은 sysctl 값에 따라 다릅니다.

iostat와 nload를 사용하여 네트워크 대역폭과 디스크 쓰기 프로파일을 볼 수 있습니다.

디스크:

20M/s .....x.....x....xx...
      .....x....xx....xx...
      ....xx....xx....xx...
0M/s  ....xx....xx....xx...

회로망:

5M/s  ..xxx....x.. x.....x.
      .xxxx...xx..xxx...xxx
0M/s  xxxxx...xxx.xxx...xxx

분명히 플러시 중에 IO 기록기가 항상 일시 중지됩니다. 3 개의 코어가 영구적으로 유휴 상태 인 4 코어 CPU이며 플러시 중에 100 % iowait라고합니다.

while true; do sync; sleep 1; done다운로드 하는 동안 디스크 플러시가 매초 6MB로 매끄 럽습니다. 그리고 다운로더 프로세스는 질식되지 않으므로 대역폭은 일정합니다.

나는 다음과 같은 효과를 얻을 수 있습니다.

/proc/sys/vm/dirty_writeback_centisecs: 디스크 캐시 플러시 킥 빈도-단위는 100 초입니다. 기본값 : 500

그리고 /proc/sys/vm/dirty_expire_centisecs: 페이지는 초 100의에 홍조를받을 수하는 방법을 옛날을해야합니다; 기본값 : 3000

이들을 각각 100과 200으로 설정하면 동일한 디스크 플러시 프로파일과 일정한 다운로드 대역폭이 달성됩니다.

라이터 프로세스를 차단하지 않도록이 튜닝을 자동으로 수행하는 방법이 있습니까 (예 : 가능한 한 자주 플러시)? 예를 들어, 다운로드 속도가 1MB / s 인 경우 5 초마다 플러시하면 충분합니다.

답변:


3

dirty_writeback_centisecs보다 오래된 페이지가 더러운 경우 Linux 커널에서 모든 항목을 검사합니다 dirty_expire_centisecs. 기본 설정을 사용하면 5 초마다 30 초 이상 더티 페이지가 있는지 확인합니다.

커널에는 더티 메모리 제한이 있습니다. 이 한계에 도달하면 RAM에 너무 많은 더티 페이지가 생기지 않도록 모든 writter 프로세스를 차단합니다.

튜닝해야 할 것은

  • vm.dirty_background_ratio : 커널이 백그라운드에서 디스크로 플러시를 시작하기 전에 더티 페이지로 채울 수있는 시스템 메모리의 양.
  • vm.dirty_ratio: 더티 페이지로 채울 수있는 최대 시스템 메모리. 그런 다음 커널은 모든 것이 디스크로 플러시 될 때까지 모든 I / O 요청을 차단합니다.

이 동작을 수행하지 않으려면 커널에 최소 30s * 6MB / s = 180MB를 보유해야한다고 알려야합니다. 디스크를 플러시하는 데 필요한 시간 동안 더 더러운 페이지가 RAM에 기록되므로 Raspberry Pi의 느린 쓰기 속도도 고려해야합니다.

이것은 라즈베리 파이에 대해 너무 많은 RAM을 나타낼 수 있으므로을 낮추어야 할 수도 있습니다 dirty_expire_centisecs. 작은 값을 사용하면 거의 동시 I / O를 얻을 수 있으므로 시스템 응답 성이 저하 될 수 있습니다.

작동 방식에 대한 자세한 설명은 다음과 같습니다. https://lonesysadmin.net/2013/12/22/better-linux-disk-caching-performance-vm-dirty_ratio/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.