Raspberry Pi Pico実機レポート!

あっきぃです。本日リリースされたRaspberry Pi Picoのサンプルを太田さんからお借りしているので、レポートしていきます。

外観

外観の紹介。サンプルのため、製品版とは一部異なる場合があります。また、製品はピンヘッダーが未実装の状態で販売されます。

表面
裏面

Raspberry Pi PicoにMicroPythonを入れて使う

Raspberry Pi Pico上でMicroPythonを使うことができます。何かを簡単に動かしてみるならこれが一番手軽でしょう。

セットアップの方法はRaspberry Pi Picoのサイトで解説されているため、そちらを参照してください。

https://pico.raspberrypi.org/getting-started

また、プログラミングにはRaspberry Pi OSにバンドルされているThonnyを使うことができます。こちらも上記サイトのMicroPython documentation(PDF)の4章で説明されているので、これを参照してセットアップすると良いでしょう。MicroPythonの場合ファイルの送受信にはampyなどを利用しますが、Thonnyでもファイル保存ダイアログを通じてファイルの送り込みや取得ができるようになるため、用意しておくと便利です。

……本当はドキュメント見ろではなくてステップごとの解説ができると良いのですが、今回はひとまず簡易レポートということで端折らせてください……!

PCD8544 LCDを動かしてみる

手持ちのそれっぽいデバイスでMicroPythonで動かせそうなものを漁ってみたところ、大昔に買ったNokia 5110ことPCD8544 LCDが出てきたので、これを動かしてみることにしました。

まずは配線。Raspberry Pi PicoのSPI0ポートを使用しつつ、これ以外は適当なGPIOピンに差し込みました。

[pcd8544:pico(physical pin)]
Gnd: Pico GND (38)
BL : Pico GP28(34)
Vcc: Pico 3V3 (36)
Clk: Pico GP6 ( 9)
Din: Pico GP7 (10)
DC : Pico GP4 ( 6)
CE : Pico GP5 ( 7)
RST: Pico GP8 (11)

PCD8544用のMicroPython向けライブラリはGithubにあり、そのまま使う事ができました。

https://github.com/mcauser/micropython-pcd8544

pcd8544とpcd8544_fbの2つライブラリがあり、後者のほうが文字を書いたり図を描いたりしやすいので、これをインストールしますが、ThonnyのManage Packagesではインストールできません。pcd8544_fb.pyをRaspberry Pi上に用意して一旦Thonnyで開き、Raspberry Pico上に/lib/pcd8544_fb.pyとして保存することでファイルを転送して、インストールします。

テストプログラムは、リポジトリのexample/framebuf.pyを元にピン番号を書き換えるだけで動きます。ピン番号の書き換えは以下の通り。SPI0番を使うのでSPI(0)で初期化します。Pinの番号はGPの方の数字を指定します。

spi = SPI(0)
spi.init(baudrate=2000000, polarity=0, phase=0)
print(spi)
cs = Pin(5)
dc = Pin(4)
rst = Pin(8)

# if your pcd8544 has BL pin, uncomment this line.
bl = Pin(28, Pin.OUT, value=1)

lcd = pcd8544_fb.PCD8544_FB(spi, cs, dc, rst)

その後の描画テストは、処理の度にframebuf.fill(0)が挟まれており、ほとんどのテストが見えずに終わってしまうため、framebuf.fill(0)を削りつつ、順に描画している様子がわかるようにちょっと書き換えたものを用意しました。

実行結果はこの通りです。

動画で!

ソースコードは以下のURLで公開しています。

https://gist.github.com/Akkiesoft/c72034f89b9aa6a3bedd4994bd51676a

まとめ

新しいRaspberry Pi Picoをさわってみる記事でした。

4ドル(日本では500円前後になるようです。スイッチサイエンスさんでは550円とのアナウンスがありました)と安価なので、気軽に買って遊んでよし、積みボードにしても罪悪感薄しな感じで良いですね(こら)。

また、MicroPythonの豊富なライブラリが利用できるのはわりと強いのかなと思いました。ESPと比べると無線周りがない点が弱みのような気もしますが、無線はいらない場合も多々なので、これはこれでありなのではないかと思います。


HQ Cameraで遊ぶ

あっきぃです。

おおたさんからHQ Cameraのサンプルを預かったので、少し見たり触ったりするレポート記事です。なお、実際の製品とは若干異なる場合があります。予めご了承ください。

Raspberry Pi High Quality Camera リリース

購入するには

はじめに、現時点で一番わかりやすい購入先としてPimoroniのリンクを貼っておきます。

