1 问题描述
原本是在我的OrangePi Plus(8核、16GB)上搭建一个文件共享服务,利用Samba来构建。
我的硬盘构成如下:
- 一张256GB的TF卡搭载系统主体
- 板载的eMMC 256GB卡作为子存储盘,映射为share文件夹
- 一张NVME 1T硬盘作为主要的共享盘,映射为file文件夹
在我搭建完成后,我发现file的读写速度只有30-45MB/s,接下来就是漫长的栽坑经历...
2 排查
本着从易到难、从浅到深的排查步骤,我开始一步步试错。
2.1 是否是网络负载的问题?
不是,也不可能,电脑有线网口是1Gbps的,开发板有线网口是2.5Gbps的,中间的路由器对接的两个lan口都是2.5Gbps的,网线都是超6类和7类,所以不可能是网络问题,理论上是可以达到120MB/s左右的上限的(瓶颈在于电脑端的网口)。
2.2 是否是Samba的配置问题?
也不是,通过反复修改,以及参考网上所谓优化方案,都不能提高速度。
并且我还试过了以本地服务的方式部署以及容器化Docker部署samba,都是一样的结果。
2.3 是否是硬件问题?
也不是,我也怀疑过是否是硬盘速度问题,或者开发板的M2接口速度受限,我的测试办法是,通过测速工具让文件在系统盘TF卡和M2硬盘之间传输,速度是可以超过1GB/s的,完全可以达到理论值,所以这一猜想也被否决了。
2.4 难道是我的挂载方式的问题?
无论是修改\etc\fstab的自动挂载参数,或者改为临时mount来测试,都是不影响测试结果的,所以也不是这个原因。
2.5 莫非是CPU性能原因?
先说结论,对了一半,我猜想的是难道是Docker部署导致cpu限制,没有完全利用好性能?
但是经过测试,进入samba容器中输入命令nproc,得到的就是8,也就是说cpu没有受限。
所以原因还是不在这。
3 最终解决办法
其实中间有好几个月,我都没有去管这个了,但是这个问题多少也一直挂在心上,想想觉得膈应。
最终其实在CPU受限的猜想上得到的启发,我在测试的时候输入命令htop,监测开发板性能利用率,发现有一个mount.ntfs的进程会一直占用单核大量的性能,这时候我想到,ubuntu对ntfs的支持不是内核级的,所以这是否是导致这个问题的原因?
说干就干,我又把开发板给拆了。不过说起来,我给M2硬盘用ntfs分区格式也是因为可以方便地接在电脑上查看内容。现在我将内容拿出来备份到电脑,然后装到开发板,在开发板上对它进行分区和格式化为ext4。
终于要到见证时刻了,我挂载硬盘,开启samba服务,通过电脑访问共享文件夹,没有问题。
接下来我刚好要把刚刚备份的内容放回去,终于,速度打满了带宽,稳定在1Gbps左右,这也说明之前的猜想正确,就是因为硬盘分区格式导致的,我用了ubuntu并不“原生支持”的ntfs,导致读写还要挂载一个服务,这非常低效。
