ポータブルデバイスの違いによるパフォーマンスの差

# ポータブルデバイスの違いによるパフォーマンスの差

**[【ぜんぶポータブル】ポータル](https://qiita.com/jtFuruhata/items/f9788da8e480c646a2a9)**

**最終更新:2019年3月5日**

**注：『速度』は使用環境によって大きく異なります。参考程度にご覧ください。**

ポータブル環境を持ち運ぶにあたって、じゃぁポータブルデバイスは何がいいんだろうと考えれば絶対に**外付けSSD**だろう、と思うわけなんです。

でも、「ポータブル環境のためだけにSSDというのもなぁ…　もっと安いデバイスでいいんじゃない？」という気持ちもある、僕もそうしたい。

そこで、このドキュメントでは、**外付けSSD以外のデバイスにどれだけ夢を見られるか**、職場のデスクトップPC（H87 Express+Core i7 4770K）を利用して、[CrystalDiskMark](http://crystalmark.info/ja/software/crystaldiskmark/)してみました。
いちいちキャプチャ画像を貼るのもアレなので、適度にテーブルに書き直しました。

**[結論だけ見たい方はこちらでスキップ](#ベンチマークまとめ)**

## 内蔵

### 内蔵Cドライブ　Seagate ST2000DM001（2TB/STAT600/7200rpm）+ Intel Smart Response Technology
まずは内蔵。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/151581/31ab76d1-38f4-8e89-4eeb-a9da8b341635.png)
今年リース切れのマシンですから、まぁこんなもんです…

これが、システム制御実習室のSSDマシンだとこう

| |Read [MB/s]|Write [MB/s]|
|:---|:--:|:--:|
|Seq Q32T1|523.4|448.7|
|4KiB Q8T8|172.4|265.5|
|4KiB Q32T1|167.3|149.6|
|4KiB Q1T1|15.81|76.81|

嫁の液タブだと
![2019-03-02.png](https://qiita-image-store.s3.amazonaws.com/0/151581/eaed362b-eb08-f851-5e38-117bc61b065a.png)
わかっちゃいるけど**異次元**。

## 外付けHDD
### 外付けHDD Elecom(Seagate) SGP-NZ020UBK　USB3.0ポート vs USB2.0ポート

|USB3.0接続|Read [MB/s]|Write [MB/s]|USB2.0接続|Read [MB/s]|Write [MB/s]|
|:---|:--:|:--:|:---|:--:|:--:|
|Seq Q32T1|128.8|128.8|Seq Q32T1|40.11|36.20|
|4KiB Q8T8|0.624|1.544|4KiB Q8T8|0.628|1.585|
|4KiB Q32T1|0.624|1.576|4KiB Q32T1|0.629|1.561|
|4KiB Q1T1|0.543|1.585|4KiB Q1T1|0.527|1.549|

去年買ったやつです。キャッシュがうまく効きやすいせいか、4KiB時の書き込みがえらい速いです。内蔵より速くてショック。

480Mbpsという制約上、USB2.0接続時には40MB/sぐらいでインターフェイス的な頭打ちとなります。ただ、ポータブル環境では小さいファイルを大量に扱うので、シーケンシャル読み書き性能は参考程度という感じです。

### 外付けHDD TOSHIBA HD-AA10TK　USB3.0ポート vs USB2.0ポート
|USB3.0接続|Read [MB/s]|Write [MB/s]|USB2.0接続|Read [MB/s]|Write [MB/s]|
|:---|:--:|:--:|:---|:--:|:--:|
|Seq Q32T1|62.45|57.90|Seq Q32T1|43.93|44.75|
|4KiB Q8T8|0.540|0.266|4KiB Q8T8|0.549|0.269|
|4KiB Q32T1|0.551|0.269|4KiB Q32T1|0.546|0.272|
|4KiB Q1T1|0.484|0.271|4KiB Q1T1|0.488|0.273|

かなり前からMac外付けで使っているHDDです。仕様が古いせいか今一つUSB3.0のメリットを活かせていません。性能差があるようで、小さいファイル読み込み性能的にはあまり変わらなさそうです。ただ、大規模ビルドでは大差がつきそう。

## USBメモリ16GB
### 価格順
USB2.0で試すぶん時間の無駄なので、USB2.0デバイスもUSB3.0接続でしか試していません。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/151581/924cda3a-1b8c-2cde-210a-44d63d60cc38.png)
某ディスカウントショップで購入。0.000ェ…

下の二つは異なる家電量販店の安売りカゴから購入した、異なる日本メーカーの製品。
まぁだいたいこの辺りがUSB2.0を謳うUSBメモリの標準的な性能って感じでしょうね。

|メモリB|Read [MB/s]|Write [MB/s]|メモリC|Read [MB/s]|Write [MB/s]|
|:---|:--:|:--:|:---|:--:|:--:|
|Seq Q32T1|18.80|11.51|Seq Q32T1|18.85|8.153|
|4KiB Q8T8|4.002|0.001|4KiB Q8T8|3.818|0.001|
|4KiB Q32T1|3.979|0.000|4KiB Q32T1|3.764|0.001|
|4KiB Q1T1|3.454|0.004|4KiB Q1T1|3.340|0.005|


### 見せてもらおうか、値段が2倍の性能とやらを

使ったのは、Sony ポケットビット USM16W3Bです。コネクタカバーはありませんが筐体全面ヒートシンク感満載です。
ガワなんて飾りです、**冷えるのが正義**です。
パッケージでUSB3.1Gen1対応の読み込み最大160MB/sを謳っています。
ほんとにそんな速度出るの？
![image.png](https://qiita-image-store.s3.amazonaws.com/0/151581/afc7c85f-3812-564d-4ee2-719acf9b0804.png)
**おぉSonyよ、お前はSuzukiか？**
ランダムリードで3倍速いじゃないか、よし、もう安物を買うのはやめたぞ。

## SDHCカード
### MicroSDHCカード 8GB UHS-I Class10 最大読み込み30MB/s 
とりあえず手元にあった、かなり以前にラズパイ向けに購入したやつ。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/151581/9177eec7-fd3a-4f10-3925-0a6d155a3b40.png)
少なくとも安物のUSBメモリを使うよりはいい。特筆すべきは、爆速タイプUSBメモリよりも4KiB書き込み性能が良いこと。リードはアレだけど、バランスとしてはSDカードの方がいいのかな。

### MicroSDHCカード SanDisk 16GB UHS-I Class4 SDSDQ-016G-J35U
さて次はこの間安く買い増したClass4のカード…
![image.png](https://qiita-image-store.s3.amazonaws.com/0/151581/0f7db15e-9f5d-29b4-8d04-a8266b0c151d.png)
**ファッ!?**

### MicroSDHCカード SanDisk Ultra 16GB UHS-I Class10 
![image.png](https://qiita-image-store.s3.amazonaws.com/0/151581/ec234569-29a8-3843-851d-51b71ca51281.png)
大差ない。うーんなるほど、もしかすると良い個体を引いた可能性はあるかもなのだけれど、SDスピードクラスってのは最低保証なので、それ以上速くちゃいけないということはない。製造コストなど**大人の事情**が色々絡んできているのかもしれません、転送速度非公開だし。
また、よくよく見るといずれのカードもUHS-Iインタフェースを示す「I」マークはついているけど、UHSスピードクラスを表す「Uに1」マークはついていない。
今調べたら、このSanDisk 新無印Class4カードよりも、SanDisk Ultraの方がAmazon調べの実売価格が安いんですよね。

そんな訳で、外付けHDDはそれなりの値段がする割にはそれほどランダムアクセスのパフォーマンスが良いわけではなく、USBメモリは爆速モデルでも書き込み速度に難があるので、次善の策としては、そこそこ速いSDカードを、USB3.0以上接続のリーダーで使うのがよいのかなぁ…と思ったり。安い物だと2,000円ぐらいで揃います、持ってないけど。

## でもね。
そこに2,000円ぐらいかけるなら、2019年2月現在だと、外付けSSDでも、例えばこんな素敵なものもあるんですよ。

[Elecom ESD-EC0120G](https://www2.elecom.co.jp/products/ESD-EC0120GBK.html)

`TLCフラッシュ搭載`、~~ってのはカッコいいのかバカ正直なだけなのかよく判りませんが、~~定価が税込8,294円ということで、某家電量販店で6,000円、某通販サイトで5,290円（2019年2月現在）。
ここまでスタイリッシュじゃなくても120GBだと他メーカーの商品でも実売は5,000円切ってます。SDカードやUSBメモリに2,000円かけるぐらいならいっそ…

「やーでもそこまで3倍ぐらいかけても3倍速くないかもしれない！」　ですよね、なので、ポチってみました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/151581/0ed2d035-6ffe-bb67-2a11-4a2c99e70bd6.png)

**なんかもうこのドキュメントのためにかけた時間がもったいないレベル。**

## ベンチマークまとめ
そんな訳で、ポータブル環境で物を言う小さいファイルでのランダムアクセス性能に関して、ざっくりとした今回の検証でのポータブルデバイス性能比をまとめます。

C無/有=キャッシュ無し/有り　　2.0/3.0=USB2.0/3.x　　SDHCのI/FはUSB2.0

| |HDD C無|HDD C有|メモリ 2.0|メモリ 3.x|SDHC|SSD|
|:--:|---:|---:|---:|---:|---:|---:|
|リード|1|1|8|26|12|**190**|
|ライト|1|6|0.004|0.024|8|**368**|

もう3倍とか10倍とかそういうレベルじゃないのです。

## 起動時間実測編
とはいえ、ですよ。**世の中そんなにうまい話はない**、色々なボトルネックやらキャッシュやらがあるので、SSDを使ったらHDDより実測で数百倍速くなる、なーんてことはありそうにないです。

そんな訳で、マシン再起動直後のディスクキャッシュされていない状態で、ポータブル環境フォルダに格納されたVisual Studio Code一発目の起動が何秒かかるかを比較してみました。

起動は、ワークベンチの表示だけではなく、ExtensionHostまで起動するのを待っています。ここのループに1秒ウェイトを入れているので、その分誤差が出ていると思ってください。それぞれマシンを再起動した後に、タスクマネージャのパフォーマンス表示で起動プロセスが落ち着くのを待って計測しています。インストールされている拡張機能は5個です。

**SDHCカードだけUSB2.0接続なので、ちょっとかわいそうですが、**結果はこちら。

|使用PC|外付けHDD|爆速USBメモリ|microSDHC|外付けSSD|
|:--:|---:|---:|---:|---:|
|リース切れ寸前|15秒42|8秒20|18秒79|6秒72|

爆速USBメモリが意地を見せました。
ちなみにUSB2.0メモリは3分45秒75、2回目起動でも36秒44で論外。
内蔵HDDは2回目起動と同じ環境なので比較はできないですが7秒01、誤差の範囲内とはいえ外付けSSDの方が速い結果に…。

## ファイルコピー実測編
これがネックなんですよね、ポータブル環境フォルダを丸ごと書き込んでみました。

|テストデータ||
|---:|---:|
|ディレクトリ数|5,673|
|ファイル数|39,479|
|総容量(MB)|2,828|

構築途中なので**ファイル数はかなり少なめ**です、`npm`しだすとヒドいことになりますからね。
使ったコマンドはこちら。

```:Windowsコマンド
robocopy  /mir /fft jtHiuPortable D:\jtHiuPortable
```

結果です。「リース切れ寸前」は対内蔵HDD、「嫁液タブ」は対内蔵SSDです。

|使用PC|外付けHDD|爆速USBメモリ|microSDHC|外付けSSD|
|:--:|---:|---:|---:|---:|
|リース切れ寸前|27分05秒|45分24秒|36分11秒|14分32秒|
|嫁液タブ|-|42分06秒|30分41秒|**3分25秒**|

### もうSSD以外買わない。

ちなみにUSB2.0メモリは**1時間11分21秒**です、ほんとうに長い間ありがとうございました。

読み込みのボトルネックで、HDD→SSDはSSD→SSDの4倍ちょっとかかっています。
SSD以外のデバイスでは書き込みのボトルネックが圧倒的なので、それほど強烈な環境の差は出ませんでした。

一度コピーした後の**同期**は、基本的にディレクトリ領域だけを読み込むので、**全環境で30秒程度**と差は出ません。こちらはCPUやメモリといったPC性能に大きく依存します。
常用時には1分ちょっとというところです。

## 結論
- `USB2.0接続の安いUSBメモリ` ... ポータブル環境では使わない方がいい。
- `外付けHDD` ... 性能はそれなりだけど、値段を考えると選ぶ理由が見つからない。
- `SDHCカード` ... カードリーダーに左右されそうだがコスパ的に悪くない。
- `爆速USBメモリ` ... 読み込みはSSDに匹敵。ただ、`create-react-app`とか間違っても叩きたくない。

そんな訳で、確かに少々値は張るのですが、
**【ぜんぶポータブル】では、外付けSSDをオススメします。**