用ionice -p PID查看进程IO优先级,格式为“class : priority”,class为0~3,best-effort类priority为0~7(越小越高);权限不足时需sudo;结合/proc/PID/io验证IO量,并用htop按PRIO排序定位调度压制。

你需要在银河麒麟V10系统中确认某个已知PID的进程当前IO调度优先级,以便判断其磁盘访问是否被内核IO调度器降权或抢占,这直接关系到该进程读写延迟是否异常升高。
用ionice命令查看进程当前IO优先级
打开终端,执行ionice -p PID,将PID替换为你要查的实际进程号,例如ionice -p 12345。
输出格式为class : priority,其中class值为0(none)、1(realtime)、2(best-effort)、3(idle);priority范围依class而定,best-effort类为0~7,数值越小优先级越高。
若提示Permission denied,说明该进程不属于当前用户或已脱离会话控制——此时必须用sudo ionice -p PID重试,否则无法读取内核IO调度上下文。
通过/proc/PID/io反向验证IO行为强度
执行cat /proc/12345/io | grep -E "(read_bytes|write_bytes|cancelled_write_bytes)",观察三行数值是否持续增长。
如果read_bytes和write_bytes每秒增量极低(如cancelled_write_bytes突增,说明该进程IO请求正被CFQ或BFQ调度器主动丢弃——这通常发生在idle class进程刷盘时被高优先级任务强行截断。
【注意:cancelled_write_bytes非零不等于进程异常,而是IO调度器主动干预的明确信号】
结合iotop动态观察IO权重效果
第一步:运行sudo iotop -o -P -d 1,-P参数强制只显示进程(不展开线程),-o过滤静默项。
第二步:在实时界面中找到目标PID所在行,观察“IO>”列右侧的“PRIO”字段值——该值由ionice class与priority共同映射生成,数值越小代表内核分配的IO时间片权重越高。
第三步:按R键反转排序,再按←键切换排序字段至“PRIO”,此时排在最上方的即为当前获得最多IO带宽保障的进程。
若目标进程PRIO值明显高于其他活跃进程(如显示为“be/4”而周围是“be/0”),即使其IO>数值不大,也说明它正被IO调度器持续压制——这时需检查是否误设了ionice -c3(idle class)。

















