/home/tnishinaga/TechMEMO

日々行ったこと、面白かったことを書き留めます。

EdgeRouterLiteを使ってiijmioひかりでインターネット接続する方法メモ

家のネット回線が光になりました.

プロパイダは iijmioひかり です. キャッシュバック価格などを含めたひと月あたりの回線価格は他のプロパイダのほうが安いのですが,評判を見ると耐えられないほど速度が出ないとあったので,国内老舗ISPであるIIJなら信頼できると考え選びました.(が......速度に関しては上りは速くなりましたが,下りは逆に遅くなったような......時間帯が悪かったのか,IPv4は速度が出ないのか......)

さて,以前はモデムにルーターをぶっさせばDHCPでプライベートIP降ってくる環境だったのですが,光になってからはONUやらHGWやらPPPoEやら,見慣れない単語と設定のオンパレードで混乱します.

とりあえず今出てきた3語の意味は以下.

光回線からインターネットに接続するためには,ONUにHGW(または用意したルーター)を接続し,PPPoE接続でプロパイダのネットワークに接続する必要があります. PPPoE接続が確立されると,グローバルなIPが降ってきてインターネットに接続できるようになります.

この辺りの話は,おるみんちゃんのブログ記事がわかりやすいです.

技術者見習いの独り言: EdgeRouterLite-3をGentooで運用しはじめました+IPv6導入(本篇)

