惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
小众软件
小众软件
V
Vulnerabilities – Threatpost
P
Proofpoint News Feed
The Register - Security
The Register - Security
A
About on SuperTechFans
L
LINUX DO - 热门话题
Blog — PlanetScale
Blog — PlanetScale
V
Visual Studio Blog
The Cloudflare Blog
The Last Watchdog
The Last Watchdog
Google DeepMind News
Google DeepMind News
L
LangChain Blog
博客园_首页
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
Recent Announcements
Recent Announcements
NISL@THU
NISL@THU
P
Privacy & Cybersecurity Law Blog
MongoDB | Blog
MongoDB | Blog
C
Check Point Blog
C
Cybersecurity and Infrastructure Security Agency CISA
G
GRAHAM CLULEY
Scott Helme
Scott Helme
P
Palo Alto Networks Blog
博客园 - Franky
The Hacker News
The Hacker News
Microsoft Security Blog
Microsoft Security Blog
爱范儿
爱范儿
Security Latest
Security Latest
腾讯CDC
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
T
Threat Research - Cisco Blogs
Know Your Adversary
Know Your Adversary
P
Proofpoint News Feed
T
The Exploit Database - CXSecurity.com
T
Tenable Blog
V
V2EX
Hacker News: Ask HN
Hacker News: Ask HN
大猫的无限游戏
大猫的无限游戏
MyScale Blog
MyScale Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
S
SegmentFault 最新的问题
Latest news
Latest news
S
Schneier on Security
博客园 - 三生石上(FineUI控件)
L
Lohrmann on Cybersecurity
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
T
Tor Project blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog

奕奕 Blog

法国和西班牙能在世界杯决赛相遇吗? 奕奕 Blog: 法国和西班牙能在世界杯决赛相遇吗? OpenViking 记忆提取挂了三天,最后发现是模型太聪明 奕奕 Blog: OpenViking 记忆提取挂了三天,最后发现是模型太聪明 Hermes Mini App 监控面板开发实录 奕奕 Blog: Hermes Mini App 监控面板开发实录 OCI ARM 实例的 iowait 假象 当“家”的重担,悄然落在肩头 奕奕 Blog: 当“家”的重担,悄然落在肩头 我的抖音号被“永封” 奕奕 Blog: 我的抖音号被“永封” 鱼缸炸缸风险评估 奕奕 Blog: 鱼缸炸缸风险评估 烟雨西北 奕奕 Blog: 烟雨西北 三色发糕制作教程 奕奕 Blog: 三色发糕制作教程 QQ官方机器人无需审核快速发布正式版 奕奕 Blog: QQ官方机器人无需审核快速发布正式版 win11代理设置劫持--自动打开“使用设置脚本” 奕奕 Blog: win11代理设置劫持--自动打开“使用设置脚本” AI模型的Token到底是什么 奕奕 Blog: AI模型的Token到底是什么 为什么我选择放弃"暗色模式切换按钮" 奕奕 Blog: 为什么我选择放弃"暗色模式切换按钮" QQ机器人插件 奕奕 Blog: QQ机器人插件 Blogger优化,解决 Blogger 动态插入外部资源的问题 奕奕 Blog: Blogger优化,解决 Blogger 动态插入外部资源的问题 个人主页代码 奕奕 Blog: 个人主页代码 隐藏Waline的登录按钮 奕奕 Blog: 隐藏Waline的登录按钮 谷歌云GCP 永久免费服务器申请教程 奕奕 Blog: 谷歌云GCP 永久免费服务器申请教程 当AI 看到你的博客 奕奕 Blog: 当AI 看到你的博客 决定恢复 Blogger 版权信息 奕奕 Blog: 决定恢复 Blogger 版权信息 学习戴隐形眼镜小窍门 奕奕 Blog: 学习戴隐形眼镜小窍门 让 Blogger 标签栏默认展开 奕奕 Blog: 让 Blogger 标签栏默认展开 利用CDN边缘函数缓存外部文件 奕奕 Blog: 利用CDN边缘函数缓存外部文件 孩子出院了 奕奕 Blog: 孩子出院了 操啊,女儿进了新生儿科 奕奕 Blog: 操啊,女儿进了新生儿科 迎接新生命:我的女儿锦瑶诞生记 奕奕 Blog: 迎接新生命:我的女儿锦瑶诞生记
奕奕 Blog: OCI ARM 实例的 iowait 假象
奕奕Blog · 2026-04-20 · via 奕奕 Blog

