입출력 활용률이 높을 때 Linux 읽기 및 쓰기 하드 디스크가 EIO를 반환합니까?
답변1
높은 장비 활용도는 실수가 아닙니다. 각 물리적 I/O 요청에 대해 시스템 호출이 이루어지며 요청은 각 개별 장치에 대한 별도의 대기열에 추가됩니다. 일부 미디어 유형의 경우 요청을 다시 정렬하여 사용을 최적화할 수 있습니다.
대기열 길이는 일반적으로 대기열에 있는 요청이 있는 프로세스/스레드가 예약되지 않고(따라서 시스템 호출이 종료되지 않음) 다른 요청을 할 수 없기 때문에 제한됩니다.
일부 느린 장치(예: 소켓)는 errno=EAGAIN(리소스를 일시적으로 사용할 수 없음)을 반환할 수 있으며, 이는 프로세스에 나머지 전송을 다시 시도하도록 권고합니다. 이는 일반적으로 프로세스가 신호를 수신할 때 발생합니다.
답변2
왜 이런 일이 발생합니까?
참고로 출처 include/uapi/asm-generic/errno-base.h
:
#define EIO 5 /* I/O error */