QNAP NAS使用在SSD的SWAP文件提升性能

摘要

通过在SSD上使用SWAP文件并禁用HDD上的SWAP分区,提高小内存容量的QNAP NAS的SWAP读写性能,减少CPU的I/O等待时间,提高系统性能。

关键词:QNAP、NAS、SWAP File、SSD

问题描述

在QNAP的小内存的小内存少磁盘插槽的NAS上启用大量占用内存的服务,物理内存占用过高时,SWAP分区占用会被系统频繁读写。由于HDD的物理特性,若在HDD上划分SWAP分区则SWAP分区读取性能较低,I/O等待大量占用CPU时间,使系统性能下降。

QNAP TS-212 P3是QNAP推出的一款入门级NAS,配备Realtek RTD1295处理器和板载1GB DDR4内存,支持2个3.5英寸SATA Ⅲ磁盘。

1. 只有1个HDD的情况

在TS-212 P3插槽1上装入一个HDD,并将系统安装在此HDD上。

此时系统在HDD上划分1个SWAP分区,并在系统所在卷创建SWAP文件,系统按照HDD的SWAP分区 → 系统卷的SWAP文件的顺序使用SWAP空间。

启用QuMagie后AI引擎占用大量内存,导致SWAP分区占用较高,HDD上的SWAP分区频繁被读写,I/O等待大量占用CPU时间,NAS频繁断开连接并长时间无法被访问。

图1.1 SWAP分区大量读写时I/O等待占用大量CPU时间
图1.2 SWAP空间在HDD上

2. 有1个SSD和1个HDD的情况

在TS-212 P3插槽1装入一个HDD,插槽2装入一个SSD,并将系统安装在SSD上。

此时系统在HDD上划分SWAP分区,并在系统所在卷创建SWAP文件,系统按照HDD的SWAP分区 → 系统所在卷的SWAP文件的顺序使用SWAP空间。
此时即使系统安装在SSD上,也会因为优先使用HDD的SWAP分区而无法利用SSD的读写优势提升系统性能。

启用QuMagie后AI引擎占用大量内存,导致SWAP分区占用较高,HDD上的SWAP分区频繁被读写,I/O等待大量占用CPU时间,NAS频繁断开连接并长时间无法被访问。

问题分析

查阅帮助文件,QNAP对交换分区做出以下解释:

默认情况下,QTS 预留大约 8 GB 空间(分布在不同的 HDD),在系统卷上预留 16 GB 用作交换空间。如果 NAS 装有两个 2.5 英寸 SSD,一个 M.2 SSD 或一个 PCIe SSD,QTS 会另外再创建约 8 GB 的交换空间(分布在不同的 SSD)。SSD 交换空间会比 HDD 交换空间优先使用,以提升系统性能。QTS 预留的交换空间量不得变更。在容量较小的硬盘或卷上,可能会预留较少的交换空间。

咨询QNAP技术支持,得到的回复是:

