我安装了 indicator-multiload,以便能够监控我的网络和 CPU。使用 indicator-multiload 时,我注意到浏览器(firefox 和 midori)导致 CPU 负载相对较高。
这是当我打开新标签并加载内容时的情况。有时至少会发生 PC 的一些反应冻结几秒钟的情况。更准确地说:实际的 CPU 负载(“系统”)根本不高。而是所谓的“I/O 等待”非常高(有时高达 70% 左右)。一旦相应的页面完全加载,一切都会恢复正常,整个系统会像以前一样响应。当然,这种行为取决于页面的内容。只有文本或只有几张图片意味着没有延迟。
我想补充一点,我不使用任何交换,既不使用单独的分区也不使用交换文件。而且:我的系统安装在 USB 棒(64GB)上,USB 2.0 但我不知道这是否与它有关。
我的问题是:有没有办法操纵上述行为,即我是否可以以任何方式改变与“I/O 等待”有关的 CPU 行为?
羅西卡
PS:系统:Linux/Lubuntu 16.04.1 LTS,64位
答案1
我对 USB 驱动器(而非实时系统)上的系统分区(Lubuntu 14.04)进行了类似的观察。不幸的是,它并非没有问题。
许多 USB 设备(尤其是 USB2.0)的写入速度非常慢,即使它们在写入大文件时速度还不错,但有些设备在写入小块时可能会变得非常慢(对于 ext4 文件系统,会写入许多 8k 块)。然后会发生这种情况:系统的写入队列变得拥挤,应用程序不得不等待很长时间才能完成写入(即显示为“I/O 等待”的状态),即使它们只向日志文件写入几个字节。当这种情况发生在面板应用程序上时,整个桌面可能会“冻结”。
禁用 Firefox 中的磁盘缓存和其他可能大量写入磁盘的内容会有所帮助。不幸的是,在标准系统中,很多内容一直在写入磁盘。
我使用“iostat -x 1”(显示磁盘 I/O 的总体状态)和“iotop”调查了这个问题。后者有助于识别大量写入磁盘的进程。
我也尝试了不同的磁盘调度程序及其设置,但并没有真正起到很大帮助,所以我就不在这里详细介绍了。
我实际上有两个便宜的 USB 3.0 驱动器,它们在几个月或一年后就因这种使用而坏了,显然它们不是为大量写入而设计的(闪存会因大量写入而磨损,特别是如果文件系统未针对闪存进行优化)。
唯一真正有帮助的是获得一个可以支持写入负载的优质 USB 驱动器。您特别想要寻找的是对于小块(8K)大小的良好写入性能(至少几 MB/秒)。我现在使用的是 SanDisk Extreme USB 3.0 32MB,它显然使用了 SSD 控制器 - 比普通的 USB 驱动器具有更复杂的优化/磨损均衡和更好的写入性能。它还具有一些有限的 SMART 支持,因此如果您留意它,它至少不会在没有警告的情况下失败。它们通常非常昂贵,但我在中国的 ebay 上找到了一些相对便宜的“翻新”产品。这里不打算推销,可能还有其他具有类似性能的产品。
另一种选择可能是在系统分区上使用 f2fs(“闪存友好文件系统”),但我还没有尝试或研究过这一点。