カメラモジュール本体と16mmレンズの組み合わせでは送料を含めて92.5ポンド、約1.3万円になるようです(購入しました)。

本体とレンズの様子

新しいカメラモジュールはレンズ別売りです。Cマウントレンズは別途認定リセラーから数種類販売されているので、どれか一つは必ず買う必要があります。

ちなみに、他のマウントからCマウントに変換できるアダプターが焦点工房というお店で販売されているそうなので、何かしらのレンズを持っている人は変換アダプターを用意すると可能性が広がるようです。EFレンズアダプターをAmazon経由で購入してみました。

http://www.stkb.jp/shopbrand/ct363/

カメラモジュールの裏面とレンズ。サンプルとして提供されているレンズは、Pimoroniの製品ページとは見た目がことなるものの10M Pixel 16mmという性能は同じレンズと、Pimoroniの製品ページと同じ6mmの2種類でした。

今回は10M Pixel 16mmのレンズで撮影します。レンズを取り付けるとこのような感じになります。

カメラマウント用のネジ穴がついているので、一般的な三脚への固定が簡単です。今までのカメラモジュールは固定に難儀していたことを考えると、ネジ穴付きは結構ありがたいですね。

簡単な撮影テスト。

ひとまずは部屋の中でPimoroniのMicroDot pHatとRaspberry Pi Zeroを写してみました(画像をクリックするとオリジナルのサイズで表示されます。)ピントが固定だった以前のカメラモジュールと違って、写したいものにピント調節や絞り調節ができるので、なかなか良い感じです。

以下の写真ではピントを手前の小物にずらしてみました。

家の中では撮れるものがなかなかなく、こんな例でアレなのですが、外で花とかを撮影してみるのも良いかもしれませんね(昨今の情勢を考えると外出はもう少し控えたほうが良さそうではありますが……)。

まとめ

Raspberry Piにもレンズ沼が到来?なのかどうかはわかりませんが、レンズを交換してたのしめる新たなおもちゃという感じがしました。一式&変換アダプターをポチってしまったので、届いたらまた遊んでブログに書いていこうと思います。


Raspberry Pi 4 Model Bを見る!

Raspberry Pi 4 Model Bのサンプルを見たり、ベンチマークした結果を紹介していきます。なお、日本での認証(技適)が未取得であるため、以前Raspberry Pi 3 Model B+をベンチマークする際にも利用させていただいた、スイッチサイエンス様のシールドボックスをお借りしました。

Raspberry Pi 3 B+をシールドボックスでベンチマーク

おことわり: サンプルボードの検証結果は製品版と一部結果が異なる場合があります。

■外観のチェック

表面。

SoC型番はBCM2711となっています。Raspberry Pi 3B+と同じく表面は金属となりました。

電源ポートとmicroHDMIポート。

USB/LANポート。LANポートの位置が右に移動している点が今までのRaspberry Piとの違いです。真ん中はUSB3.0ポートです。

裏面

USBポートはVIA VL805チップから提供されます。また、GbEポート用のBCM54213PEチップが搭載されています。

■スペックの確認

CPUの情報

pi@four:~ $ cat /proc/cpuinfo
processor : 0
model name : ARMv7 Processor rev 3 (v7l)
BogoMIPS : 108.00
Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xd08
CPU revision : 3

(processor1〜3略)

Hardware : BCM2835
Revision : c03111
Serial : (略)

メモリーの情報。サンプルは4GB RAMモデルのため、MemTotalの数値もそのとおりになっています。

pi@four:~ $ cat /proc/meminfo
MemTotal: 4003816 kB
MemFree: 3566036 kB
MemAvailable: 3714744 kB

USBポートはPCI Express接続のVIA VL805 USB3.0コントローラーによる提供のため、lspciコマンドで確認できます。

pi@four:~ $ lspci
00:00.0 PCI bridge: Broadcom Limited Device 2711 (rev 10)
01:00.0 USB controller: VIA Technologies, Inc. VL805 USB 3.0 Host Controller (rev 01)

■ギガビットは本当?iperfでテスト

Raspberry Pi 4 Model BとNanoPi Neo 2を使用してiPerf3を実行しました。NanoPi Neo 2はギガビットの速度が出る別のシングルボードコンピュータです。

それぞれのボードとギガビットイーサネットのハブをシールドボックスに入れて、同じくハブに接続したUSB Ethernetアダプターでボックスの外の端末からアクセスして計測します。

Nano Pi Neo 2をiperf3サーバーとして実行した様子です。940Mbpsの速度が出ていることがわかりました。

