이전 2.6.X
커널에서는 현재 모든 스레드가 1초 동안 사용 중이면 pdflush
더 많은 스레드를 생성했습니다(pdflush
pdflush
Linux 페이지 캐싱 및 pdflush).
2.6.32
커널 이후로 pdflush
지원되는 각 장치에 대해 이름이 지정된 스레드로 대체되었습니다 flush-MAJOR
(Linux 2 6 32 - Linux 커널의 새로운 기능).
flush-MAJOR
지원되는 단일 장치에 대해 여러 스레드를 생성하는 방법이 있습니까 ?
현재 디스크에 많은 데이터를 쓰고 있는데, 이 작업이 진행되는 동안 [flush-8:32]
프로세스의 CPU 사용률이 거의 100%에 달합니다 top
. flush-MAJOR
I/O 로드가 많은 특정 장치에 대해 더 많은 스레드를 생성하는 방법이 있는지 궁금합니다 . 성능에 도움이 될지는 모르겠지만 어떤 효과가 있는지 보고 싶습니다.
각 장치가 여러 개의 플러셔 스레드를 지원해야 한다는 증거를 보았습니다.씻어내세요 pdflush:
첫 번째 시도를 검토한 후 Jens는 Andrew Morton의 제안에 따라 장치당 여러 개의 플러셔 스레드를 갖는 기능을 추가했습니다.
하지만 이것을 구현하는 방법이나 자동으로 발생하여 놓쳤는지 모르겠습니다.
저는 2.6.32-358.el6.x86_64 커널로 RHEL 6.4를 실행하고 있습니다.
답변1
당신은 할 수 없습니다. 2009년 iirc 경에 제거된 bdi_add_flusher_task()가 있었습니다. 그리고 원래는 파일 시스템을 위한 것이었지만 파일 시스템을 작성하고 있는 것 같지는 않습니다. :-)
하지만.. 왜 100% CPU를 사용하는지 모르겠습니다. 약 $100,000 어레이에 10GB/s 이상의 쓰기를 수행하지 않는 한 말이 되지 않습니다. RAM은 디스크보다 훨씬 빠르므로 iowait는 높아야 하지만 CPU는 높아서는 안 됩니다.
꼭대기에서 실행하여 CPU가 실제로 사용되는 위치를 시스템, 사용자, irq 및 대기 %로 분류하여 확인합니다.
또한 페이지 스캔 등 다른 숫자가 높아지거나 경고 또는 위험 상태에 도달하는지 확인하세요.
iowait %가 높으면 이는 예상된 현상이며 디스크가 최선을 다하고 있어 더 빨리 실행할 수 없으며 시스템은 디스크가 블록을 읽거나 쓸 때까지 기다리고 있는 것입니다.
편집하다
Kevin이 요청한 대로 이 메모를 추가하는 것을 거의 잊어버렸습니다. 다시 살펴보니 bdi_add_flusher_task()가 제거된 이유에 대한 문서를 찾을 수 없었습니다.
그러나 Linux 3.2.0-67 소스 코드를 스캔할 때 이 프로그램은 존재하지 않으므로 분명히 어딘가에 떨어뜨린 것임에 틀림없지만 쉽게 착각할 수 있습니다. :-)
답변2
Jens는 원래 장치당 여러 플러셔 스레드를 지원하기 위해 bdi_add_flusher_task() 함수를 추가하려고 했지만 메일링 리스트에서 Christoph Hellwig와 논의한 후 중단되었습니다. 자세한 내용은 다음 링크를 참조하세요. https://lore.kernel.org/patchwork/patch/169137/ 따라서 단일 장치에 대한 여러 새로 고침 스레드가 메인라인에 병합되지 않았습니다.