为什么 openwrt 上本地的 io 操作会严重影响整体性能?

2022-01-06 14:13:48 +08:00
 vigidroid
我给路由器插了外置硬盘做 samba 服务。发现传输数据的时候(指局域网的设备读、写路由器硬盘数据,和路由器硬盘本地做数据 copy ),路由器性能会整体下降,具体体现在:
1. Load Average 增长到 3+( cpu 为单核)
2. iostat 命令显示: cpu %idle 为 0 ,cpu %iowait 很高,硬盘设备的%util 接近 100
3. ps 命令显示:smbd 进程 STAT 为 D

网上查了一圈,大概理解为 cpu 在干等 io 操作返回( iowait 高),极少腾出空闲处理其他事情,导致得卡顿。那我理解这种情况应该是有方法优化的。io 操作出现了瓶颈,cpu 应该放手 io 进程,转而积极处理其他进程。为什么现在不是这样?
这个和路由器的内存少有没有关系,是不是搞个 swap 会有效(现在没有 swap ,内存 60MB )?
还有个问题,为什么同样是 io copy ,局域网设备之间的传输就不会导致路由器 cpu 的 iowait 升高。

本人 linux 小白,请教一下,有没有什么思路解决这种问题?
6051 次点击
所在节点    Linux
48 条回复
xuboying
2022-01-06 16:01:51 +08:00
硬盘是 ext4 ,这是个有日志支持的文件系统。如果只是当网盘用这个文件系统太重量级了。用 FAT 家族试试。
fhbyljj
2022-01-06 16:20:39 +08:00
@f165af34d4830eeb 你是怎么知道的
BaseException
2022-01-06 16:29:15 +08:00
@f165af34d4830eeb #16
@vigidroid #14

我虽然也是通过路由器 all in one ,但是 cpu 是赛扬 N3150 ,四核心四线程,还跑 qbit 挂 pt 之类的,跑 samba ftp 之类的不在话下。
[![Tznmid.png]( https://s4.ax1x.com/2022/01/06/Tznmid.png)]( https://imgtu.com/i/Tznmid)
vigidroid
2022-01-06 16:35:30 +08:00
@BaseException 很棒。用的什么系统
f165af34d4830eeb
2022-01-06 16:43:20 +08:00
@fhbyljj #22 你是指#4 的内容么?根据 op 最开始的描述,mt7620A 是最有可能的,当然我是没想到 op 用的是更古老的 wndr3700v4 。
f165af34d4830eeb
2022-01-06 16:44:46 +08:00
@BaseException #23 我前段时间用 10 代 i3 装了一台 NAS ,具体可以参考 https://v2ex.com/t/823843#reply92
f165af34d4830eeb
2022-01-06 16:48:52 +08:00
@f165af34d4830eeb #26 又打错了,应该是 15 楼。。https://v2ex.com/t/823843#reply15
BaseException
2022-01-06 16:49:28 +08:00
@vigidroid #24 就是 openwrt 但是不记得是谁编译的了,也没有原来的帖子。
BaseException
2022-01-06 16:50:34 +08:00
@f165af34d4830eeb #26 垃圾佬的快乐~~~ 感谢分享
strongcoder
2022-01-06 16:59:18 +08:00
我搞了个 J3455 为核心的 ALL IN ONE, PVE 做底层虚拟化,上面跑三个系统 一个精简版 WIN7 一个 DSM 一个 OPENWRT 日常内网 传输千 M 跑满也没啥 IO 瓶颈问题啊 ,还是 CPU 性能问题
james122333
2022-01-06 17:18:01 +08:00
是可以调整 小机器一样可以飞 但任性点总得要充实知识
vigidroid
2022-01-06 17:24:44 +08:00
@james122333 求带个路,我去学
respawn
2022-01-06 17:43:44 +08:00
削皮刀和菜刀
ysc3839
2022-01-06 18:21:07 +08:00
建议只看 CPU 使用率,准确说是 CPU 非空闲时间百分比,不要去看其他各种参数,尤其是自己不懂的情况下
lazywen
2022-01-06 18:32:36 +08:00
iowait 没有干等,只是一个计数而已,影响性能的是你的 user 、sys cpu 占用,因为就算是本地复制也需要 cpu 做很多工作的,而内网设备之间传输数据时 cpu 并没有 io 操作,只是在不停的解析包和转发包
lazywen
2022-01-06 18:34:27 +08:00
更正一下,而内网设备之间传输数据时 cpu 并没有磁盘 io 操作
dinfeo
2022-01-07 09:00:09 +08:00
额,建议还是路由器干路由器的活,存储还是买个 NAS 吧,自组和成品都可以,分开来= =
不然你在折腾的时候,存储挂了,路由器也挂了,= =都没法上网找解决方案。
james122333
2022-01-07 09:28:23 +08:00
@vigidroid
这看你自己的了 发到这大家都看得到 不希望自己价值消失
vigidroid
2022-01-07 10:07:57 +08:00
@james122333 有货就发出来,没货就闭嘴
power100
2022-01-07 10:25:54 +08:00
路由器外挂 usb 移动硬盘就是个功能添头,要求不高用用无所谓的,如果要把当服务器那就性能不够了。要么搞个 nas ,要么就是弄个 X86 CPU 的软路由吧,秒他十万八千里!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/826588

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX