群晖DS220J 利用SSD做虚拟内存优化
乱舞追风
2022年03月05日 16:30

群晖的ARM架构低端NAS性能一直非常差,在搭配机械硬盘使用时卡顿非常严重,这点在使用download station下载PT时最为明显。在帝都联通500M宽带下,使用x86的DS718+,PT下载速度为50MB/s,使用DS220J,下载速度仅为10MB/s,性能差距非常明显。为了提高DS220J的download station性能,我做了很多尝试和努力,虽然最终效果提升有限,但是从中还是学会了一些东西,记录下来和大家分享。

需要大家自备一块SSD,我使用的是老电脑上淘汰下来的SATA 256G SSD

1、这里首先补充介绍一个windows10下快速进入ssh的方法。

进入DSM的控制面板,打开ssh

DSM打开ssh

然后在windows下按win+r键,输入powershell,个人感觉这个比cmd更好用

Windows打开shell

ssh登录群晖DSM

ssh username@192.168.1.100 -p 22

其中ssh是命令的名称,username是在nas中的admin用户名,192.168.1.100是nas的IP,22是ssh的端口号。

输入回车后提示输入密码,这个密码就是登录nas所需的密码,输入后再次回车登录进入了nas。

为了获取到最大权限便于操作,建议输入sudo -i回车,输入账号密码后进入root权限。

至此,不用使用第三方软件,也可以很方便的登录nas的shell了。

建议大家对Linux的top, iostat, swap工具有初步了解,便于分析。前两者也可以使用群晖的性能监控代替。

2、分析卡顿原因

启用download station下载,然后使用top查看,注意kswapd0进程占用了大量的CPU

top

DS220J使用的是四核CPU,满载应该在4.0左右,看CPU小于4,45.3的id也有余力(idle)。主要消耗在wa也就是硬盘读写等待(iowait)。因此推测硬盘可能是瓶颈。

使用iostat -x 1查看硬盘读写状况

iostat -x 1

sdb是一块东芝6TB硬盘,其中写入速度11MB/s导致基本和PT下载速度持平,但是好几兆的读取是怎么回事?我在下载PT种子时特意选取了上传人数多,下载人数少的,看网速监控上传速度也只有几百KB/s。留意top是出现了kswap,可能是由于物理内存不足,频繁和虚拟内存交换,导致硬盘读写负荷增加。可以看到sdb的占用率已经接近100%,不堪重负了。

3、解决方案

既然机械硬盘的负荷不堪重负,导致download station下载速度下降,那么使用SSD应该可以减少硬盘的瓶颈。

手头上有一块256GB的SSD,直接安装到群晖上使用,这里可以直接选择将download station的暂存位置修改到SSD上,来降低磁盘瓶颈。

选择暂存位置

这里面存储空间1是SSD,选择确定后下载时就可以将数据临时保存在SSD上。由于SSD的容量一般有限,PT有保种需求,因此文件长期还是会保存在机械硬盘上。

切换到SSD后,下载速度会显著提高,大概能到25MB/s左右。但是这样仍然会存在问题:

首先,下载完毕后download station会自动将数据从SSD拷贝到HDD,拷贝的速率比较慢,这样总的下载时间仍然会比较慢。

其次,如果暂存目录和文件保存目录不在同一个存储空间,会造成两倍的下载容量使用。SSD空间容量不足需要经常删除download station中的任务来节省空间,不利于PT长期保种。

为此还需要其他解决方法。

既然虚拟内存swap会抢占机械硬盘资源,可以考虑将SWAP完全放在SSD上来降低机械硬盘的压力。

linux上的swap可以通过文件的方式实现。在SSD上创建一个共享文件夹SWAP,然后在ssh上通过命令创建swap

看下SSD所在的真实路径

看到存储空间1挂载到/volume1

进入到SWAP目录(需要预先创建SWAP共享文件夹)

创建swapfile

dd if=/dev/zero of=/volume1/SWAP/swapfile bs=1024 count=2097152

回车等待一段时间后,数据就创建好了,下述命令格式化为swap类型

mkswap /volume1/SWAP/swapfile

然后使用群晖的计划任务

选择出发的任务,用户自定义脚本

一定要选择root账号,保障权限,事件选择开机。任务名称可以随意填写,我写的swap

任务设置

swapon -p 1 /volume1/SWAP/swapfile

这里增加了一个参数-p 1来设置swap优先级

最终将这个脚本选中,点击应用。重启NAS

重启NAS后再次通过ssh登录

输入free -h

可以看到swap虚拟内存容量已经变为4GB,比之前默认的虚拟内存2GB变大了。

输入swapon -s

可以看到所有的虚拟内存都在SSD上使用,解放了机械硬盘的压力。

最终download station在下载热门种子时,暂存目录保存在机械硬盘上,速率也提高到了15MB/s~20MB/s,比没修改前好一点吧,目的达成,收工。

此外这里也记录一个download station中用于设置内存缓存大小的位置

在/var/packages/DownloadStation/etc/下,有一个settings.conf

vi修改文件

download_bt_cache_limit,说的是数据缓存多少后写入磁盘,默认为8。我尝试过修改为128,在套件中心内关闭download station在启动,进行测试会发现由于内存太少,缓存设置大后swap更加频繁,导致下载速度更低了。因此对于ARM机型这个值默认就好。

在DS718+中,我也尝试设置为128MB/s,虽然没有内存瓶颈,但是会使得一次性写入到硬盘的数据变多,硬盘在写入过程中卡住的时间变长,对下载性能提高有限。

以上就是我折腾群晖ARM机型虚拟内存的经历,祝大家玩的开心哟~