EfgeRouterの設定(IPv4

とりあえずIPv4でネットに繋がるようにしたいので,ONUにEdgeRouterのeth0を接続し,eth1をLANとして設定を行いました.

最終的なconfig.bootと設定コマンドは以下のgistを参照してください.

EdgeRouterLite iijmioひかり IPv4 config

MTUとMSS-clamp設定

重要なのは以下のPPPoEのMTUとmss-clamp設定の部分.

set interfaces ethernet eth0 pppoe 0 mtu 1454
 
set firewall modify pppoe-out rule 1 action modify
set firewall modify pppoe-out rule 1 modify tcp-mss 1414
set firewall modify pppoe-out rule 1 protocol tcp
set firewall modify pppoe-out rule 1 tcp flags 'SYN'
set interfaces ethernet eth0 pppoe 0 firewall out modify pppoe-out

光通信はPPPoEを用いるので,最低でもPPPoE接続なヘッダ分(8byte),一度に送れるデータが小さくなってしまします. そのため,一度に送れるデータの最大値を決める事ができるMTUの設定を下げなければ,うまく通信ができません.

IIJではこのMTUの値として1454以下を推奨しているので,その値を設定します.

IIJ4Uサービス終了のお知らせ

次に設定するのはmss-clampの部分. これを設定するとネットワークの接続相手に「xxx byte 以上のパケットを送らないで!」と予め伝えることができます.

こうすることでMTUの低い経路が途中にあったとしても,パケットサイズはmss-clampで設定した大きさ以下になるので通ることができるようになります.

一般にこのmss-clampの値はMTUから40引いた値が良いとされており,IIJでは1414が推奨されています.

Firewallの適応先

Firewallの適応先インターフェースは,今までの感覚だとONUに接続しているeth0にかければ良いと考えていました.

しかし,光回線でインターネットに接続しているのは物理的なポートではなく,PPPoEにより確立されたトンネルです. なので,トンネルに対してFirewallを適応する必要があります.

その設定を行うのが以下のコマンドです.

set interfaces ethernet eth0 pppoe 0 firewall in name OUTSIDE-IN
set interfaces ethernet eth0 pppoe 0 firewall local name OUTSIDE-LOCAL

とりあえずこれでIPv4は通るようになりました.

次はもう一本IPv6用のPPPoEトンネルを通してIPv6をつなげるよう,ルーター設定と格闘したいと思います.

Tips: どはまりぽいんと

EdgeRouterのEthernetポートにMacBookAirを直接接続して作業していたところ,ルーターの設定が問題ないにもかからわず,何故かネットに,それどころかルーターのWeb管理画面にすら全く接続できなくなりました.

原因がよくわからないのですが,EdgeRouterのEthernetポートにスイッチングハブを接続し,スイッチ経由で接続したらつながるようになりました(なんだそれ......

何か心当たりのある方は教えて下さい......

ARM_VMM: KernelVMキャンプの成果報告

3月27-29日にKernelVMキャンプに参加してきました. その成果報告をここに書きます.

知らない方のために説明すると,KernelVMキャンプは東京の山奥に籠もり昼夜問わず黙々とハックし続ける非常に厳しいキャンプで……えっ? 温泉? あいまいみー? 女装ヒルクライム? 何言ってるのかさっぱりわからないですね……

やったこと1:Raspberry Pi 2 を JTAGデバッグする

以前からsyuuさんと進めているRasPi2用VMM実装のため,JTAGデバッガが欲しいという話をしていました.

tnishinaga.hatenablog.com

この時はまだdbgbaseの話がフォーラムに上がっておらず,何故動かないのかをコードを追って探っていました. 結果,

  • Cortex-A7/A15 のサポートが 0.8.0リリース以降に追加されていること
  • JTAG接続先が見つかり,接続(TAP)はできていること
  • バスのアクセスポイントは見つかっており,接続できていること

までわかったところで2日目の夜になり,一旦切り上げて他のことをすることにしました.

※この問題は,後日ざますさんに聞いたら数分で解決しましたとさ(あびゃ〜)

tnishinaga.hatenablog.com

やったこと2: Raspberry Pi 2 のレジスタダンプ表示機能実装

「デバッガがうまくいかないなら,せめてシリアルからレジスタダンプを出したい」という要望を受けて,何らかの例外が飛んできた時にバンクレジスタを含めたレジスタダンプを表示するコードを作りました.

成果物は以下を参照してください.

github.com

ARMの一部のレジスタはバンクレジスタとなっており,CPUモードが切り替わるたびに,モードに合わせてレジスタが切り替わるようになっています. 詳細は,以下を参照してください.

今までこのバンクレジスタは対応するCPUモードからでないと読めないと思っていましたが,実はそうでなく,以下のようにmrs命令とmsr命令を用いれば各バンクレジスタにアクセスできました.

// IRQモードのspレジスタ値をr0にロード
mrs r0, SP_irq

後は読んだものを適当にスタックに積んで,printfで出力するだけ.

動かしてみると,バンクレジスタ含めたレジスタダンプが得られました.

swi called
swi_hello: cpsr = 0x600001d3
lr_und: 0xefdf6ed7
sp_und: 0xfeb74eb7

lr_abt: 0xebdd7acf
sp_abt: 0xff8fcbff

lr_svc: 0x00008070
sp_svc: 0x063fff5c

lr_irq: 0xbf9cfd7f
sp_irq: 0x00008000

lr_fiq: 0xf5feff8f
sp_fiq: 0xecf5ff66
r12_fiq: 0xe7a43d5b
r11_fiq: 0xdcfab3b9
r10_fiq: 0xef66f5ba
r9_fiq: 0x7ff7f9d3
r8_fiq: 0x7eeb5d7f

lr_usr: 0x3caafffd
sp_usr: 0xb7ffa6fb
r12_usr: 0x00000000
r11_usr: 0x063ffffc
r10_usr: 0x7b7f7138
r9_usr: 0x7dfdf7ff
r8_usr: 0xff777dff
r7_usr: 0x98f1fcfb
r6_usr: 0xffd77ff7
r5_usr: 0xfdfdaf5f
r4_usr: 0x00008000
r3_usr: 0x00000000
r2_usr: 0x00382157
r1_usr: 0x00000000
r0_usr: 0x0000000a

どはまりぽいんと

バンクレジスタ名はcase sensitive

バンクレジスタ名はcase sensitive(大文字小文字を区別する)なので,SPとLRは大文字にしないとコンパイルエラーとなる点に注意しないといけない.(最近のgccとかllvmだと治ってるかも)

HYPモードとMONモードのバンクレジスタ

このコードはSVCモードで走っているが,HYPモードとMONモードはSVCモードより権限が上なので,SVCモードからHYPやMONモードのバンクレジスタにアクセスしに行くとアクセス違反で落ちてしまう.

HYPモードとMONモードのバンクレジスタは,モード切り替えして取りに行かないとダメかもしれない(まだ試してない).

今後の方針

  • 仮想化支援機構をつかって,HYPモードと別モード間を行き来するデモを作る

Raspberry Pi2をJTAGデバッグできました

タイトルのとおりです. BareMetalなRaspberry Pi2にJTAGデバッガをつなげて,gdbレジスタ読んだり実行止めたり出来ました.

とりあえず,メモだけ残します.

参考にしたサイト

用意するもの

  • JTAGデバッガ : ARM-USB-TINY-H

使ったソフト

  • OpenOCD 0.9.0-dev-00358-gd3c2679-dirty

手順

1. OpenOCDのビルド

0.8.0リリース以降にCortex-A7/A15用のサポートが入ったので,最新版のコードを持ってきて各環境でビルドする.

ビルド方法は時間がないので省略.

ARM-USB-TINY-Hを使うには

$ ./configure --enable-ftdi

としなければならないことに注意.

2. configファイルの用意

RasPi2用のターゲットファイルは,フォーラムの情報を参考に作成したので,これを使う

OpenOCD target config file for Raspberry Pi 2

最初,dbgbaseアドレスの意味がわからず苦戦したが,ざますさん(@At_Zamasu_Zansu)のお力添えにより,解決した.

dbgbaseアドレスの場所は,以下の資料を参照する.

3. OpenOCDでGDBサーバーを建てる

$ openocd -f interface/ftdi/olimex-arm-usb-tiny-h.cfg -c "transport select jtag" -f rpi2.cfg

とすると,OpenOCDがGDBサーバーを立ち上げてくれる

4. GDBサーバーに接続する

$ arm-none-eabi-gdb
(gdb) target remote localhost:3333

GDBサーバーに接続できる. あとはデバッグするだけ.

余談

enable-legacy-ft2232_libftdi オプションは,OpenOCD 0.9.0では非推奨となっていた.

イマドキのやり方は,

$ ./configure --enable-ftdi

を指定し,インターフェース設定ファイルは interface/ftdi/ 以下のものを使うらしい.

しかし,この新しいインターフェース設定ファイルと既存のターゲット設定ファイルを混ぜると,エラーが出て動かなくなる.

$ openocd -f interface/ftdi/olimex-arm-usb-tiny-h.cfg  -f rpi2.cfg
Open On-Chip Debugger 0.9.0-dev-00358-gd3c2679-dirty (2015-04-03-21:53)
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.sourceforge.net/doc/doxygen/bugs.html
adapter speed: 1000 kHz
adapter_nsrst_delay: 400
none separate
Info : auto-selecting first available session transport "jtag". To override use 'transport select <transport>'.
embedded:startup.tcl:160: Error: session transport is "jtag" but your config requires JTAG
in procedure 'script'
at file "embedded:startup.tcl", line 58
in procedure 'jtag' called at file "rpi2.cfg", line 19
in procedure 'default_to_jtag' called at file "embedded:startup.tcl", line 165
at file "embedded:startup.tcl", line 160

原因はよくわからない.後日調べて動くようにしたい.

ついでに,BareMetalなRasPi2について語っているところを,フォーラムに見つけた

今日は,もう眠いので,寝ます. おやすみなさい.

追記

イマドキのやり方でARM-USB-TINY-H使えました.

変更点はopenocdの起動オプションに

-c "transport select jtag"

をつけるだけです. つまり,openocdの起動を

$ openocd -f interface/ftdi/olimex-arm-usb-tiny-h.cfg -c "transport select jtag" -f rpi2.cfg

とすると,エラーをださずに起動できます.

他のFTDI系JTAGデバッガも同じ方法でエラーを回避できるはずです.

ARMアセンブラの16bit即値代入でコンパイルエラーが出た件

以下の様な16bit即値をレジスタr0に代入するコードをコンパイルしたところ,エラーとなったので,解決策をメモする.

ターゲットはRaspberry Pi 2.コンパイラgcc 4.7.2

mov r0, #0xffff

ARMの公式ドキュメントを読んでみると

ARMv6T2 以上のアーキテクチャでは、MOV は 0x0-0xFFFF (0 ~ 65535)範囲内にある任意の 16 ビットの数値をロードできます。

と書かれているので,armv7-aなRaspberry Pi 2では問題ないはずだが……

数分後...

エラーログで調べてみると,stackoverflowに同じ問題で悩んでいる人が居た.

stackoverflow.com

読んでみると,コンパイラアーキテクチャを教えない場合,armv5としてコンパイルが行われるので,movの範囲が0x00~0xffに制限されてしまうようだ.

ということは,コンパイルオプションに以下を追加してarmv7-aであると知らせるだけで治る...とおもったら,うまくいかなかった.

-march=armv7-a

最終的にmov命令をmovw命令に変更したところ,コンパイルが通った.

movw #0xffff

ARM_VMM: Cortex-A7でMMUを有効化する方法メモ

ARMの仮想化支援機能を使ってみたかったので, 現在しゅううさん(@syuu1228)と一緒に教育用自作VMMを作成中です. もちろん,BareMetalで.

対象ボードは,とりあえずCortex-A7を積んだRaspberry Pi 2を予定中. (ARM64なボードが届いたらそちらに移るかも?)

まだ色々調べている段階なので,道中わかったことをメモしていきます.

ARMの仮想化支援

ARMの仮想化支援機構は,Cortex-A15(+ Cortex-A7)から導入された. ここで行われた主なアーキテクチャ拡張は以下の3つ:

  • ハイパバイザモードの追加
  • 2重メモリアドレス変換機能
  • 物理アドレス空間の40bitへの拡張

各機能の詳細はまだ調べきれていない. 以下の資料を参照.

http://www.hotchips.org/wp-content/uploads/hc_archives/hc22/HC22.23.220-1-Brash-ARMv7A.pdf

VMMの概要

ホストOSとゲストOSの動作イメージが,うまくつかめていない.

以下の資料を見る限りだと,VMMはHYPモードで動くが,ホストOSとゲストOSはどちらもSystemモードとユーザーモードで動くらしい.

http://www.linux-kvm.org/wiki/images/d/d4/2012-forum-arm-christoffer-dall.pdf

つまり,

モード OS
User ゲストOS
System ホストOS
HYP ハイパバイザ

ではなく

モード OS
User ホスト & ゲストOS
System ホスト & ゲストOS
HYP ハイパバイザ

というイメージで動くっぽい.

ゲストOSからハイパバイザへの復帰,HWアクセスのトラップ方法についてはまだわかってない(後者はSystem MMUというのを使うっぽい?).

System MMUの資料(要ログイン)

MMUの有効化方法

VMMを作るにはMMUの理解が必須だと思うけれど,私はMMUについて全く知らない.

これではまずいので,MMUについて理解を深めるため,まずはRaspberry Pi 2のMMUを有効化する方法について調べ始めた.

資料

資料は以下の3つ:

一番最後の資料はRenesasの資料.

日本語なのでわかりやすいけど,説明が一部間違っているようなので注意.

VMSAとPMSA

アーキテクチャマニュアルを読むと,メモリシステムアーキテクチャの項目が,VMSAとPMSAの2つある.両者の違いは以下.

アーキテクチャ 説明
VMSA MMUベースの仮想メモリシステムアーキテクチャ.Cortex-A対象
PMSA MPUベースの保護メモリシステムアーキテクチャ.Cortex-R対象

つまり今回はCortex-A7が対象なので,VMSAについて調べれば良い.

Renesasの資料は,どうも一部の記述がVMSAとPMSAを間違えているようなので,適宜読み替えて読む(もしかするとRenesasのCortex-A9では正しいのかもしれない)

MMUアドレス変換の仕組み

まだ説明できるほど理解してない.

とりあえず,アドレスの変換のレイアウトを物理アドレスと同じにすれば,物理アドレスの時と同じように扱えるっぽい.

MMUの初期化

起動直後はMMUが無効になっているので,有効にしないといけない.

各種L2キャッシュはMMUが動いていないと使えないので,MMU動かすついでにL2キャッシュも有効にしてあげるといいらしい.

有効化までの手順は先ほど上げたRenesasの資料にわかりやすく書かれており,以下のようにすれば良い.

  1. TLBの初期化
  2. 命令キャッシュの初期化(Invalidate)
  3. データキャッシュの初期化
  4. 予測分岐の初期化
  5. MMU, 命令キャッシュ,データキャッシュ, 分岐予測の有効化

MMUの初期化手順のみなら,アーキテクチャマニュアルの「Enabling MMUs」にも書かれている.

コプロセッサ設定のやり方

MMUやキャッシュの設定はメモリの特定アドレスにアクセスして行うのではなく,コプロセッサに対し専用命令を使って行う.

専用命令は以下の2つ. 前者が書き込み命令で,後者が読み込み命令

命令 構文
mcr mcr pn, Op1, Rt, CRn, CRm, Op2
mrc mrr pn, Op1, Rt, CRn, CRm, Op2

構文の各項目の意味は以下.

項目 説明
pn 命令が実行されるコプロセッサ
Op1,2 コプロセッサ固有のオペコード
Rt コプロセッサとデータをやりとりするARMレジスタ
CRn, CRm コプロセッサレジスタ

Rtを除く項目は,アーキテクチャマニュアルに命令と項目の対応表があるので,参考に設定する.

TLBの初期化

TLBの初期化(Invalidate)は,TLBIALLレジスタを叩いて行う. Rtの値は不問.

mcr p15, 0, r0, c8, c7, 0

命令キャッシュの初期化

キャッシュにはゴミが残ってる可能性があり,これを掃除しないと実メモリにゴミが書かれてしまうかもしれないので,こちらも初期化を行う.

命令キャッシュの初期化はICIALLUレジスタに0を書き込んで行う.

mov r0, #0
mcr p15, 0, r0, c7, c7, 0

データキャッシュの初期化

データキャッシュの初期化はDCISWレジスタに0を書き込んで行う.

mcr p15, 0, r0, c7, c6, 0

分岐予測キャッシュの初期化

分岐予測の初期化はDCISWレジスタに0を書き込んで行う.

mcr p15, 0, r0, c7, c5, 6

MMU, 命令キャッシュ, データキャッシュ, 分岐予測 の有効化

MMUとキャッシュの有効化は,システム制御レジスタ SCTLR で行う. このレジスタのキャッシュとMMUに関するビットを立てると,各機能が有効になる.

ビット 機能
12 命令キャッシュ
11 分岐予測
1 データキャッシュ
0 MMU

SCTLRレジスタの詳細はアーキテクチャマニュアルを参照.

movw r0, #0x1803
mcr p15, 0, r0, c1, c0, 0

MMUの初期設定

今後の課題.

参考になりそうなサイトとか

d.hatena.ne.jp

Enabling HYP mode on the Raspberry Pi 2 | flexVDI

http://www.linux-kvm.org/wiki/images/d/d4/2012-forum-arm-christoffer-dall.pdf

続く...

go言語コンパイラをソースからビルドする

go言語コンパイラのビルド方法が,半年前に触ったときと違ったので,現在の方法をメモっておく.

環境

  • Fedora 21 x86_64
  • Golang 1.4.2 ( c62b003eba484d54c2707b379d29240e5367e98f )

インストール方法

ソースのクローン

半年前はmercurialで管理していた気がするが,いつの間にかgitに移っていた. リポジトリgoogle codeのものとgithubのものがあるが,後者はミラーリポジトリなので,前者からクローンする.

$ cd ~/
$ git clone https://go.googlesource.com/go

ビルド済みGo言語コンパイラのインストール

ここからが半年前と違うところ.

以前はgoコンパイラが既に入っているかいないかにかかわらず, ~/go/src/ 以下で all.bash を実行するだけで,go言語コンパイラをビルドできたような記憶がある. しかし,今は all.bash を実行すると,以下のように ~/go1.4 にgo言語(v1.4)の実行環境を入れるよう怒られる.

$ ./all.bash 
##### Building Go bootstrap tool.
cmd/dist
ERROR: Cannot find /home/tnishinaga/go1.4/bin/go.
Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4.
./make.bash: line 121: /home/tnishinaga/go1.4/bin/go: No such file or directory

そのため,go1.4の実行環境を落としてきて ~/go1.4 に置く. go言語コンパイラの実行環境は,以下から持ってこられる.

$ mkdir tmp
$ wget https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz
$ tar zxvf go1.4.2.linux-amd64.tar.gz -C tmp/
$ mv tmp/go ~/go1.4

go言語コンパイラのビルド

後は普通に all.bash を実行するだけ.

$ cd ~/go/src/
$ ./all.bash

ビルドが終わったあとは, .bashrc などに

export GOROOT=$HOME/go
export PATH=$PATH:$GOROOT/bin

と書いておくと,ビルドしたgo言語コンパイラにパスが通って使えるようになる.

以上.

Raspberry Pi 2さわってみた

f:id:tnishinaga:20150207145351j:plain

Raspberry Pi 2が届いたので、とりあえず使用感・性能・消費電流について簡単にチェックしてみました。

使用感

かなり快適です。感動しました。

Raspberry Pi 1はCUIですら反応が遅く、デスクトップを起動すると遅すぎてとても使えないレベルでした。

しかし、Raspberry Pi 2は違います。 最初のraspi-config画面の時点から、動作が軽快です。 Raspberry Pi 1ではLocale設定などを行おうとすると、1アクションに10秒ほど待たされましたが、Raspberry Pi 2ではほとんどありません。

GUIを起動しても動作は快適。 ブラウザもすぐ立ち上がりますし、2,3枚ウィンドウ開いても軽快に動作します。

この使用感で4000円程度なら、日常で使う管理コンソールマシンとして、またはVNCクライアントマシンなどの用途に、十分使えるレベルだと思います。

性能

UnixBenchとLinpackで簡単にベンチマークをとってみました。 Raspberry Pi 1との比較は行っていないので、 どなたか比較結果の作成をよろしくお願いします。

UnixBench


Benchmark Run: 4 CPUs; 1 parallel process

Time: 03:32:52 - 04:01:10; 28m 18s

System Benchmarks

Test Score Unit Time Iters. Baseline Index
Dhrystone 2 using register variables 2961984.8 lps 10.0 s 7 116700.0 253.8
Double-Precision Whetstone 497.9 MWIPS 10.0 s 7 55.0 90.5
Execl Throughput 370.2 lps 29.9 s 2 43.0 86.1
File Copy 1024 bufsize 2000 maxblocks 74390.2 KBps 30.0 s 2 3960.0 187.9
File Copy 256 bufsize 500 maxblocks 21577.5 KBps 30.0 s 2 1655.0 130.4
File Copy 4096 bufsize 8000 maxblocks 193781.0 KBps 30.0 s 2 5800.0 334.1
Pipe Throughput 172660.3 lps 10.0 s 7 12440.0 138.8
Pipe-based Context Switching 31772.9 lps 10.0 s 7 4000.0 79.4
Process Creation 1279.5 lps 30.0 s 2 126.0 101.6
Shell Scripts (1 concurrent) 1186.8 lpm 60.1 s 2 42.4 279.9
Shell Scripts (8 concurrent) 332.4 lpm 60.2 s 2 6.0 554.0
System Call Overhead 412119.5 lps 10.0 s 7 15000.0 274.7
System Benchmarks Index Score: 174.0


Benchmark Run: 4 CPUs; 4 parallel processes

Time: 04:01:10 - 04:29:41; 28m 31s

System Benchmarks

Test Score Unit Time Iters. Baseline Index
Dhrystone 2 using register variables 11810261.3 lps 10.0 s 7 116700.0 1012.0
Double-Precision Whetstone 1989.9 MWIPS 10.0 s 7 55.0 361.8
Execl Throughput 1332.2 lps 29.9 s 2 43.0 309.8
File Copy 1024 bufsize 2000 maxblocks 116037.8 KBps 30.0 s 2 3960.0 293.0
File Copy 256 bufsize 500 maxblocks 32386.9 KBps 30.0 s 2 1655.0 195.7
File Copy 4096 bufsize 8000 maxblocks 305329.3 KBps 30.0 s 2 5800.0 526.4
Pipe Throughput 686642.0 lps 10.0 s 7 12440.0 552.0
Pipe-based Context Switching 122410.7 lps 10.0 s 7 4000.0 306.0
Process Creation 2840.9 lps 30.0 s 2 126.0 225.5
Shell Scripts (1 concurrent) 2660.6 lpm 60.1 s 2 42.4 627.5
Shell Scripts (8 concurrent) 351.6 lpm 60.3 s 2 6.0 585.9
System Call Overhead 1572755.6 lps 10.0 s 7 15000.0 1048.5
System Benchmarks Index Score: 438.3

Linpack

消費電流

アイドル時

f:id:tnishinaga:20150207155113j:plain

4コア100%使用時(Linpack実行時)

f:id:tnishinaga:20150207155137j:plain

各結果の感想

性能

Linpackを用いたRaspberry Pi 2の性能結果は、単体で1G FLOPSの結果が出ました。

以前、計算工学ナビさまの記事で、Raspberry Pi 1 Type B+を16台つなげた際の結果は2.66G FLOPSでした。 なので単純に考えれば、Raspberry Pi 2 1台はRaspberry Pi 1 Type B+ 6台分の性能が得られています(通信コストなどは考慮していないので、正確な比較結果ではありません)。

消費電流

Raspberry Pi 1 Type B+の消費電流は、アイドル時とCPU100%使用時どちらも変わらず200mAでした(USB接続なし。LAN接続あり)

Raspberry Pi 2はアイドル時で+30mA、CPU100%使用時は+300mA程度増えています。 これに加えてUSB機器などを接続すると、消費電流は1Aを超えるでしょう。

よって、Raspberry Pi 2を用いる際は、2A出力のACアダプタを使用したほうが、安全だと思います。

おわりに

Raspberry Pi 2は以前に比べ性能が上がり、実用レベルになりました。 これからRaspberry Piを初められるかたはぜひRaspberry Pi 2を…とすすめたいところですが、Raspberry Pi 2はペリフェラルマニュアルや回路図をまだ見つけられていない(まだ公開されていない?)ので、ちょっと不安です。

ペリフェラルマニュアル等が公開されたら、また調べて本を書いたりしたいと思います。