왜 CPU가 IO (wa)에 시간을 보냈습니까?


18

나는 알고있다 wa(에이 top) 내가 기다리고 / O의 CPU 시간을 측정합니다. 많은 기사들이 그렇게 말합니다.

그러나 나는 두 가지 지식 포인트를 바탕으로 혼란 스럽습니다.

  1. 프로세스가 시스템 호출을 사용하여 디스크를 읽는 경우 프로세스가 차단됩니다.
  2. 프로세스가 차단되면 CPU에서 실행되도록 예약 할 수 없습니다.

권리?

CPU가 I / O를 기다리는 시간이없는 것 같습니다 ... 어떻게됩니까?

더 많은 책을 읽을 수 있도록 책이나 기사를 추천하면 훨씬 좋습니다.


나는 들어서서 정답을 썼다. 당신이 저를 필요로했을 때 미안합니다. ;-)
Alec Teal

답변:


22

CPU 유휴 상태는 두 개의 서로 다른 "하위"상태로 나뉩니다 : iowaitidle.

CPU가 유휴 상태 인 경우 커널은 로컬 디스크 또는 해당 CPU에서 시작된 NFS (Remotely Mounted Disk)에 대해 하나 이상의 I / O가 현재 진행 중인지 확인합니다. 있으면 CPU가 상태 iowait입니다. 해당 CPU에서 시작된 I / O가 진행되지 않으면 CPU는 idle상태입니다.

그래서, iowait시간의 백분율 CPU가 유휴 상태 인 그 CPU에서 시작된 진행 적어도 하나의 I / O가가.

iowait카운터는 시스템이 더 계산 작업을 처리 할 수있는 상태. CPU가 iowait상태에 있다고해서 해당 CPU에서 다른 스레드 나 프로세스를 실행할 수 없다는 의미는 아닙니다.

따라서 iowait단순히 유휴 시간의 한 형태입니다.


이것은 실제로 거짓입니다. 또한 NFS-CPU에는 그러한 개념조차 없습니다. 기본적으로 CPU는 저수준 IO 작업을 처리하기 때문에 다른 작업을 수행 할 수없는 시간입니다. 일반적으로 파일을 읽고있는 I / O를 처리하지 않고 연결된 파일에 액세스한다는 의미에서 파일을 읽습니다. 예를 들어 Raspberry Pi에는 DMA 컨트롤러가 없으므로 CPU는 "이번 마더 보드에서 카드에서이 바이트를 시작해서 여기에서 시작하는 램에 넣을 수 있습니다"로 이동할 수 없습니다. 수동으로 수행해야합니다.->
Alec Teal

따라서 카드 읽기가 완료 될 때와 같이 io를 계속 기다리는 데 많은 시간을 소비합니다. 캐시 미스가이 "io wait"(물론 계산되지 않음)에 의해 측정 될 수있는 것처럼 들리게됩니다. IO 대기는 다음과 같이 정의됩니다. 커널이 저수준 장치 I / O 루틴 내부에서 보낸 시간-예 : RPi의 경우 문자 그대로 카드에서 판독 절차를 수행해야하며 CPU (DMA가없는 mp 프임)는 IO 버스의 데이터를 기다려야합니다. DMA 컨트롤러를 사용하면 컨트롤러와 대화하고 "완료되면 알려주십시오"라는 메시지가 표시됩니다. DMA 컨트롤러가 장치 IO를 수행하는 동안 다른 작업을 수행하도록 남겨 두십시오
Alec Teal

dstat를 사용하여 IOwaiting BTW를 확인하십시오. 또한 iowait 및 커널 작업을 수행하는 데 소요 된 시간은 실제로 프로세스별로 측정 할 수 없습니다. "파일"에 "쓰기"라는 두 가지 프로세스가 있는데, 첫 번째 프로세스는 빠르게 완료되고, FS는 어떤 이유로 든 쓰기를 캐시하기로 선택하고, 두 번째 프로세스는 캐시를 플러시하도록합니다. 반환하는 데 더 오랜 시간이 걸리지 않습니다 쓰기에서 쓰기를 일으킨 프로세스로. I / O 대기와 동일하므로 프로세스별로 측정되지 않습니다.
Alec Teal