白嫖的 Oracle Cloud ARM 实例,top 里常年挂着 40%+ 的 iowait,一度以为自己踩到了磁盘性能的坑。直到有天认真查了一下,才发现事情没那么简单。

事情要从一次例行巡检说起。登上服务器跑了个 top,iowait 优雅地停在 45% 左右。第一反应是——磁盘是不是快不行了?毕竟免费实例嘛,IO 性能缩水也说得过去。于是 iostat、iotop 一顿操作,结果磁盘读写响应时间正常得很,完全没有瓶颈的迹象。

这就奇怪了。iowait 的定义是"CPU 空闲但有待完成的 IO 请求",可实际上并没有什么 IO 压力,那这 40% 是从哪冒出来的?

顺着这个线索,我翻了翻 Linux 内核的账本。内核源码 sched/cputime.c 里写得明明白白:每个时钟 tick,内核先检查硬中断、软中断,再算用户态、系统态时间,剩下的归 idle。而 idle 里又做了个区分——如果当前 CPU 的运行队列里有进程在等 IO(nr_iowait > 0),这笔时间就记到 iowait 账上,否则记到 idle 账上。

换句话说,iowait 不是"IO 多慢",而是"CPU 闲着的时候刚好有人在等 IO"。这个区分在物理机上没问题,因为时钟 tick 和 CPU 调度是一体的。但在虚拟机里,事情就变味了。

虚拟机的"时间感知"依赖宿主机的调度。当宿主机把 CPU 时间片分给别的虚拟机时,当前虚拟机内核的时间计数器可能产生偏差。这个现象在 OpenVZ、Xen 等虚拟化平台上都有记录——/proc/stat 里的各项时间累加值有时甚至对不上,总量超过一个 CPU 应有的 tick 数。

Oracle Cloud 的 ARM 实例用的是 Ampere Altra / Neoverse 处理器,底层虚拟化方案虽然官方没有公开太多细节,但从社区反馈来看,这类共享型实例(尤其是 free tier 的 VM.Standard.A1.Flex)普遍存在时钟统计偏差的问题。表现就是:iowait 居高不下,但实际 IO 性能完全正常。

这其实和 steal time(top 里的 st 列)是同一类问题。steal time 是宿主机明确告诉你"我拿走了你的 CPU 时间",而 iowait 偏高则是宿主机没打招呼,悄悄把时间差混进了 idle 和 iowait 的统计里。本质都是虚拟化层的调度行为,只是统计口径不同。

验证方法也很简单。在 iowait 高企的时候,跑一个 CPU 密集型任务(比如 sha1sum /dev/urandom),如果 iowait 瞬间降下来、user 飙上去,说明那部分时间本来就是空闲的,只是被错误归类了。真正的 IO 瓶颈不会因为你跑个计算任务就消失。

还有个佐证:用 vmstat 1 观察,bi(blocks in)和 bo(blocks out)几乎为零的时候,wa 依然很高。这就像银行账户显示你每月在某个品类上花了一半的工资,但去查消费记录却找不到对应的账单。

所以结论是:别被 top 里的 iowait 吓到。如果你的 OCI ARM 实例 IO 性能实测正常,那这个高 iowait 大概率只是虚拟化环境下的统计假象,不影响实际使用。想看真实负载,盯 us + sy 和实际 IO 延迟比看 iowait 靠谱得多。