如何在一台无nvme缓存盘运行truenas scale尽量跑满万兆
去年暑假开始时,站长的dl20G9(没错就是我写文章时用的那台)寄了。趁着这个机会,站长把NAS换成了一直以来非常想拥有的服务器————HP microserver gen8。但是这台机子有个致命缺陷,它只有一个pcie接口,插了万兆网卡后不能插NVME协议的缓存盘。这就..................很蛋疼了,但我不想妥协,便购买了一个INTEL S4500作为缓存使用。但是我犯了第一个错误,将它插在SATA5上,也就是光驱位。这个接口的速率只有SATA2.0,完全不能发挥出SSD的实力。所以我又购置了个转接架,将它插在SATA1上。这里提醒一下,microserver gen8只有SATA1和SATA2是SATA3.0速率的,其余均为SATA2.0速率的,如果对读写性能有要求,请插到SATA1或2。但是即使我改变了硬盘接口,读写速率仍然不理想无法跑满SATA3.0速率。所以就开始尝试参考https://www.chiphell.com/thread-2582831-1-1.html这个帖子去硬改我的服务器。但不知道是什么原因,拆分一直失败。但我无法承担带PLX芯片拆分卡的价钱,随后便去研究ZFS相关的资料,发现truenas是会将内存作为ARC缓存使用,但是默认分配大小只有百分之十。但我的NAS只做文件共享,所以我16G内存可以直接分配了12G给它做ARC。之前一直困扰我为何更换硬盘位单读写速度没提升的问题也找到了原因,truenas里的缓存是L2ARC并不是拿来暂存网络传输过来的数据,而是专门记录写入操作,能把零碎的同步写入请求聚合起来,变成大块顺序写入,从而达到大幅提升写入响应速度的效果。要实现暂存数据,我们应该是在存储池中选择选择将SSD分配为SLOG而不是L2ARC。但是直接选择SLOG不会有提升反而会降速,这是因为truenas默认开启同步写入,数据写进SSD后要再写入到HDD才会认为传输任务完成,具体反映到用户的感受就是传输速度很慢。要解决这个问题,激进的解决方法便是禁用同步写入,在数据写入缓存后便提示传输完成。但是在写入过程中突然断电或者系统崩溃,最后几秒正在写入的数据有可能会丢失。不过对于可以重新下载的“非关键数据”,这个风险通常可以接受。但如果是重要的数据库文件,就不建议这么做了。所以如何选择,就视存储池和应用场景而定。我是希望能够尽可能贴近万兆的传输速度的,所以我的操作会较为极端
最后在这分享一下怎么强制修改ARC的大小吧。
1、登录管理界面:打开浏览器,进入你的 TrueNAS SCALE 管理页面。
2、找到脚本设置:点击左侧菜单栏的 系统设置(System Settings) > 高级(Advanced)。在页面右侧找到 初始化/关闭脚本(Init/Shutdown Scripts),点击 添加(Add)创建脚本。
在创建脚本的选项中参考一下方式来填
描述(Description):随便填一个,比如 Increase ARC Max。
脚本类型:选择 命令。
命令:在这里输入你想设置的任务,比如说我在这里将ARC最大设置成12G,则是:
echo 12884901888 > /sys/module/zfs/parameters/zfs_arc_max
何时执行:选择 预初始化,确保在系统服务启动前就完成设置。
同样,你可以参考以上步骤与你的实际情况来强行设置ARC最小容量,这样你无论NAS负载多高ARC容量都有最低保证。
3、保存并重启:点击 保存(Save)。之后,你需要重启服务器,这个设置才会正式生效。
好了,感谢您的耐心观看,希望这能帮到您同时欢迎在评论区留下宝贵的评论,谢谢。
