当输入/输出util比较高时,Linux读写硬盘会返回EIO吗?
答案1
设备利用率高并不是一个错误。每个物理 I/O 请求都会进行一次系统调用,并将该请求添加到每个独立设备的单独队列中。对于某些媒体类型,可以重新排序请求以优化使用。
队列长度通常受到限制,因为任何具有排队请求的进程/线程都不会被调度(因此不会从系统调用中退出),并且无法发出另一个请求。
一些慢速设备(例如套接字)可能会返回 errno=EAGAIN(资源暂时不可用),这建议进程重试传输的剩余部分。这通常发生在进程接收到信号时。
答案2
为什么会这样?
仅供参考,来自include/uapi/asm-generic/errno-base.h
:
#define EIO 5 /* I/O error */