最新のラズベリーパイでNASサーバーを作り、通信速度・メモリ負荷を確認しました。
ラズパイ+外付けHDD(SSD)でサーバーの自作を検討している方に対して、満足なスペックを出すためのポイントを紹介します。
ラズパイのサーバーを性能比較!NASの速度・負荷を確認してみた
最新のラズベリーパイ4は「USB3.0」「Gbit Ethernet(1Gbps)」のインターフェースが追加されており、ストレージ・LAN通信での高速化が見込めます。
サーバーとしてのスペック向上に何処まで繋がるのか、今回はラズパイ+外付けHDDでNASサーバーを自作して確認してみました。
サーバーの性能にはネットワークの通信速度が一番重要
今回の結論としてはラズパイ4からスペックアップした有線LANのIFである「Gbit Ethernet(1Gbps)」が一番速度に影響しました。
従来のラズベリーパイ3B+では有線LANはUSB2.0のIF経由で動作していたので最大300Mbpsと速度が制限されています。
しかし今回のRaspberry Pi 4 model Bは「Gbit Ethernet(1Gbps)」にスペックアップされています。
有線LANはギガの通信帯域がありますので、特にReadの一部では約2~3倍以上の通信速度を出すことができました。
ネットワークの通信帯域(300Mbps⇒1Gbps)の性能アップがそのまま通信速度に出た結果となりました。
LANのネットワークの通信速度がNAS含めてサーバーには一番重要だった旨を一から説明していきます。
ラズパイ4のGbitEtherとUSB3.0をNASサーバーでベンチマーク
細かい試験方法・設定方法は後述しますが、ベンチマークした結果の動画が下記となります。
有線LANのIFである「Gbit Ethernet(1Gbps)」により大きくNASサーバとして性能向上していることがわかります
USB3.0に関しては今回のベンチマークでは大きな差は出てきませんでした。
ラズベリーパイ4のサーバーとしての性能・スペック
「Raspberry Pi 4 model B」と前世代の「Raspberry Pi 3 Model B+」を比較すると下記の性能・スペックになります。
Raspberry Pi 4 model B | Raspberry Pi 3 Model B+ | |
SOC | Broadcom BCM2711 | Broadcom BCM2837B0 |
ARMコア | Cortex-A72 64bit (Quad-Core) |
Cortex-A53 64bit (Quad-Core) |
CPUクロック | 1.5GHz | 1.4GHz |
RAM | LPDDR4 4GB(1GB,2GB) |
LPDDR2 1GB |
USB | USB3.0 x 2 + USB2.0 x 2 | USB2.0 x 4 |
Ethernet | Gbit Ethernet (1Gbps) |
Gbit Ethernet over USB 2.0(Max 300Mbps) |
HDMI | micro HDMI x 2 | HDMI x 1 |
電源 | USB TypeC(5V_3A) | USB MicroB(5V_2.5A) |
先ほど述べた「USB3.0」「Gbit Ethernet」箇所もですが、メモリも「LPDDR4 4GB」と速度・容量ともに向上したのでNASサーバとして影響してくるのか確認しました。
ラズパイ4+外付けHDD(SSD)でNASサーバーを自作
ラズパイ4+外付けHDDでNASサーバーを簡単に自作することができます。
自宅のPC,スマートフォン間でのファイルのやり取りが非常に楽になるためラズパイのおススメの使い方です。
今回筆者は外付けHDDの3TBを使いましたが、「外付けSSD」「大きめな容量のUSBメモリ」でも可能です。
ラズベリーパイ(raspberry pi)と外付けHDDでファイル共有サーバーが作れます。
また今回は有線LANで接続しましたが、もちろん無線で接続することも可能です。ぜひ検討中の方は自作してみてください。
ラズパイとNASで接続をする
ラズパイをNAS化している記事は既にネット上で多くの記事がありますので、今回は簡単に紹介させてもらいます。
今回ラズパイ+外付けHDDをNASサーバー化する上で一番参考にさせてもらったのは下記Qiita記事です。@rkonno様にはこの場を借りて御礼申し上げます
RaspberryPi2でMacとWindows両対応のNASを構築する
ラズパイ4に外付けHDDをマウントする
まずはラズベリーパイにUSBで外付けHDDを接続してマウントします。
自動でマウントする方法もありますが、今回はテストということで一旦下記コマンドを打って外付けHDDを接続しました
ラズパイでwindowsのファイル読み書きするためNFTS-3Gをインストール
筆者は外付けHDDにWindowsでファイルを既に保存しておりフォーマットしたくなかったため、「NTFS-3G」をインストールします。
「NTFS」のファイル形式はラズパイでの初期設定では読み込めないため下記コマンドを打つ必要があります
ラズパイにsambaをインストールする
ラズパイをNASサーバーにする方法は沢山あるのですが、今回は「samba」というソフトウェアを入れて対応します
この「samba」を入れることでラズパイでマウントした外付けHDDをNASサーバにでき、他のデバイスから接続できるようになります。
インストール後に下記コマンドで「smb.conf」のファイルを編集し、sambaの設定を行いました
1 2 3 4 5 6 7 |
[pi] comment = RaspberryPi4によるNAS path= /mnt/hdd/raspberrypi read only = no guest ok = yes force user = pi unix extensions = no |
windowsからラズパイ+外付けHDDにアクセスできるかテスト
これまでの手順ででラズパイをNAS接続できましたので、WindowsのPCからラズパイにアクセスできるか確認していきます。
ラズパイ視点での外付けHDDは普通にマウントした位置で見えます。
またWindowsのPCからはエクスプローラーを開いて「\\IPアドレス\pi」でラズパイ+外付けHDDにアクセスできるようになりました。
Raspberry pi 4のNASの速度を測定する
Raspberry Pi 4 model B+外付けHDDをNASサーバーにできましたので、ベンチマークをできる環境を整えていきます。
NASサーバーのベンチマークにはCrystalDiskMark
今回ベンチマークには汎用的に使われているソフトの「CrystalDiskMark」を使用します。
サーバーの速度だけでなく、PC内のフォルダのアクセス速度も確認できますので非常に便利なソフトです。(ダウンロード先はこちらから)
WindowsのPC視点でラズパイ+外付けHDDへの通信速度を指標にしてベンチマークを行っています
ラズパイ4のギガビットイーサネットの性能を確認
「ラズパイ4BのGbitEther(1Gbps)」と「ラズパイ3B+のGbitEther over USB2.0(300Mbps)」の差を確認しました。
(※既に冒頭の動画で説明した内容です)
全体的にラズパイ4Bの方が速度が速く、特にシーケンシャルのReadの一部では約2倍~3倍の速度を出すことができています
ラズパイ3B+はGbitEtherで動いていますがUSB2.0上で動いており速度が制限(Max 300Mbps)されています。
それに比べてラズパイ4BはGbitEther(1Gbps)がサーバーとしての性能で発揮でき、上記結果になったと思われます。
ラズパイのUSB3.0接続でサーバーとして性能向上するか確認
ラズパイ4からUSB3.0接続が可能になりましたので、USB3.0で外付けHDDと接続したらNASサーバーとして性能向上するか確認してみました。
ラズパイのUSBの速度を3.0と2.0で比較する
まずはサーバーとしてではなく、単純にラズパイ4+外付けHDDの「USB3.0」「USB2.0」アクセス速度を確認しました
hdparmをラズパイにインストールしてUSBの速度を測定します
そしてUSB3.0、USB2.0 のどちらで接続されているか、また読み込み速度を下記コマンドで確認しました
ラズパイ4(USB2.0)の速度
ラズパイ4(USB2.0)で外付けHDDと接続した場合は
USB2.0(480Mbps)のストレージとして認識して、34.54MB/sの読み込み速度が出ていました。
ラズパイ4(USB3.0)の速度
またラズパイ4(USB3.0)で外付けHDDと接続した場合は
USB3.0(5.0Gbps)のストレージとして認識して、190.96MB/sの読み込み速度が出ていました。
USB2.0の速度と比べるとUSB3.0では約5倍~6倍の速度となっていました。
ラズパイ4のUSB3.0がNASサーバーとして有効活用できるのか確認
ラズパイ4のUSB3.0の速度がNASサーバーにも影響してくるのか確認してみました。
(USB2.0と比べて約5~6倍の読み込み速度が出るならば、NASサーバーとしても5~6倍の性能が出るのか?といった目論見です)
(※既に冒頭の動画で説明した内容です)
結果は残念ながら、速度が速くなったUSB3.0を使ってもサーバーとしての性能には影響ありませんでした。
やはりサーバーとしてはネットワーク速度が一番重要で、今回のベンチマークでもGbitEtherの箇所で既ににボトルネックとなっていそうです。
端末(デバイス)のストレージ側で頑張って速度を上げても性能向上にはなかなか結び付かない印象を持ちました
ラズパイのメモリ4GBがNASサーバーで有効活用されているか確認
Raspberry Pi 4 model Bにはメモリ4GBが搭載されています。今回のサーバーとしては4GBの何処まで使われているか確認します
ラズパイ4のメモリ速度はLPDDR4-2400
ラズベリーパイ4のメモリは容量も4GBと増えましたが、メモリ速度も上がっています。LPDDR4-2400です。
ラズベリーパイの公式HPにも記載がありました。(リンク先はこちらから)
※ラズパイ3B+のメモリのLPDDR2の実速度は把握してませんが、確かLPDDR2は規格上最大で1066です
そのため単純比較で約2倍以上のメモリ速度になっていると思われます
ベンチマークではラズパイ4のメモリ4GBも使われていない?
ベンチマーク中に下記コマンドをpythonに組み込み、メモリ使用率をプロットして確認したのですが、
ベンチマーク前のメモリ使用率の896MBから全く変わりませんでした。
そのため表面上で見えるメモリ使用率としてはメモリ4GBが恩恵があったかというと微妙な結果となりました。
ラズパイ4のメモリの使用率をもう少し詳細に見てみる
今回のベンチマークの「CrystalDiskMark」はあくまでストレージにRead/Writeしているだけですので、結果は当たり前かもしれません。
本当にそうなのか、メモリの使用率もう少し細かく下記コマンドで調べてみました。
詳細に見るとベンチマーク前と中でそれなりに動きはありました。
表面上では見えませんが、ファイルアクセスのキャッシュとしてメモリが十分に使われていそうです。
ベンチマーク前と比べてキャッシュの容量が約1GB割り当てられていました。(MemFreeが約1GB減っている)
メモリ容量が大きくなった分はキャッシュとして使われ、それなりにラズパイ4Bの恩恵は受けていそうな感触でした。
またメモリ使用率を調査する上で非常に参考にさせていただいたのが下記記事です。@enakai00様にはこの場を借りて御礼申し上げます。
ラズパイのメモリ使用率をリアルタイムでプロットするPythonプログラム
今回のテストで使ったPythonのプログラムを下記に残しておきます。
プログラム内容としては下記記事でラズパイCPU温度情報をリアルタイムでプロットしたプログラムを修正したものです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
#!/usr/bin/env python # -*- coding: utf-8 -*- import itertools import math import numpy as np from matplotlib import pyplot as plt from matplotlib import animation from subprocess import getoutput def _update(frame, x, y): """グラフを更新するための関数""" # 現在のグラフを消去する plt.cla() # データを更新 (追加) する x.append(frame) # メモリの使用量を取得する temp = getoutput('vcgencmd get_mem arm') temp2 = temp.split('=') Cpumem = temp2[1].split("M") y.append(float(Cpumem[0])) # 折れ線グラフを再描画する plt.plot(x, y) # グラフのタイトルにメモリの使用量を表示する plt.title('CPUmem = '+ str(y[-1])) # グラフにメモリ1GBで補助線(赤点線)を引く p = plt.plot([0, x[-1]],[1024, 1024], "red", linestyle='dashed') # グラフの縦軸_メモリの範囲を指定する plt.ylim(0,4000) def main(): # 描画領域 fig = plt.figure(figsize=(10, 6)) # 描画するデータ x = [] y = [] params = { 'fig': fig, 'func': _update, # グラフを更新する関数 'fargs': (x, y), # 関数の引数 (フレーム番号を除く) 'interval': 1000, # 更新間隔 (ミリ秒) 'frames': itertools.count(0, 0.1), # フレーム番号を無限に生成するイテレータ } anime = animation.FuncAnimation(**params) # グラフを表示する plt.show() if __name__ == '__main__': main() |
まとめ
サーバーとしての性能も向上したラズベリーパイ(raspberry pi)と外付けHDDでNASを作って、色々とベンチマーク出来ました。
NASを自作するのは実用面でも勉強という意味でも非常に良いラズパイのネタだと思います。
検討中の方はぜひ実施してみてください
コメント