장치당 여러 개의 더티 페이지 새로 고침 스레드 생성

장치당 여러 개의 더티 페이지 새로 고침 스레드 생성

이전 2.6.X커널에서는 현재 모든 스레드가 1초 동안 사용 중이면 pdflush더 많은 스레드를 생성했습니다(pdflushpdflushLinux 페이지 캐싱 및 pdflush).

2.6.32커널 이후로 pdflush지원되는 각 장치에 대해 이름이 지정된 스레드로 대체되었습니다 flush-MAJOR(Linux 2 6 32 - Linux 커널의 새로운 기능).

flush-MAJOR지원되는 단일 장치에 대해 여러 스레드를 생성하는 방법이 있습니까 ?

현재 디스크에 많은 데이터를 쓰고 있는데, 이 작업이 진행되는 동안 [flush-8:32]프로세스의 CPU 사용률이 거의 100%에 달합니다 top. flush-MAJORI/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/ 따라서 단일 장치에 대한 여러 새로 고침 스레드가 메인라인에 병합되지 않았습니다.

관련 정보