基于Linux的NAS IO优化-以Padavan为例

  • 一、硬件环境介绍
  • 二、系统分析
    • 1.≈不需要随机读写性能:
    • 2.协议:FTP+SMB
    • 3.aria2离线下载
    • 4.存储器读强写弱,R0降低随机性能
    • 5.可用内存较多
    • --小结
  • 二、IO优化设置
    • 自动化设置脚本
  • 三、内容分析
    • nr_requests
    • read_ahead_kb
    • dirty_expire_centisecs
    • dirty_writeback_centisecs
    • dirty_background_ratio
    • dirty_ratio
  • 四、ARIA2
  • 总结与性能测试

前情提要:

一、硬件环境介绍

小米路由器3G MT7621 2C4T+256MB RAM
Padavan版本 3.4.3.9-099_9-9-23

USB3.0 U盘 NS1081双贴64GB EMMC RAID0 128GB。格式化为EXT4
读写速度(Windows+NTFS下)读150MB/s 写50MB/s

二、系统分析

1.≈不需要随机读写性能:

个人来说,由于相比NVME SSD来说U盘速度过于拉垮,所以基本上在需要修改文件时都会把文件从NAS上拷贝到本地。也不会出现人工同时打开数十个文件的情况。因此完全不需要随机读性能,随机写请看3.aria2离线下载。

2.协议:FTP+SMB

通过Padavan自带的samba和vsftp对安卓手机和电脑提供SMB和FTP服务。
手机客户端使用修改了APK签名的ES文件浏览器3.2.5.5(告别升级提示和广告),Windows端使用资源管理器自带功能。

这里值得一提的是在我这里SMB的性能要比FTP差这个在后面也有体现,但是Win连接FTP的使用体验不如SMB——像本地磁盘一样。么得办法

3.aria2离线下载

aria就不多说了。但由于多线程(几百?)下载的需求,这也是我要使用的应用中唯一一个不是对存储池进行连续读写的。但是如果写入队列够长,还是有许多写操作是可以合并的。

4.存储器读强写弱,R0降低随机性能

读写速度(Windows+NTFS下)读150MB/s 写50MB/s

新+空盘状态下读取性能是写入性能的3倍。考虑到NS1081不支持TRIM,写速后期还会下降。
同时对系统透明的Raid0使得未经优化的随机IO,特别是随机写性能极差。也极大增加了写入放大(NAND需要先擦再写,同时最小擦除单位大于最小写入单位)。

5.可用内存较多

256M内存,基本上都可以给NAS功能使用。路由功能占用极少。

–小结

1.写速为系统瓶颈,重连续、轻随机。
2.R0+NAND的存在使得我们希望能尽量(接近不惜一切代价的)合并随机写操作。
3.前期性能测试显示读性能基本足够。(千兆带宽)

另外,由于文件下载这一特殊应用,如果写缓冲和文件一样大则所有随机IO都可合并。
因此我们希望系统“一有空就开始写入,但是尽量不要阻塞程序”,同时尽量契合Raid0特性优化连续读取

二、IO优化设置

管理界面-自定义设置-脚本-在路由器启动后执行 末尾添加如下脚本并点击保存。重启路由器后设置应用成功。其中我这里U盘是sda。别的设备上可能是sda1,2什么的。

自动化设置脚本

#IO设置
echo 512 >/sys/block/sda/queue/nr_requests
echo 2048 >/sys/block/sda/queue/read_ahead_kb
echo 100 > /proc/sys/vm/dirty_writeback_centisecs
echo 300 >/proc/sys/vm/dirty_expire_centisecs
echo 10 >/proc/sys/vm/dirty_background_ratio
echo 50 > /proc/sys/vm/dirty_ratio

三、内容分析

nr_requests

echo 512 >/sys/block/sda/queue/nr_requests

修改IO队列深度为 512。

由于存储设备是2片EMMC R0组成的储存池,随机读写性能会有一定的下降,因此这里增加可合并的读写操作。

read_ahead_kb

echo 2048 >/sys/block/sda/queue/read_ahead_kb

设置每一次读操作时往后多读取一些放在RAM中备用,单位KB。

