CPU는 IO 보류가 있음을 어떻게 알 수 있습니까?


17

iowait아래에 표시된 것처럼 최상위 유틸리티 출력에 표시된 속성을 조사했습니다 .

top - 07:30:58 up  3:37,   1 user,  load average: 0.00, 0.01, 0.05
Tasks:  86 total,   1 running,   85 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

iowait 일반적으로 다음과 같이 정의됩니다.

"CPU가 유휴 상태이고 보류중인 IO가있는 시간입니다."

프로세스가 단일 CPU에서 실행된다는 것을 이해합니다. 시간 슬롯을 다 사용하여 예약이 취소되거나 차단 된 후에는 한 CPU에서 다시 예약 할 수 있습니다.

IO 요청의 경우 프로세스를 무정전 절전 상태로 만드는 CPU가 iowait시간 추적을 담당합니다 . 다른 CPU는 실제로 유휴 상태 일 때 유휴 시간과 동일한 시간을보고합니다. 이 가정이 맞습니까?

또한 긴 IO 요청이 있다고 가정하면 (프로세스에 일정을 잡을 수있는 기회가 여러 개 있지만 IO가 완료되지 않아서 일정이 예약되지 않았다는 것을 의미) CPU에서 "대기중인 IO"가 있음을 어떻게 알 수 있습니까? 그런 종류의 정보는 어디에서 가져 옵니까? CPU는 CPU가 프로세스를 휴면 상태로 만들 수 있었기 때문에 IO가 완료 될 때까지 일부 프로세스가 휴면 상태에 있음을 어떻게 알 수 있습니까? 이 "pending IO"상태는 어떻게 확인됩니까?


3
"단일 CPU에서 프로세스가 실행됩니다". 실제로는 아닙니다. 스레드는 단일 CPU 코어에서 실행되지만 최신 프로세스에는 여러 스레드가 있으며 최신 CPU에는 여러 코어가 있습니다.
MSalters

@MSalters 그럼에도 불구하고 단일 스레드는 특정 시점에서 하나의 코어에서만 실행될 수 있지만 컨텍스트 전환 후 실행되는 코어는 변경 될 수 있습니다.
JAB

1
IRQ (interrupt request)라는 것이 있지만 우리가 관심있는 것보다 더 많은 하드웨어 일 것입니다.
mathreadler

답변:


33

CPU는 이것을 알지 못합니다. 작업 스케줄러는 알고 있습니다.

인용 한 정의는 다소 오해의 소지가 있습니다. 현재 procfs(5)맨 페이지 에는 다음과 같은 더 정확한 정의가 있습니다.

iowait (Linux 2.5.41부터)

(5) I / O가 완료되기를 기다리는 시간. 이 값은 다음과 같은 이유로 신뢰할 수 없습니다.

  1. CPU는 I / O가 완료 될 때까지 기다리지 않습니다. iowait작업이 I / O가 완료되기를 기다리는 시간입니다. 미해결 작업 I / O를 위해 CPU가 유휴 상태가되면 다른 작업이이 CPU에서 예약됩니다.

  2. 멀티 코어 CPU에서 I / O가 완료되기를 기다리는 작업이 CPU에서 실행되고 있지 않으므로 iowait각 CPU의 계산이 어렵습니다.

  3. 이 필드의 값은 특정 조건에서 감소 할 수 있습니다.

iowait일반적으로 I / O 대기 시간을 측정하려고합니다. 특정 CPU에 의해 추적되지 도 않을 수도 있습니다 (위의 2 포인트-궁금한 것과 일치합니다). 그러나 가능한 한 CPU 측정 됩니다 .

작업 스케줄러는 I / O 대기 중이기 때문에 주어진 작업이 일시 중단되었음을 알기 때문에 보류중인 I / O가“알고”있습니다. 이 in_iowait필드는 작업별로 추적됩니다 task_struct. 당신은 찾아보실 수 있습니다 in_iowait에서 스케줄러 코어 가 설정 추적 및 해제 방법을 볼 수 있습니다. Linuxn 평균에 대한 Brendan Gregg의 최근 기사 에는 유용한 배경 정보가 포함되어 있습니다. iowait의 항목 /proc/stat에서 끝나는 것입니다, top, 타이머 틱이 고려 될 때마다 증가하고, CPU "에"현재 프로세스가 유휴 상태입니다; 스케줄러의 CPU 시간 추적 코드account_idle_time 에서 이를 확인할 수 있습니다 .

따라서 더 정확한 정의는 "더 나은 작업이 없을 때 I / O를 기다리는이 CPU에 소요 된 시간"입니다.

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