当前的design 是这样的:

  1. 一個 SSD 用完整磁區做系統 -> No SWAP (只有一個 SDD)
  2. 一個 SSD 用精簡磁區做系統 -> No SWAP (只有一個 SDD
  3. 兩個 SSD 用完整磁區做系統 -> SSD & Volum SWAP
  4. 兩個 SSD 用精簡磁區做系統 -> SSD & Volum SWAP

所以如果只有單一SSD做成磁碟區,是沒有swap。请知悉。谢谢!

总结为表格:

表1.1 装入磁盘与SWAP的对应关系
磁盘1磁盘2M.2插槽PCIe插槽SSD SWAPHDD SWAP系统卷SWAP
HDD×××08GB16GB
HDDHDD××08GB16GB
SSD×--8GB016GB
SSDHDD××08GB16GB
SSDSSD--8GB016GB
--SSD-8GB0/8GB16GB
---SSD8GB0/8GB16GB

表中“×”表示不装入磁盘,“-”表示可装入任意类型磁盘。

TS-212 P3没有M.2插槽或PCIe插槽,无擦装入M.2 SSD或PCIe SSD。且它只有2个磁盘插槽,若将2个插槽都装入SSD,储存空间将无法满足我的使用需求。

需要对系统进行修改,使系统在SSD上分配SWAP分区或禁用HDD上的SWAP分区。

解决方法

在通常情况下,SSD的可用空间可能已经被分区并使用,没有足够的未分配空间划分SWAP分区,因此使用一种更通用的方式:SWAP File。1

详细过程

1. SSH连接到NAS

  1. 打开控制台 → 网络&文件服务 → Telnet/SSH。

  2. 勾选允许SSH连接并设置端口号 (默认为22)。

  3. 点击应用保存设置。

    图4.1 允许SSH连接

  4. 通过SSH连接NAS,登录管理员账户。(这里使用Xshell 7演示)
    a. 进入连接Connection。在协议Protocol中选择SSH,主机Host (涂绿色处)填入NAS的IP地址,端口号Port Number (涂红色处)填入在NAS控制台设置的SSH的端口号。名称Name处可以随意填写。
    图4.2 设置SSH连接
    b. 进入授权Authentication。在方法Method中选择Password,用户名User Name (涂绿色处)填入NAS的管理员账户名,密码Password (涂红色处)填入NAS的管理员账户密码。
    图4.3 设置SSH登录账号密码
    c. 点击连接Connect连接至NAS,控制台出现管理主菜单。输入Q返回至Shell环境。
    图4.4 管理主菜单
    d. 输入Y确认。
    图4.5 确认退出界面
    控制台出现[~] #
    图4.6 成功进入Shell

2. 禁用HDD上的SWAP

  1. 查看现在NAS上有哪些SWAP。输入命令

    [~] # cat /proc/swaps
    

    返回现在的SWAP有

    Filename								Type		Size 		Used 	Priority
    /dev/md256								partition 	530108 		343448 	-1
    /dev/md322								partition 	7235132 	138184 	-2
    /share/CACHEDEV1_DATA/.swap/qnap_swap	file		16777212	0		-3
    

    即此时我有2个SWAP分区:/dev/md256/dev/md322,还有1个SWAP文件:/share/CACHEDEV1_DATA/.swap/qnap_swap。返回的结果因人而异。

    由于已知2个SWAP分区是分配在HDD上的,因此禁用这两个SWAP分区。

  2. 禁用SWAP分区。输入命令

    [~] # swapoff /dev/md256
    [~] # swapoff /dev/md322
    

    此时2个在HDD上的SWAP分区被禁用。

若此时系统不是安装在SSD上,则不会有SSD上的系统卷SWAP文件,需要手动创建。

3. 创建SWAP文件

  1. 浏览器访问NAS,通过QNAP File Station在SSD的卷上创建共享文件夹SWAP

    SWAP共享文件夹的名字可以用任意名字任意替换。
    图4.7 创建SWAP文件夹

  2. 回到Xshell,切换目录至刚刚创建的SWAP文件夹 (或是你自己命名的其他名字)。输入命令

    [~] # cd /share/SWAP
    

    若创建的共享文件夹不叫SWAP,则将命令中的SWAP替换成你创建的文件夹的名字。

  3. 在SWAP文件夹中创建一个名叫swapfile的文件。输入命令

    [/share/SWAP] # dd if=/dev/zero of=swapfile bs=1048576 count=16384
    

    该命令将在SWAP文件夹中创建一个连续的、没有碎片的文件。虽然这在SSD上无关紧要,但如果希望在HDD上创建SWAP File,这是很有必要的。

    可以修改命令中bscount后面的数字调整文件的大小:bs是块大小,单位为字节;count是块的个数。此处我创建了一个块大小为1MB、共16GB的文件。

    根据硬盘的写入性能和创建文件的大小,执行命令后需要等待一段时间,当控制台返回类似以下文字时说明文件已经创建。

    16384+0 records in
    16384+0 records out
    17179869184 bytes (16.0GB) copied, 109.460713 seconds, 149.7MB/s
    
  4. 检查是否成功创建文件,输入命令

    [/share/SWAP] # ls -l
    

    若返回类似以下文字时说明文件创建成功。

    total 16777228
    drwxr-xr-x 2 admin administratiors 4096 2021-01-23 23:12 @Recently-Snapshot/
    drwxrwxrwx 2 admin administrators 4096 2021-01-23 23:12 @Recycle/
    -rw-r—r—1 admin administrators 17179869184 2021-01-23 23:36 swapfile
    
  5. 设置文件权限,确保不会有人弄坏这个文件。输入命令

    [/share/SWAP] # chmod 600 swapfile
    

    最好将SWAP文件夹在网络中隐藏,确保没有人能弄坏这个文件。

    用浏览器访问NAS,打开控制台 → 权限 → 共享文件夹 → 共享文件夹,找到SWAP文件夹,点击编辑属性内容,勾选隐藏网络磁盘
    图4.8 隐藏网络硬盘

  6. swapfile文件制成SWAP文件。输入命令

    [/share/SWAP] # mkswap swapfile
    

    应返回类似以下文字

    Setting up swapspace version 1, size = 17179865 kB
    
  7. 令NAS使用这个SWAP文件。输入命令

    [/share/SWAP] # swapon swapfile
    

    此时NAS应已经开始使用这个SWAP File。

    cat命令确认是否成功,输入命令

    [/share/SWAP] # cat /proc/swaps
    

    若返回swapfile则说明成功。

    Filename								Type	Size 		Used 	Priority
    /share/CACHEDEV1_DATA/.swap/qnap_swap	file	16777212	0		-1
    /share/CACHEDEV1_DATA/SWAP/swapfile 	file	16777212	0		-2
    

    此时成功在SSD上创建SWAP文件并使用。

但QNAP NAS每次重启后都会使用系统默认的SWAP设置,因此需要令NAS每次开机时自动执行上述命令。2

4. 设置开机自动执行

  1. 用浏览器访问NAS,打开控制台 → 系统 → 硬件,勾选启动时运行用户定义的进程。点击应用保存设置。
    图4.9 启动时运行用户定义进程

  2. 回到Xshell,编辑autorun.sh文件,输入命令

    [/share/SWAP] # cd /share/CACHEDEV1_DATA/.system/autorun
    [/share/CACHEDEV1_DATA/.system/sutorun] # vim autorun.sh
    

    其中CACHEDEV1_DATA是系统卷名称,名称因人而异,若名称不同需替换。

    进入vim界面后输入I进入INSERT模式,在第一行下方输入以下文字

    swapoff /dev/md256
    swapoff /dev/md322
    mkswap /share/SWAP/swapfile
    swapon /share/SWAP/swapfile
    

    图4.10 修改autorun.sh文件
    按下esc键退出INSERT模式,输入以下命令保存文件并退出vim

    :wq
    
  3. 回到浏览器,点击查看autorun.sh查看是否保存成功。
    图4.11 确认修改
    此处显示内容与vim中编辑的一致,则修改成功。

  4. 重启,完成修改。

    此时NAS会自动禁用HDD的SWAP分区,并使用刚刚设置的SWAP File。

注意事项

由于禁用了SWAP分区,只使用在一个卷上的SWAP File,可能会导致正在使用SWAP File所在的卷无法被卸载。若出现系统文件不干净等需要检查文件系统的情况,SWAP File所在的卷将无法被卸载,因此无法完成文件系统检查。由此可能会导致NAS没有响应,无法连接等情况。

若出现需要卸载SWAP File所在卷的情况,需要先将autorun.sh中输入的

swapoff /dev/md256
swapoff /dev/md322
mkswap /share/SWAP/swapfile
swapon /share/SWAP/swapfile

注释掉。即即进入vim中,在该4行文字前插入#

#swapoff /dev/md256
#swapoff /dev/md322
#mkswap /share/SWAP/swapfile
#swapon /share/SWAP/swapfile

然后重启NAS,此时NAS会使用系统默认策略创建的SWAP分区,然后再进行需要卸载卷的操作。


  1. How to add SWAP Partition (on SSD) ↩︎

  2. SCRIPT create-autorun.sh ↩︎

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值