在IO为大量随机4K读的设备上,该数值设置过大会造成数据流量特别大,甚至能占满接口带宽。原因是每次读操作都被强制扩充到了这个大小。
由于本应用不需要随机读性能,因此设置为设备block层能进行的最大IO块大小

cat /sys/block/sda/queue/max_hw_sectors_kb
512

的整数倍。由于不清楚内部EMMC的块操作能力,将该数值*4。数值太大会降低随机读能力和RAM能缓存下的块缓存数目(单个缓冲区大了,总大小不变则数目减少)。

dirty_expire_centisecs

echo 300 >/proc/sys/vm/dirty_expire_centisecs

1/100s为单位的*脏内存 生存期(就是还没写,暂存在RAM的数据),在短时间多次修改同一个位置的数据时避免多次写入。
由于应用中几乎不存在对数据的修改操作,降低该数值。

dirty_writeback_centisecs

echo 100 > /proc/sys/vm/dirty_writeback_centisecs

1/100s为单位的flush dirty操作周期。多久查看一次有没有dirty需要被写入磁盘。

dirty_background_ratio

echo 10 >/proc/sys/vm/dirty_background_ratio

dirty达到内存的百分之多少时立即开始写入磁盘

dirty_ratio

echo 50 > /proc/sys/vm/dirty_ratio

dirty达到内存的百分之多少时认为磁盘快炸啦,此时阻塞进程,不让进程产生过多数据挤满RAM。

四、ARIA2

修改aria2.conf中的如下设置

enable-mmap=true
disk-cache=32Mfile-allocation=falloc

启用aria的磁盘缓存,与Linux系统的缓存构成双级缓存。

实测不开会恶化aria性能,下载速度一上来就打不开管理界面。在机械硬盘上面开512M甚至会导致长时间100%磁盘占用…搞不懂。
之前我设置的85M性能也好不到哪去。这次增加了Linux系统的缓存,因此减小这个。

使用falloc预分配,使得下载的大块文件在逻辑层面位于连续地址。至于物理层面。。。暂时还设置不着hhh。希望不要出现OS层面是连续操作,经过几层文件系统和Raid什么就变成随机写了hhhh,那可就太惨了。

总结与性能测试

懒,不贴top的截图了。下文测试均接千兆LAN口。双口指2台不同设备同时对不同文件进行操作。

经过设置:
FTP单口读取由930Mbps~960Mbps波动稳定到980Mbps+,基本上占满带宽。同时稳定性大幅提升。
FTP双口读取大约达到1200Mbps
Samba单口读取由400Mbps(50M/s)提升到500Mbps(63M/s),效果显著。
Samba双口读取大约是1000Mbps刚好是双倍单线程带宽(互不影响)

写入速度怎么搞都是20M/s,估计是U盘写入性能限制

奇怪的一点是:
使用ES文件浏览器+无线网络(5Ghz,433Mbps)读取时FTP基本能压满带宽(32M/s),SMB则只有(20M/s)。
使用有线连接(荣耀V20,USB3.0接口+网卡)时则和电脑测试结果没有区别。

测试过程中路由CPU占用如下:
vsftpd:13%(980Mbps读取时)
smbd:25% 。另外2用户操作时有2个进程占用不同的核心,但是一台电脑不能同时开2个复制任务,得等待前一个文件复制完成才能处理下一个。也就是说单机无法通过多线程突破500Mbps限制。暂未尝试SMB3.0协议。如图