pi@four:~ $ iperf3 -c 192.168.2.4
Connecting to host 192.168.2.4, port 5201
[ 5] local 192.168.2.5 port 54272 connected to 192.168.2.4 port 5201
[ ID] Interval Transfer Bitrate Retr Cwnd
[ 5] 0.00-1.00 sec 112 MBytes 940 Mbits/sec 0 317 KBytes
[ 5] 1.00-2.00 sec 112 MBytes 943 Mbits/sec 0 376 KBytes
[ 5] 2.00-3.00 sec 112 MBytes 938 Mbits/sec 0 376 KBytes
[ 5] 3.00-4.00 sec 112 MBytes 940 Mbits/sec 0 434 KBytes
[ 5] 4.00-5.00 sec 112 MBytes 942 Mbits/sec 0 434 KBytes
[ 5] 5.00-6.00 sec 112 MBytes 938 Mbits/sec 0 434 KBytes
[ 5] 6.00-7.00 sec 112 MBytes 939 Mbits/sec 0 434 KBytes
[ 5] 7.00-8.00 sec 112 MBytes 944 Mbits/sec 0 452 KBytes
[ 5] 8.00-9.00 sec 112 MBytes 940 Mbits/sec 0 452 KBytes
[ 5] 9.00-10.00 sec 112 MBytes 941 Mbits/sec 0 598 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate Retr
[ 5] 0.00-10.00 sec 1.10 GBytes 941 Mbits/sec 0 sender
[ 5] 0.00-10.00 sec 1.09 GBytes 940 Mbits/sec receiver

iperf Done.

Raspberry Pi 4をiperf3サーバーとして実行した様子です。やや速度が遅くなりますが837Mbpsという高速な結果になりました。

pi@four:~ $ iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
Accepted connection from 192.168.2.4, port 42350
[ 5] local 192.168.2.5 port 5201 connected to 192.168.2.4 port 42352
[ ID] Interval Transfer Bitrate
[ 5] 0.00-1.00 sec 96.0 MBytes 805 Mbits/sec
[ 5] 1.00-2.00 sec 100 MBytes 841 Mbits/sec
[ 5] 2.00-3.00 sec 100 MBytes 842 Mbits/sec
[ 5] 3.00-4.00 sec 100 MBytes 841 Mbits/sec
[ 5] 4.00-5.00 sec 100 MBytes 841 Mbits/sec
[ 5] 5.00-6.00 sec 100 MBytes 842 Mbits/sec
[ 5] 6.00-7.00 sec 100 MBytes 842 Mbits/sec
[ 5] 7.00-8.00 sec 100 MBytes 841 Mbits/sec
[ 5] 8.00-9.00 sec 100 MBytes 841 Mbits/sec
[ 5] 9.00-10.00 sec 99.1 MBytes 832 Mbits/sec
[ 5] 10.00-10.03 sec 3.00 MBytes 843 Mbits/sec
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bitrate
[ 5] 0.00-10.03 sec 1001 MBytes 837 Mbits/sec receiver

■USB3.0のベンチマーク

USB3.0のベンチマークを、高速なUSB3.0メモリを使ってhdparmコマンドで取得しました。
取得時に電力が不足したためか、エラー出力が見られましたが、結果は87MB/sと高速な値を見ることができました。

pi@four:~ $ sudo hdparm -t /dev/sda

/dev/sda:
SG_IO: bad/missing sense data, sb[]: 70 00 05 00 00 00 00 0a 00 00 00 00 20 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Timing buffered disk reads: 262 MB in 3.01 seconds = 87.12 MB/sec

■Unixbench

最後に恒例のUnixbenchです。


========================================================================
BYTE UNIX Benchmarks (Version 5.1.3)

System: raspberrypi: GNU/Linux
OS: GNU/Linux -- 4.19.50-v7l+ -- #895 SMP Thu Jun 20 16:03:42 BST 2019
Machine: armv7l (unknown)
Language: en_US.utf8 (charmap="ANSI_X3.4-1968", collate="ANSI_X3.4-1968")
CPU 0: ARMv7 Processor rev 3 (v7l) (0.0 bogomips)

CPU 1: ARMv7 Processor rev 3 (v7l) (0.0 bogomips)

CPU 2: ARMv7 Processor rev 3 (v7l) (0.0 bogomips)

CPU 3: ARMv7 Processor rev 3 (v7l) (0.0 bogomips)

23:47:23 up 4:57, 2 users, load average: 0.00, 0.66, 2.72; runlevel Jun

