Raspberry pi 4でSSD起動でPostgresql安定動作させるメモ（ハード部分が主体）

# 始めに
Raspberry piも5が出て、SSDを装着できるようになります。どれだけ性能が上がるかわくわくして待っておりますが、その前にRaspberry pi4の性能を押さえておこうと思いました。USB 3.0にSSDを接続すればデータベースの性能を測定できるであろうと思い、接続しました。普通にubuntu server 22.04が立ち上がりましたが、何か不安定。調べるといろいろと出てきました。行った施策のうち、効果があった３つを紹介します。

# 施策１　電源の強化
ラズパイ４となると電源も３Aを必要としますが、高性能SSDを接続すると、それだけで電源不足になります。今USB-Cの急速充電用として20W(5V-4A)、30W(5V-6A)が2000円前後で売られているので、それを使用すると安心です。私は余裕を見て30Wのものを選択しましたが、施策２でUSB側の電源は別に用意するので、20Wでも十分かもしれません。

[USB-C充電器30W](https://www.yodobashi.com/product/100000001006884172/)

 # 施策２ USBセルフパワーハブを噛ます
バスパワーでSSDを動作させると、時々不安定になります。よくよく調べると、ラズパイ４のUSBのバスパワーは（たとえ施策１をしていても）USBへの電力を供給しきれなく、電力不足に陥り電圧降下を起こすとのこと。ラズパイ４の電源入植が5.0Vの場合、4.5V程度になってしまう。これでは時々電力不足になって不安定になります。なので、セルフパワーのハブを噛ませることでSSDへの電力供給が追い付き、安定動作するようになりました。以下、私が使ったものを貼っておきます。

[USB3.0ハブ 電源付き JESWO USB ハブ 4ポート USB 3.0 ハブ セルフパワー/バスパワー 5Gbps高速データ伝送](https://www.amazon.co.jp/JESWO-5Gbps%E9%AB%98%E9%80%9F%E3%83%87%E3%83%BC%E3%82%BF%E4%BC%9D%E9%80%81-Android%E3%80%81Windows%E3%80%81MacBook-Pro%E3%80%81Mac%E3%80%81Surface-Pro%E7%AD%89%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%A8%E3%83%8E%E3%83%BC%E3%83%88PC%E5%AF%BE%E5%BF%9C/dp/B09XHGBVT2/ref=sr_1_4_sspa?adgrpid=56103730794&hvadid=651186899902&hvdev=c&hvlocphy=1009306&hvnetw=g&hvqmt=b&hvrand=11718864578560137164&hvtargid=kwd-335755611298&hydadcr=9356_13660209&jp-ad-ap=0&keywords=%E3%82%BB%E3%83%AB%E3%83%95%E3%83%91%E3%83%AF%E3%83%BC+usb+%E3%83%8F%E3%83%96&qid=1699297532&sr=8-4-spons&sp_csd=d2lkZ2V0TmFtZT1zcF9hdGY&psc=1)

 # 施策３　M.2 SSD - USB変換器のファームウェア更新
安定動作するようになったものの、sar -d -p 1コマンドでの確認でI/O性能が200MB/s強しか出ません。ラズパイ4のUSB3.0の性能は300MB/sくらいの実力があると聞いているので、当初はUSBハブのせいで200MB/sに制限がかかっている（UASPがオフされている）と考えていたのですが、lsusb -tで調べるとuasドライバが使用されています。調べていくと、なんと、SSD-USB変換器にファームがあって、さらに更新できるとは思いもよりませんでした。よく調べると、SSDアクセス性能に影響が大きく、味付けがチップやメーカによって違うということがわかりました。２つほど更新して効果があったものを紹介します。ファーム書き換えなので、USB変換器がダメになるリスクがあることを承知の上、自己責任でお願いいたします。

### 1. Realtek RTL9210 chipset 
SSDを接続して、lsusbコマンドで見るとチップセットの型番が見れます。Realtek社のチップセットの中では定番の様で、チップ名でググるといろいろとチューニングする情報が出てきます。今回は以下のサイトでファームウェアをダウンロードできます。が、チップがあっていても、製品があっていないと書き込めないor動かないになるので、自己責任でお願いいたします。ヒントはサイトに掲載されている写真で、基板の色とチップが違うものは絶対避けてください。あと、バージョンによってはUASPを強制オフするオプションがあるものもあり、最新版だからと言って高速になるとは限らないようなので、気を付けてください。

 https://www.station-drivers.com/index.php/en/component/remository/Drivers/Realtek/NVMe-USB-3.1/orderby,2/page,1/lang,en-gb/?Itemid=0

 ### 2.　jmicron JSM583 chipset
 こちらはupdate toolがダウンロードできます。同じように写真を頼りに探すとよいと考えられます。書き換えは自己責任で。

 https://www.station-drivers.com/index.php/en/component/remository/Drivers/Jmicron/JMS583-NVMe-USB-3.1-Controller/lang,en-gb/

双方とも平均で200MB/sくらいの速度が300MB/sを超えるくらいの速度が出るようになりました。
 特に性能がいまいち上がらないとかの症状の場合は一度疑ってみるといいと思います。

以上の施策で、以下のSSDがラズパイ4で動作しました。

[Western Digital ウエスタンデジタル 内蔵SSD 1TB WD Black SN770 ](https://www.amazon.co.jp/Western-Digital-%E3%82%A6%E3%82%A8%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB-M-2-2280-WDS100T3X0E-EC%E3%80%90%E5%9B%BD%E5%86%85%E6%AD%A3%E8%A6%8F%E4%BB%A3%E7%90%86%E5%BA%97%E5%93%81%E3%80%91/dp/B09V7P3H4M/ref=pd_lpo_sccl_1/356-0260146-6904831?pd_rd_w=dwSNL&content-id=amzn1.sym.d769922e-188a-40cc-a180-3315f856e8d6&pf_rd_p=d769922e-188a-40cc-a180-3315f856e8d6&pf_rd_r=WQRK6YCTE5MNXCP01VT1&pd_rd_wg=ug2Gh&pd_rd_r=5123f473-f200-4e64-a00b-0ea1628183ba&pd_rd_i=B09V7P3H4M&th=1)

[玄人志向 M.2 NVMe SSD ケース USB3.2 Gen2 接続](https://www.amazon.co.jp/%E7%8E%84%E4%BA%BA%E5%BF%97%E5%90%91-%E3%82%AA%E3%83%BC%E3%83%AB%E3%82%A2%E3%83%AB%E3%83%9F-USB3-2-10Gbps-GWM-2NVST-U3G2CCA/dp/B09BZK68NP/ref=asc_df_B09BZK68NP/?tag=jpgo-22&linkCode=df0&hvadid=529675130287&hvpos=&hvnetw=g&hvrand=4571290465930424178&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009306&hvtargid=pla-1411388252321&th=1)

（jmicronの方のケースはデータを失いました。スミマセン。。。）

# データベースのベンチマーク結果
データベースソフトPostgresqlをインストールして分析系データベースのベンチマークであるTPC-Hを計測してみました。一部動作しないクエリは割愛しています。
- Raspberry Pi 4 8GB　放熱ケース＋ファンを使用（必須）
- Ubuntu server 22.04.3 LTS
- Postgresql 14 4 workerおよびメモリ使用を最大限にチューニング
- TPC-H SF=100でデータ作成　ポスグレ用ddl使用　データの並び替えは無し

結果です。おなじRaspberry pi 4,SSDを使用しているにもかかわらず、SSDケースの違いで性能に違いがでます。各社味付けが微妙に違うのが見て取れると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/575990/c8a6a7ff-18fc-d387-6c5c-49cc8b040eef.png)


# おまけ　ダメだった施策　UASPドライバのオフ
ググると結構出てきます。動作速度が200MB/s程度まで落ちます。結局不安定なのは電源不足だったので、動作速度を落とすことで少し安定に向かうのですが、最終的には施策２のセルフパワーのハブを噛まさないと安定しませんでした。あと、動作速度を落とすのはそれだけで残念かと思います。USB3がUASPドライバなるものを使っているのは勉強になりました。

# 終わりに
以上、はまった点をつらつら書き連ねてきましたが、シングルボードコンピュータもここまでそろえると電源も複数要るしケースやファンも気を使わないと止まってしまうので、手軽さが無くなってきます。Raspberry pi 5では、NVMeを直接接続できるとのことで期待していますが、電源は気を付けないと危なそうだなぁ、と少し不安になりました。