基于Linux的NAS IO优化-以Padavan为例 [SAMBA+VSFTP+ARIA]相关推荐

  1. 基于SSD的存储IO优化解决方案

    2019独角兽企业重金招聘Python工程师标准>>> 基于SSD的存储IO优化解决方案 我们一起走过的10年,还是曾经的硬盘,一成不变的开机速度,让人无法忍受的操作体验.I/O瓶颈 ...

  2. linux 嵌入式 快照_基于Linux的嵌入式启动优化的研究

    基于Linux的嵌入式启动优化的研究 论文 开题分析 周报 启动 基于Linux嵌入式系统启动加速的研究 一. 所选课题的目的和意义 随着科学技术的蓬勃发展,计算机被更多的人使用,并与人类对额生活结合 ...

  3. 基于linux的nas系统下载,OpenMediaVault 5.3.9 发布,基于Debian Linux的NAS解决方案

    OpenMediaVault是基于Debian GNU/Linux的网络附加存储(NAS)解决方案.该项目的最新版本是5.3.9,项目将其简单地称为版本5. 经过漫长的开发阶段,很高兴宣布openme ...

  4. linux后台开发必知的io优化知识总结

    尊重原创版权: https://www.hanzhangsy.com/hot/105435.html 更多内容参考: https://www.hanzhangsy.com/ linux后台开发必知的i ...

  5. 基于linux服务器的性能分析与优化

    基于linux服务器的性能分析与优化 方面:硬件系统软件网络 现象:系统不稳定相应速度慢 web无法打开打开速度慢 方案:硬件故障更换硬件或升级硬件 系统问题修改系统参数和配置 软件问题修改和升级软件 ...

  6. linux pppoe优化性能,基于Linux内核模式的PPPoE优化与实现.pdf

    基于Linux内核模式的PPPoE优化与实现.pdf 第18卷第7期 电子设计工程 2010年7月 V01.18 No.7 Electronic Jul.2010 DesignEngineering ...

  7. 基于Linux的内存模拟型的字符IO设备驱动程序的设计,并实现线程间通信

    要求:基于Linux的内存模拟型的字符IO设备驱动程序的设计,并编写应用程序实现线程间的通信. 基于Linux的内存模拟型的字符IO设备驱动程序的设计 1 内存模拟型的字符IO设备驱动程序memDrv ...

  8. linux的每次IO大小控制,Linux优化之IO子系统监控与调优

    Linux优化之IO子系统 作为服务器主机来讲,最大的两个IO类型 : 1.磁盘IO 2.网络IO 这是我们调整最多的两个部分所在 磁盘IO是如何实现的 在内存调优中,一直在讲到为了加速性能,linu ...

  9. linux 网关 优化,基于Linux的家庭网关优化.pdf

    第 8卷 第 23期 2008年 12月 科 学 技 术 与 工 程 V01.8 No.23 Dec.2008 1671-1819(2008)23-6389-03 ScienceTechnologya ...

最新文章

  1. 深入解析Java AtomicInteger 原子类型
  2. unity mysql生成cexcel_【C#附源码】数据库文档生成工具支持(Excel+Html)
  3. ASP.NET CORE MVC 2.0 如何在Filter中使用依赖注入来读取AppSettings
  4. CodeForces - 1245A Good ol' Numbers Coloring (思维)
  5. Server(Iocp)的那些烦恼
  6. 2021最新对比学习(Contrastive Learning)在各大顶会上的经典必读论文解读
  7. 享誉全球的 Java 经典著作《Java核心技术》Java 17
  8. Java输入/输出流
  9. html网站计数器代码,如何在网站添加计数器代码
  10. 美团点评亮相台北国际创意节,诠释Food+全景生活营销新体验
  11. HDOJ-1060-Leftmost Digit(求n^n的最高位)
  12. gvim常用命令行大全
  13. 重磅福利!ICCV 2019全部论文合集共1075篇!会议信息全收录!
  14. JS基础-一个完美的递归函数
  15. python 爬取腾讯视频弹幕
  16. 使用rdbtools工具分析redis备份RDB文件
  17. 什么样的人可以担任项目经理?
  18. 决议要素_2006年决议-准备
  19. 用管理员权限打开vs2010并调试网页游戏辅助,使用WPE无法抓包的解决方法
  20. 1.6编程基础之一维数组 10大整数加法

热门文章

  1. 中国C型臂市场研究与未来预测报告(2022版)
  2. 苹果官网对xcode版本的要求
  3. 李弘毅机器学习笔记:第九章—Hello world of dee
  4. 【金融科技新篇章】彭博金融大模型BloombergGPT来啦!
  5. Parallels Desktop分享:文件夹共享技巧
  6. 微分先行PID控制器的实现
  7. 西雅图Oracle公寓租赁,西雅图Seattle租房攻略
  8. Android Studio 无法安装apk到小米手机问题解决
  9. 使用xig工具从schema生成schema实例
  10. java雪人程序_JAVA雪人小程序