------------------------------------------------------------------------
Benchmark Run: Sun Jun 23 2019 23:47:23 - 00:15:36
4 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables 10010557.0 lps (10.0 s, 7 samples)
Double-Precision Whetstone 2381.7 MWIPS (9.6 s, 7 samples)
Execl Throughput 911.8 lps (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 111140.1 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 30981.9 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 301680.2 KBps (30.0 s, 2 samples)
Pipe Throughput 160911.4 lps (10.0 s, 7 samples)
Pipe-based Context Switching 48233.4 lps (10.0 s, 7 samples)
Process Creation 1856.0 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 2466.3 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 736.8 lpm (60.1 s, 2 samples)
System Call Overhead 493135.1 lps (10.0 s, 7 samples)

System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 10010557.0 857.8
Double-Precision Whetstone 55.0 2381.7 433.0
Execl Throughput 43.0 911.8 212.1
File Copy 1024 bufsize 2000 maxblocks 3960.0 111140.1 280.7
File Copy 256 bufsize 500 maxblocks 1655.0 30981.9 187.2
File Copy 4096 bufsize 8000 maxblocks 5800.0 301680.2 520.1
Pipe Throughput 12440.0 160911.4 129.3
Pipe-based Context Switching 4000.0 48233.4 120.6
Process Creation 126.0 1856.0 147.3
Shell Scripts (1 concurrent) 42.4 2466.3 581.7
Shell Scripts (8 concurrent) 6.0 736.8 1227.9
System Call Overhead 15000.0 493135.1 328.8
========
System Benchmarks Index Score 320.2

------------------------------------------------------------------------
Benchmark Run: Mon Jun 24 2019 00:15:36 - 00:43:47
4 CPUs in system; running 4 parallel copies of tests

Dhrystone 2 using register variables 40088657.2 lps (10.0 s, 7 samples)
Double-Precision Whetstone 9528.0 MWIPS (9.6 s, 7 samples)
Execl Throughput 2702.4 lps (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 213778.4 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 59398.3 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 569815.6 KBps (30.0 s, 2 samples)
Pipe Throughput 607729.5 lps (10.0 s, 7 samples)
Pipe-based Context Switching 193837.7 lps (10.0 s, 7 samples)
Process Creation 4612.8 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 5911.6 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 804.6 lpm (60.2 s, 2 samples)
System Call Overhead 1875987.0 lps (10.0 s, 7 samples)

System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 40088657.2 3435.2
Double-Precision Whetstone 55.0 9528.0 1732.4
Execl Throughput 43.0 2702.4 628.5
File Copy 1024 bufsize 2000 maxblocks 3960.0 213778.4 539.8
File Copy 256 bufsize 500 maxblocks 1655.0 59398.3 358.9
File Copy 4096 bufsize 8000 maxblocks 5800.0 569815.6 982.4
Pipe Throughput 12440.0 607729.5 488.5
Pipe-based Context Switching 4000.0 193837.7 484.6
Process Creation 126.0 4612.8 366.1
Shell Scripts (1 concurrent) 42.4 5911.6 1394.2
Shell Scripts (8 concurrent) 6.0 804.6 1340.9
System Call Overhead 15000.0 1875987.0 1250.7
========
System Benchmarks Index Score 851.0

以下は同じバージョンのRaspbianを使用してRaspberry Pi 3B+上で実行した結果です。


------------------------------------------------------------------------
Benchmark Run: Mon Jun 24 2019 05:08:05 - 05:36:16
4 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables 5296678.9 lps (10.0 s, 7 samples)
Double-Precision Whetstone 1431.2 MWIPS (9.8 s, 7 samples)
Execl Throughput 960.5 lps (29.8 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 138696.1 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 42914.1 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 357533.0 KBps (30.0 s, 2 samples)
Pipe Throughput 298836.5 lps (10.0 s, 7 samples)
Pipe-based Context Switching 53689.7 lps (10.0 s, 7 samples)
Process Creation 2345.4 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 1913.1 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 584.4 lpm (60.1 s, 2 samples)
System Call Overhead 687496.7 lps (10.0 s, 7 samples)

System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 5296678.9 453.9
Double-Precision Whetstone 55.0 1431.2 260.2
Execl Throughput 43.0 960.5 223.4
File Copy 1024 bufsize 2000 maxblocks 3960.0 138696.1 350.2
File Copy 256 bufsize 500 maxblocks 1655.0 42914.1 259.3
File Copy 4096 bufsize 8000 maxblocks 5800.0 357533.0 616.4
Pipe Throughput 12440.0 298836.5 240.2
Pipe-based Context Switching 4000.0 53689.7 134.2
Process Creation 126.0 2345.4 186.1
Shell Scripts (1 concurrent) 42.4 1913.1 451.2
Shell Scripts (8 concurrent) 6.0 584.4 974.0
System Call Overhead 15000.0 687496.7 458.3
========
System Benchmarks Index Score 331.9

------------------------------------------------------------------------
Benchmark Run: Mon Jun 24 2019 05:36:16 - 06:04:42
4 CPUs in system; running 4 parallel copies of tests

Dhrystone 2 using register variables 18740948.4 lps (10.0 s, 7 samples)
Double-Precision Whetstone 5363.6 MWIPS (10.6 s, 7 samples)
Execl Throughput 2069.3 lps (29.9 s, 2 samples)
File Copy 1024 bufsize 2000 maxblocks 220388.7 KBps (30.0 s, 2 samples)
File Copy 256 bufsize 500 maxblocks 62487.0 KBps (30.0 s, 2 samples)
File Copy 4096 bufsize 8000 maxblocks 589552.1 KBps (30.0 s, 2 samples)
Pipe Throughput 1075015.8 lps (10.0 s, 7 samples)
Pipe-based Context Switching 189588.0 lps (10.0 s, 7 samples)
Process Creation 4393.8 lps (30.0 s, 2 samples)
Shell Scripts (1 concurrent) 4339.6 lpm (60.0 s, 2 samples)
Shell Scripts (8 concurrent) 590.4 lpm (60.3 s, 2 samples)
System Call Overhead 2489812.0 lps (10.0 s, 7 samples)

System Benchmarks Index Values BASELINE RESULT INDEX
Dhrystone 2 using register variables 116700.0 18740948.4 1605.9
Double-Precision Whetstone 55.0 5363.6 975.2
Execl Throughput 43.0 2069.3 481.2
File Copy 1024 bufsize 2000 maxblocks 3960.0 220388.7 556.5
File Copy 256 bufsize 500 maxblocks 1655.0 62487.0 377.6
File Copy 4096 bufsize 8000 maxblocks 5800.0 589552.1 1016.5
Pipe Throughput 12440.0 1075015.8 864.2
Pipe-based Context Switching 4000.0 189588.0 474.0
Process Creation 126.0 4393.8 348.7
Shell Scripts (1 concurrent) 42.4 4339.6 1023.5
Shell Scripts (8 concurrent) 6.0 590.4 983.9
System Call Overhead 15000.0 2489812.0 1659.9
========
System Benchmarks Index Score 762.2

1 parallel copy of testsでは若干Raspberry Pi 4Bが低い値となりましたが、4 parallel copy of testsの結果はRaspberry Pi 4BがRaspberry Pi 3B+よりも約100ほどスコアが高くなっていました。


Raspberry Pi 3 B+をシールドボックスでベンチマーク

3.14159265..なπの日の夜、スイッチサイエンスさんにいきなり電話をしまして、電波法に抵触しない適法上でのテストを行うためにシールドボックスをお借りしてベンチマークを実施しました。外に対してはUSBのポートがでていて、このポートと内部にあるUSBがブリッジのような形になっており、このUSBからRaspberry Pi 3B+と接続ができるようになっております。

で実際のテストはといえば中に閉じ込めて行わねばいけなくて、外部のインターネットと直接接続できる何かがでているわけでもないため、テストはおなじみのUnixbenchぐらいがやっとなのが事実です。なので、いつもながらおなじみで申し訳ないのですが、Unixbenchをとってみました。



   #    #  #    #  #  #    #          #####   ######  #    #   ####   #    #
   #    #  ##   #  #   #  #           #    #  #       ##   #  #    #  #    #
   #    #  # #  #  #    ##            #####   #####   # #  #  #       ######
   #    #  #  # #  #    ##            #    #  #       #  # #  #       #    #
   #    #  #   ##  #   #  #           #    #  #       #   ##  #    #  #    #
    ####   #    #  #  #    #          #####   ######  #    #   ####   #    #

   Version 5.1.3                      Based on the Byte Magazine Unix Benchmark

   Multi-CPU version                  Version 5 revisions by Ian Smith,
                                      Sunnyvale, CA, USA
   January 13, 2011                   johantheghost at yahoo period com

------------------------------------------------------------------------------
   Use directories for:
      * File I/O tests (named fs***) = /home/pi/byte-unixbench/UnixBench/tmp
      * Results                      = /home/pi/byte-unixbench/UnixBench/results
------------------------------------------------------------------------------


1 x Dhrystone 2 using register variables  1

1 x Double-Precision Whetstone  1

1 x Execl Throughput  1

1 x File Copy 1024 bufsize 2000 maxblocks  1

1 x File Copy 256 bufsize 500 maxblocks  1

1 x File Copy 4096 bufsize 8000 maxblocks  1

1 x Pipe Throughput  1

1 x Pipe-based Context Switching  1

1 x Process Creation  1

1 x System Call Overhead  1

1 x Shell Scripts (1 concurrent)  1

1 x Shell Scripts (8 concurrent)  1

4 x Dhrystone 2 using register variables  1

4 x Double-Precision Whetstone  1

4 x Execl Throughput  1

4 x File Copy 1024 bufsize 2000 maxblocks  1

4 x File Copy 256 bufsize 500 maxblocks  1

4 x File Copy 4096 bufsize 8000 maxblocks  1

4 x Pipe Throughput  1

4 x Pipe-based Context Switching  1

4 x Process Creation  1

4 x System Call Overhead  1

4 x Shell Scripts (1 concurrent)  1

4 x Shell Scripts (8 concurrent)  1

========================================================================
   BYTE UNIX Benchmarks (Version 5.1.3)

   System: raspberrypi: GNU/Linux
   OS: GNU/Linux -- 4.9.80-v7+ -- #1098 SMP Fri Mar 9 19:11:42 GMT 2018
   Machine: armv7l (unknown)
   Language: en_US.utf8 (charmap="UTF-8", collate="UTF-8")
   CPU 0: ARMv7 Processor rev 4 (v7l) (0.0 bogomips)
          
   CPU 1: ARMv7 Processor rev 4 (v7l) (0.0 bogomips)
          
   CPU 2: ARMv7 Processor rev 4 (v7l) (0.0 bogomips)
          
   CPU 3: ARMv7 Processor rev 4 (v7l) (0.0 bogomips)
          
   12:20:45 up 2 min,  3 users,  load average: 0.09, 0.08, 0.03; runlevel 2018-03-14

------------------------------------------------------------------------
Benchmark Run: Wed Mar 14 2018 12:20:45 - 12:27:30
4 CPUs in system; running 1 parallel copy of tests

Dhrystone 2 using register variables        5064713.2 lps   (10.0 s, 1 samples)
Double-Precision Whetstone                     1224.3 MWIPS (9.9 s, 1 samples)
Execl Throughput                                507.1 lps   (29.9 s, 1 samples)
File Copy 1024 bufsize 2000 maxblocks        159405.0 KBps  (30.0 s, 1 samples)
File Copy 256 bufsize 500 maxblocks           47023.0 KBps  (30.0 s, 1 samples)
File Copy 4096 bufsize 8000 maxblocks        403956.0 KBps  (30.0 s, 1 samples)
Pipe Throughput                              353550.8 lps   (10.0 s, 1 samples)
Pipe-based Context Switching                  63697.5 lps   (10.0 s, 1 samples)
Process Creation                               2420.9 lps   (30.0 s, 1 samples)
Shell Scripts (1 concurrent)                   2202.1 lpm   (60.0 s, 1 samples)
Shell Scripts (8 concurrent)                    668.7 lpm   (60.0 s, 1 samples)
System Call Overhead                         687831.7 lps   (10.0 s, 1 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0    5064713.2    434.0
Double-Precision Whetstone                       55.0       1224.3    222.6
Execl Throughput                                 43.0        507.1    117.9
File Copy 1024 bufsize 2000 maxblocks          3960.0     159405.0    402.5
File Copy 256 bufsize 500 maxblocks            1655.0      47023.0    284.1
File Copy 4096 bufsize 8000 maxblocks          5800.0     403956.0    696.5
Pipe Throughput                               12440.0     353550.8    284.2
Pipe-based Context Switching                   4000.0      63697.5    159.2
Process Creation                                126.0       2420.9    192.1
Shell Scripts (1 concurrent)                     42.4       2202.1    519.4
Shell Scripts (8 concurrent)                      6.0        668.7   1114.5
System Call Overhead                          15000.0     687831.7    458.6
                                                                   ========
System Benchmarks Index Score                                         336.3

------------------------------------------------------------------------
Benchmark Run: Wed Mar 14 2018 12:27:30 - 12:34:21
4 CPUs in system; running 4 parallel copies of tests

Dhrystone 2 using register variables       20174506.0 lps   (10.0 s, 1 samples)
Double-Precision Whetstone                     4936.7 MWIPS (9.9 s, 1 samples)
Execl Throughput                               2474.9 lps   (29.9 s, 1 samples)
File Copy 1024 bufsize 2000 maxblocks        263690.0 KBps  (30.0 s, 1 samples)
File Copy 256 bufsize 500 maxblocks           70797.0 KBps  (30.0 s, 1 samples)
File Copy 4096 bufsize 8000 maxblocks        647637.0 KBps  (30.0 s, 1 samples)
Pipe Throughput                             1431414.8 lps   (10.0 s, 1 samples)
Pipe-based Context Switching                 221854.5 lps   (10.0 s, 1 samples)
Process Creation                               5696.9 lps   (30.0 s, 1 samples)
Shell Scripts (1 concurrent)                   4949.5 lpm   (60.0 s, 1 samples)
Shell Scripts (8 concurrent)                    644.5 lpm   (60.2 s, 1 samples)
System Call Overhead                        2640381.9 lps   (10.0 s, 1 samples)

System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   20174506.0   1728.7
Double-Precision Whetstone                       55.0       4936.7    897.6
Execl Throughput                                 43.0       2474.9    575.6
File Copy 1024 bufsize 2000 maxblocks          3960.0     263690.0    665.9
File Copy 256 bufsize 500 maxblocks            1655.0      70797.0    427.8
File Copy 4096 bufsize 8000 maxblocks          5800.0     647637.0   1116.6
Pipe Throughput                               12440.0    1431414.8   1150.7
Pipe-based Context Switching                   4000.0     221854.5    554.6
Process Creation                                126.0       5696.9    452.1
Shell Scripts (1 concurrent)                     42.4       4949.5   1167.3
Shell Scripts (8 concurrent)                      6.0        644.5   1074.2
System Call Overhead                          15000.0    2640381.9   1760.3
                                                                   ========
System Benchmarks Index Score                                         867.2

ほんと、技適の問題でおおっぴらに電源をいれられないのは口惜しい限りですが、ご参考ください。また深夜だというのに押しかけでシールドボックスをお貸しいただきましたスイッチサイエンス様に御礼申し上げます。


Raspberry Pi 3とPi DriveでUSB HDDブートをしてみよう

Raspberry Pi 3向けに、SDカード以外のブート方法を提供するための機能が追加されています。現在はベータ版の扱いなので、不具合があるかもしれませんが、試す手順なども掲載されています。

現在はUSBブート、PXEブートの2種類が紹介されています。

https://www.raspberrypi.org/blog/pi-3-booting-part-i-usb-mass-storage-boot/

https://www.raspberrypi.org/blog/pi-3-booting-part-ii-ethernet-all-the-awesome/

PXEブートに関しては私の個人ブログでも紹介していますので、興味がありましたらこちらも見てみてください。

さて、本記事ではPi Driveを使用してUSBブートをしてみたいと思います。

Pi Drive

Pi Driveとは?

Pi Driveは、Western DigialがRaspberry Pi向けにリリースした2.5インチハードディスクです。容量はPi==πにかけて314GBになっています(フォーマットすると……314GBではなくなります)。特徴的なのはインターフェイスで、SATAではなくUSBポートが搭載されています。なので、USBケーブル1本でRaspberry Piと接続できるわけです。

http://store.wdc.com/promo/97047600

正規の購入経路としてはWestern Digitalの通販サイトがあるものの、日本への輸入には対応していないようです。しかし、おおたさんがなぜか入手されたのをお借りしたので、ぺろぺろなめまわしています(なめまわしていません)。

その他謎の入手経路としては、dx.com(中国のガジェット系通販サイト)がありました。ぶっちゃけ容量単価的にはおいしくないですけども。

http://www.dx.com/p/2-5-314gb-usb-hard-drive-for-raspberry-pi-3b-2b-b-silver-black-437594

パッケージはこのような感じです。

IMG_4921

側面には円周率も……!

IMG_4922

Pi Driveはberrybootを使用したHDDブートモードが用意されています。ただ、berrybootがMicroSDカードから起動するようなので完全にSDカードレスにできるわけではないようです。また、Raspberry Pi3リリース前にリリースされたパッケージでしたので、そもそもRaspberry Pi 3には対応していないようでした。

IMG_4923

USBブートをしてみよう

USBブートをするためには以下の手順が必要になります。

Raspberry Pi側の準備

  • MicroSDカードでブートする
  • rpi-updateで最新のファームウェアにアップデート
  • USBブートを有効にする設定を記述して再起動
  • USBブートが有効になったことを確認してシャットダウン

HDDの用意

  • パーティションを切る
  • 切ったパーティションをそれぞれフォーマット
  • Raspberry PiのOSイメージからファイルコピー
  • SDカードからbootcode.binとstart.elfをコピー

作業は以下のページを参考に進めました。

https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/msd.md

Raspberry Pi側の準備

USBブートを有効にするには、最新のファームウェアにアップデートした環境で特定のオプションを有効にした状態でブートする必要があります。この作業は1度実行すれば、以降は不要のようです。

MicroSDカードに最新のRaspbianを用意して起動した後、以下のコマンドを実行します。

sudo BRANCH=next rpi-update

/boot/config.txtをエディターで開き、以下の一文を追記します。

program_usb_boot_mode=1

Raspbianを再起動したら以下のコマンドを実行して、出力が「17:3020000a」であることを確認します。

$ vcgencmd otp_dump | grep 17:
17:3020000a

HDDの用意

Raspberry PiにPi Driveを接続します。まずはpartedコマンドでパーティションを作成します。

$ sudo parted /dev/sda

(parted) mktable msdos
Warning: The existing disk label on /dev/sda will be destroyed and all data on this disk will be lost. Do you want to continue?
Yes/No? Yes
(parted) mkpart primary fat32 0% 100M
(parted) mkpart primary ext4 100M 100%
(parted) print
Model: WD My Passport 07BA (scsi)
Disk /dev/sda: 314GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
1 1049kB 99.6MB 98.6MB primary fat32 lba
2 99.6MB 314GB 314GB primary ext4 lba
(parted) quit

パーティションをそれぞれmkfsコマンドでフォーマットします。

sudo mkfs.vfat -n BOOT -F 32 /dev/sda1
sudo mkfs.ext4 /dev/sda2

フォーマットしたパーティションをそれぞれ以下のようにマウントします。

sudo mount /dev/sda2 /mnt
sudo mkdir /mnt/boot
sudo mount /dev/sda1 /mnt/boot/

SDカードの中のRaspbianを、rsyncコマンドでHDDにコピーします。rsyncコマンドは別途インストールする必要があります。

sudo apt-get install rsync
sudo rsync -ax / /boot /mnt

コピーしたあとは、HDD内のいくつかのファイルでブート用のパラメータをHDD用に書き換えます。SDカードのデバイス名はmmcblk0ですが、HDDの場合はデバイス名がsdaになるためです。参考ページのようにコマンドで実行すると、一括で置き換えてくれます。

$ sudo sed -i "s,root=/dev/mmcblk0p2,root=/dev/sda2," /mnt/boot/cmdline.txt
$ sudo sed -i "s,/dev/mmcblk0p,/dev/sda," /mnt/etc/fstab

最後にSSHホスト鍵を再生成します。こちらも基本的には参考ページの通り実行します。

cd /mnt
sudo mount --bind /dev dev
sudo mount --bind /sys sys
sudo mount --bind /proc proc
sudo chroot /mnt
rm /etc/ssh/ssh_host*
dpkg-reconfigure openssh-server
exit
sudo umount dev
sudo umount sys
sudo umount proc

最後にRaspberry Piをシャットダウンします。

$ sudo poweroff

HDDブート!

Raspberry Piの電源ケーブルを抜いたら、MicroSDカードを抜き取り、HDDは接続したまま電源を再投入します。少しするとHDDがスピンアップして、(一度スピンダウンしながら)Raspberry Piが起動します。

HDDから起動していることを確認するには以下のようなコマンドを実行してみると良いでしょう。


pi@raspberrypi:~ $ cat /proc/partitions
major minor #blocks name

(中略)
8 0 306677760 sda
8 1 96256 sda1
8 2 306580480 sda2
pi@raspberrypi:~ $ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 288G 1.2G 272G 1% /
devtmpfs 459M 0 459M 0% /dev
tmpfs 463M 0 463M 0% /dev/shm
tmpfs 463M 6.2M 457M 2% /run
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 463M 0 463M 0% /sys/fs/cgroup
/dev/sda1 93M 20M 73M 22% /boot
pi@raspberrypi:~ $ mount | grep sda
/dev/sda2 on / type ext4 (rw,noatime,data=ordered)
/dev/sda1 on /boot type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,errors=remount-ro)

まとめ

Pi Driveを使用して、Raspberry Pi 3でUSB-HDDブートする方法を紹介しました。MicroSDカードが不要になるので、書き換え寿命を気にする必要がなくなるのは便利かもしれません。

あと、Pi Driveについて、一つ気なるところをあげるとすると、アクセスランプの白色LEDがまぶしすぎる点でしょうか……。目に跡が残るくらい明るいんですよね……w