我有两个不同的 Linux 桌面连接到 Synology NAS,如下所示:
10.0.0.20:/volume1/chronicle /chronicle nfs rw,hard,intr 0 0
我经常看到我的计算机完全锁定,系统监视器显示 IOWait 明显阻塞。例如,电影播放会冻结,但(大多数时候)我仍然可以退出 VLC 并重新启动它。我还可以将电影文件复制到本地 SSD,这(我尝试过的很多次)在执行 IOWait 操作时会在传输中暂停。如果我做的事情不涉及 NAS 共享,我通常也不会遇到任何冻结。
我试图找出原因,但我不明白有关 、 和 的手册页和IOWait
其他poll
资源epoll
。
我可以做什么来识别和解决这个问题?
答案1
IOWait 不一定是阻塞的,但进程除了等待 I/O 之外没有其他事情可做。常见的代码模式是以非阻塞方式执行文件 I/O,然后在等待发生时执行一些其他处理。但最终,你会用完你想要的东西能这样做,因此您运行 poll(2) 来查找您请求的任何非阻塞 I/O,这在顶部输出中显示为 SyS_poll。或者您可以调用 epoll(2),它具有不同的接口,具有更复杂的设置,但它提供更集中的输出。或者您可以调用 select(2),这是该概念的较旧实现,但使用不同的结构来选择正在监视的文件描述符。如果要监视的文件描述符的数量相对较少,则 select 的调用效率可能比 poll 更高。但是,如果您设置为监视的文件描述符很稀疏,或者包含一些数量足够多而难以选择的文件描述符,则 poll 或 epoll 会更好,具体取决于您是否正在监视足够多的内容以值得进行设置工作epoll 的。
基本上,这仅意味着您的 NAS 活动相对于所请求的工作量而言速度较慢。假设这一切都在局部区域(例如您的房子),我的第一个想法是您的 NAS 是否出现某种驱动器故障?众所周知,如果其中一个驱动器发生故障,RAID2 到 RAID 7 的性能就会下降。众所周知,如果两个驱动器发生故障,RAID 6 和 RAID 7 的性能会严重下降。
您也可能存在一些网络配置错误。我不知道网络端口不匹配是否仍然是一个问题,但是当我真正了解网络问题时,自动协商失败是很常见的,例如一个设备设置为半双工,而另一个设备设置为全双工,结果就会出现冲突和网络传输错误。
ifconfig -a
将显示 UNIX 或 Linux 机器出现了多少网络错误。在 Linux 上,这是每个接口的最后一行输出。该行上的所有数字都应为 0。如果该行上的数字增长相对较快,则表明存在严重的网络问题。
此外,所有设备是否都以网络全速通信?如果是有线网络,快速以太网就不再是我们认为快的东西;而是快速以太网。如今,大多数设备都希望以千兆位或更快的速度进行传输。如果是无线的话https://en.wikipedia.org/wiki/IEEE_802.11告诉我我们现在已达到 802.11ax。我认为我的网络落后了几个版本,但它仍然足够快,我没有注意到它,因为我不流式传输内容。但您确实如此,因此确保所有设备的通话速度相同可能是个好主意。这包括路由器,尽管它通常是无线网络中被忽视的设备(至少根据我的经验 - 我的大家庭成员不会插入它,所以他们不会考虑它。)