群暉DS220J 利用SSD做虛擬內(nèi)存優(yōu)化
群暉的ARM架構(gòu)低端NAS性能一直非常差,在搭配機(jī)械硬盤使用時(shí)卡頓非常嚴(yán)重,這點(diǎn)在使用download station下載PT時(shí)最為明顯。在帝都聯(lián)通500M寬帶下,使用x86的DS718+,PT下載速度為50MB/s,使用DS220J,下載速度僅為10MB/s,性能差距非常明顯。為了提高DS220J的download station性能,我做了很多嘗試和努力,雖然最終效果提升有限,但是從中還是學(xué)會(huì)了一些東西,記錄下來(lái)和大家分享。
需要大家自備一塊SSD,我使用的是老電腦上淘汰下來(lái)的SATA 256G SSD
1、這里首先補(bǔ)充介紹一個(gè)windows10下快速進(jìn)入ssh的方法。
進(jìn)入DSM的控制面板,打開(kāi)ssh

然后在windows下按win+r鍵,輸入powershell,個(gè)人感覺(jué)這個(gè)比cmd更好用


ssh username@192.168.1.100 -p 22
其中ssh是命令的名稱,username是在nas中的admin用戶名,192.168.1.100是nas的IP,22是ssh的端口號(hào)。
輸入回車后提示輸入密碼,這個(gè)密碼就是登錄nas所需的密碼,輸入后再次回車登錄進(jìn)入了nas。
為了獲取到最大權(quán)限便于操作,建議輸入sudo -i回車,輸入賬號(hào)密碼后進(jìn)入root權(quán)限。
至此,不用使用第三方軟件,也可以很方便的登錄nas的shell了。
建議大家對(duì)Linux的top, iostat, swap工具有初步了解,便于分析。前兩者也可以使用群暉的性能監(jiān)控代替。
2、分析卡頓原因
啟用download station下載,然后使用top查看,注意kswapd0進(jìn)程占用了大量的CPU

DS220J使用的是四核CPU,滿載應(yīng)該在4.0左右,看CPU小于4,45.3的id也有余力(idle)。主要消耗在wa也就是硬盤讀寫等待(iowait)。因此推測(cè)硬盤可能是瓶頸。
使用iostat -x 1查看硬盤讀寫狀況

sdb是一塊東芝6TB硬盤,其中寫入速度11MB/s導(dǎo)致基本和PT下載速度持平,但是好幾兆的讀取是怎么回事?我在下載PT種子時(shí)特意選取了上傳人數(shù)多,下載人數(shù)少的,看網(wǎng)速監(jiān)控上傳速度也只有幾百KB/s。留意top是出現(xiàn)了kswap,可能是由于物理內(nèi)存不足,頻繁和虛擬內(nèi)存交換,導(dǎo)致硬盤讀寫負(fù)荷增加。可以看到sdb的占用率已經(jīng)接近100%,不堪重負(fù)了。
3、解決方案
既然機(jī)械硬盤的負(fù)荷不堪重負(fù),導(dǎo)致download station下載速度下降,那么使用SSD應(yīng)該可以減少硬盤的瓶頸。
手頭上有一塊256GB的SSD,直接安裝到群暉上使用,這里可以直接選擇將download station的暫存位置修改到SSD上,來(lái)降低磁盤瓶頸。

這里面存儲(chǔ)空間1是SSD,選擇確定后下載時(shí)就可以將數(shù)據(jù)臨時(shí)保存在SSD上。由于SSD的容量一般有限,PT有保種需求,因此文件長(zhǎng)期還是會(huì)保存在機(jī)械硬盤上。
切換到SSD后,下載速度會(huì)顯著提高,大概能到25MB/s左右。但是這樣仍然會(huì)存在問(wèn)題:
首先,下載完畢后download station會(huì)自動(dòng)將數(shù)據(jù)從SSD拷貝到HDD,拷貝的速率比較慢,這樣總的下載時(shí)間仍然會(huì)比較慢。
其次,如果暫存目錄和文件保存目錄不在同一個(gè)存儲(chǔ)空間,會(huì)造成兩倍的下載容量使用。SSD空間容量不足需要經(jīng)常刪除download station中的任務(wù)來(lái)節(jié)省空間,不利于PT長(zhǎng)期保種。
為此還需要其他解決方法。
既然虛擬內(nèi)存swap會(huì)搶占機(jī)械硬盤資源,可以考慮將SWAP完全放在SSD上來(lái)降低機(jī)械硬盤的壓力。
linux上的swap可以通過(guò)文件的方式實(shí)現(xiàn)。在SSD上創(chuàng)建一個(gè)共享文件夾SWAP,然后在ssh上通過(guò)命令創(chuàng)建swap
看下SSD所在的真實(shí)路徑

看到存儲(chǔ)空間1掛載到/volume1
進(jìn)入到SWAP目錄(需要預(yù)先創(chuàng)建SWAP共享文件夾)

創(chuàng)建swapfile
dd if=/dev/zero of=/volume1/SWAP/swapfile bs=1024 count=2097152

回車等待一段時(shí)間后,數(shù)據(jù)就創(chuàng)建好了,下述命令格式化為swap類型
mkswap /volume1/SWAP/swapfile
然后使用群暉的計(jì)劃任務(wù)

選擇出發(fā)的任務(wù),用戶自定義腳本

一定要選擇root賬號(hào),保障權(quán)限,事件選擇開(kāi)機(jī)。任務(wù)名稱可以隨意填寫,我寫的swap
任務(wù)設(shè)置

swapon -p 1 /volume1/SWAP/swapfile
這里增加了一個(gè)參數(shù)-p 1來(lái)設(shè)置swap優(yōu)先級(jí)

最終將這個(gè)腳本選中,點(diǎn)擊應(yīng)用。重啟NAS
重啟NAS后再次通過(guò)ssh登錄
輸入free -h

可以看到swap虛擬內(nèi)存容量已經(jīng)變?yōu)?GB,比之前默認(rèn)的虛擬內(nèi)存2GB變大了。
輸入swapon -s

可以看到所有的虛擬內(nèi)存都在SSD上使用,解放了機(jī)械硬盤的壓力。
最終download station在下載熱門種子時(shí),暫存目錄保存在機(jī)械硬盤上,速率也提高到了15MB/s~20MB/s,比沒(méi)修改前好一點(diǎn)吧,目的達(dá)成,收工。
此外這里也記錄一個(gè)download station中用于設(shè)置內(nèi)存緩存大小的位置

在/var/packages/DownloadStation/etc/下,有一個(gè)settings.conf
vi修改文件

download_bt_cache_limit,說(shuō)的是數(shù)據(jù)緩存多少后寫入磁盤,默認(rèn)為8。我嘗試過(guò)修改為128,在套件中心內(nèi)關(guān)閉download station在啟動(dòng),進(jìn)行測(cè)試會(huì)發(fā)現(xiàn)由于內(nèi)存太少,緩存設(shè)置大后swap更加頻繁,導(dǎo)致下載速度更低了。因此對(duì)于ARM機(jī)型這個(gè)值默認(rèn)就好。
在DS718+中,我也嘗試設(shè)置為128MB/s,雖然沒(méi)有內(nèi)存瓶頸,但是會(huì)使得一次性寫入到硬盤的數(shù)據(jù)變多,硬盤在寫入過(guò)程中卡住的時(shí)間變長(zhǎng),對(duì)下載性能提高有限。
以上就是我折騰群暉ARM機(jī)型虛擬內(nèi)存的經(jīng)歷,祝大家玩的開(kāi)心喲~