4
@AlecTeal : 아니요, 맞습니다. 귀하의 의견은 허위입니다. iowait는 I / O를 서비스 하지 않고 I / O에서 차단 된 시간을 계산합니다 . 커널 소스를 읽음으로써이를 확인하지 않으려면 실험을 시도하십시오 : 네트워크 파일 시스템을 마운트하고 파일 읽기를 시작한 다음 원격 시스템을 방화벽 해제하십시오. 프로세서가 완전히 유휴 상태이지만 iowait 시간은 여전히 ​​높습니다.
David

1
이 답변에 대한 테스트를 수행했습니다. dd if=/dev/sda of=/dev/null높이 만들 수 wa있습니다. 그런 다음 wa대신 true 코드를 실행하십시오 us. 고마워요.
HUA Di

-2

100 % 확실하지 않다고 생각하지만 몇 가지 아이디어가 있습니다.

여기에 또 다른 질문이 있는데, 좋은 답변이 있습니다. 누구나 IOWait이 무엇인지 정확하게 설명 할 수 있습니까?

여기에 좋은 게시물이 있습니다 : http://veithen.github.io/2013/11/18/iowait-linux.html


7
Mike, 답변에는 콘텐츠 링크뿐만 아니라 콘텐츠도 포함되는 것이 좋습니다. 여기에 컨텐츠를 제공하면 해당 링크가 사라질 때에도 귀하의 답변에 여전히 가치가 있습니다.
EEAA 2016

1
@ EEAA 그런 다음 답변을 편집해야합니다. 또는 주석으로 이동할 수 있습니다. 여전히 유용한 정보가 포함되어 있습니다. Downvotes는 정보가 거의 보이지 않게함으로써 정보가 쓸모 없다는 것을 의미합니까? 나는 당신이 공감했다고 말하지 않고, 사람들이 여기에서 가지고있는 접근 방식에 대해 궁금합니다.
Roland Pihlakas

3
@RolandPihlakas 동기 부여의 문제입니다. 이 상황에서 Downvote + comment는 사용자가 답변을 수정하도록 동기를 부여합니다. 답변이 수정 된 후 기꺼이 dv를 제거하겠습니다. 이것들을 편집하는 것은 나쁜 행동을 가능하게하기 때문에 비생산적입니다. 우리는 한 년을 통해 여러 사용자 했어 오직 존재에도 불구하고, 링크 전용 답변을 게시 그렇게하지 말라고. 사용자가 답변에 약간의 노력을 기울일 수 없다면 작업을 수정하여 도움을주지 않을 것입니다.
EEAA

@EEAA 정교한 답변 감사합니다. 귀하의 접근 방식은 이해할 수 있으며 귀하의 의견을 통해 답변 작성자에게 동기 부여를 제공합니다. 대조적으로, 나는 침묵하는 downvotes가 모호하기 때문에 실질적인 동기 부여를하지 않는 것이 두렵습니다. 그러나 나는 약간 부정확했습니다. 대부분 왜 대답이 너무 많이 다운되어 회색으로 표시되는지 궁금합니다. 하나 또는 두 개의 downvotes에 대한 귀하의 의견이 충분 했습니까?
Roland Pihlakas

2
@RolandPihlakas 사람들은 답변이 유용하지 않다고 생각하여 다운 보트했습니다. 화요일이기 때문에 공감했습니다. 그들은 오늘 미니애폴리스에 눈이 내렸기 때문에 하향 투표했습니다 (실제로 봄이 늦지 않아야 함). 누가 알아.
EEAA
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.