基于USB3.0 USAP的Linux RAID1双盘阵列写入速度探究

问题

最近为了数据安全,把包含有数据的Linux机器的/home目录挂载到了USB3.0的RAID1阵列上,到底写入性能可以到什么程度呢? 下面就来测试一下

测试环境

机器是CPU是1037U,内存4G,系统为Ubuntu 18.04, 硬盘为两块外置ST4000LM024移动硬盘,使用了支持UASP的主控芯片。看网上评测裸盘写入最高速度150MB/s,但是使用USB3.0的情况下应该会有些损失。使用Linux构建软RAID1阵列,然后添加到LVM物理卷,再分配逻辑卷并格式化为ext4格式。分区空闲区域超过60%。

测试方法

这里使用dd进行测试,使用以下命令来得到写入平均速度

替换bs_size和write_count使之乘积为大致的定值来进行每项测试。同时使用iostat来观察磁盘的平均tps

测试数据

经过测试后,得到了下面的数据

数据块尺寸(KB) 传输速率(MB/s) 磁盘平均每秒事务(tps) CPU占用率
4 16.7 ~4300 41%
8 30.6 ~4000 37%
16 46.5 ~3000 35%
32 71.9 ~2400 29%
64 88.7 ~1400 20%
128 95.1 ~720 20%
256 97.8 ~380 12%
512 96.5 ~200 9%
1024 98.8 ~200 6%
2048 97.6 ~200 6%
4096 95.0 ~200 5%
8192 98.5 ~200 5%
16384 96.8 ~200 4%

基本上可以得出一个结论,USB3.0+UASP下,如果数据块较小,IOPS较高,USB的中断处理对于CPU的压力还是很大的。双盘阵列接近9000的每秒中断处理会将CPU吃到了41%。而在数据块变大之后,我们可以观察到由于USB中断导致的CPU消耗显著降低。并且由于数据快变大导致磁盘实际写入性能也提升到接近100MB/s。用来存储照片与视频以及大量的归档文件,综合性能还是不错的。

结论

近年来大容量移动硬盘价格普遍降低,虽然有关于高容量SMR方案导致性能与可靠性的争论,但通过冗余方案提供可靠性完全可以规避掉相关问题。实际看基于USB3.0 UASP的廉价Linux RAID1阵列具有很高的实用性。

解决NTFS拷贝文件远比磁盘物理读取速度慢的问题

问题

周末在Linux下搬运磁盘数据,发现一个很奇怪的现象。从通过ntfs-3g挂载的NTFS分区读取数据,写入到另外一个基于RAID1阵列的分区,理论上能到50MB/s+,实际上却只有20MB/s左右。而且在Windows上拷贝文件也是如此。这究竟是为何?

阅读更多解决NTFS拷贝文件远比磁盘物理读取速度慢的问题

家庭500mbps单口软路由接入方案

背景

最近发现一个比较坑爹的事情,之前家里联通宽带虽然免费提速到300mbps但一直速度最快跑到270mbps左右,其实是因为Netgear WNDR4300OpenWRT下系统load基本接近1.00,CPU只能跑到这个性能了。所以目前的宽带接入速度已经超过了已有硬件的性能基准。

加上最近联通新上了1Gbps的接入,因此我们的500mbps接入计划再次提上日程~

阅读更多家庭500mbps单口软路由接入方案

iPhone手机持续高耗电之谜

背景

我的iPhone 8在官方天才吧维修换机使用了大概快一年,电池写的容量还有88%,基本上在公司或者在家使用三四个小时就不怎么有电了。除了电池损耗因素外,我发现在熄灭屏幕期间,总是会有个神奇的”音乐”应用每个小时总会运行个10分钟左右,然后实际看耗电程度一点都不比屏幕亮着的时候低频操作低。这到底是怎么回事呢

阅读更多iPhone手机持续高耗电之谜

使用VSCode实现Electron及ffmpeg等超大项目代码智能感知

背景

最近一直使用VSCode来读代码和写代码,包括一些小的C项目和C++项目,用起来很顺手。

随着项目逐渐深入,我需要更有效率的在各种大型代码库中进行定义跳转及引用查找,并且需要精确的根据项目配置选择宏定义,另外就是在修改代码时对于使用到的数据结构进行代码提示。这里面包含了大量的使用到了GNU Make系列组织的项目以及Google系列的用ninja编译工具的项目。针对这两种项目,现在使用VSCode不能满足跨文件的智能感知,这个问题是否能解决呢。

阅读更多使用VSCode实现Electron及ffmpeg等超大项目代码智能感知