DeviceTreeの存在意義が分からない! その2

DeviceTreeの影響はペリフェラルだけかと思っていたが、そうでもないらしい。

例えば、ARMデバイスツリーに対するこのパッチ。それに対応するカーネルソースのパッチ。これをデバイスツリー側で処置せずにカーネルバージョンアップすると、CPUが1コアで動くことになるかもしれない。

それに、デバイスツリーのここ。それに対応するカーネルソース側はここ


Linuxは、横の汎用性は重視するが、縦の互換性(バージョン互換性)は容赦なく見捨てるので、バックポートのインパクトが大きくなる。常に動向を追うのは限界で、日本で組込Linuxやっている人は、この分野で孤軍奮闘一匹狼片手間という状況?なので、ちょっとつらいが、構成管理物が1個増えたことを認識し、あきらめてつきあっていき、慣れるしかない。

DeviceTreeの存在意義が分からない!

以下の話は、x86系CPU(ATX規格のPC)は対象外。

私の立ち位置では、DeviceTreeの存在意義が全く分からない。

DeviceTreeとは、ハードウェア設定をスクリプト形式で記述し、Kernelへ橋渡しすることで、ハードウェアの差異をスムーズに吸収することを狙ったものである。Intel PCには無く、ある時期以降のPowerPCとARMで利用されている仕組みである。組込Linuxでは、U-BootとKernelの間に位置する。

ディベロッパーサイドで言わせてもらうと、これは、混沌しか生み出していない。そもそも、U-BootとKernelの間だけであっても、ペリフェラル設定をどちらが実施するかで悩むことがある。Ethernet関連やPCI関連のデバイス設定は、U-BootとKernelで重複設定しているケースや、邪魔しているケースもある。そこへ、DeviceTreeが割って入って来たので、混沌しか生まれない。Kernelがデバイス設定パラメータを受け取るルートが増えただけである。

例えば・・・、LANのPHYチップにRGMII/SGMII等の高速インタフェースがあるケースでは、たいてい、デバイス設定でスキュー調整を行うが、この設定ルートになりうる下記の①〜④が、カード種別/PHYチップ/Kernelバージョンでばらばらである。しかも、重複設定もある。

① U-Boot → Kernel
② Kernel内単独でパラメータ設定
③ DeviceTree → U-Boot → Kernel
④ DeviceTree → Kernel

昔は①か②であったが、②だけでは、U-BootでLANが使えず、開発ではNG。U-Boot側での設定は必要。その意味では、④もNG(または重複設定)。

更に、構成管理物が1個増え、それがH/WとS/Wの中間にあるものだから、ハード屋/ソフト屋どっちで開発・管理等めんどうを見ていくかでもめることになる。

Linuxの第一理念である汎用性を狙ったものなのだろうが、DeviceTreeによって何か恩恵を受けた人は、はたしているのだろうか?。

https://www.devicetree.org/specifications/


もしDeviceTreeが無かったら・・・
https://youtu.be/UURuqxzuEls?t=1013
どうやら、Kernelツリーにおけるソースコードの膨張を吸収する役割を果たしているようです。例えば、ボードに特化したパラメータの入ったパッチはKernelのソースツリー本体にはコミットされず、そうしたボード固有情報はDeviceTreeに外出しさせることで、ソースツリー本体のバリエーション拡大や#define列挙でのコード増大を防いだのでしょう。別の立ち位置から見ればDeviceTreeの存在意義はあるわけであり、T様の怒りを沈めるべく尽力された方々に深く御礼申し上げます。

ダイアリーからブログへ

先週、はてなダイアリーだけアクセスできない時がありました。バンされたかと思ったのですが、そうではなかったようです。おそらく北海道にホストがあるのだと思います。

その時にはじめて知ったのですが、ダイアリーは、来年終了とのこと。そろそろ、ダイアリーからブログに引っ越します。

はてなダイアリー」と「はてなブログ」は、微妙に違います。実は、別の趣味の記事は、ブログに書いています。ブログのほうが、スマホで見るには確かに良いです。ただし、技術論を書くには、こちらの方がデザイン的に好きでした。

新しいブログサイトからインポートする方法で移行する予定ですが、一部はQiitaに移動するかもしれません。

ビルドからoaisim実行まで

LTE基地局オープンソースであるOpenAirInterface(以下、OAI)。これの一部ソースを見たいだけだったが、せっかくなのでビルドしてみることにした。仮想マシンは非推奨とあるが、運用するわけではないため、Ubuntu16.04日本語版をVirtualBOXで構築し、そこで作業してみた。OAIではUbuntu14.04が推奨のようだが、tag v0.5以降なら16.04でも良さそうな旨が書かれてる。

結果的には、ほぼ下記URLに沿って作業を実施したが、このURLにたどり着くまでに結構時間がかかってしまった。
https://gitlab.eurecom.fr/oai/openairinterface5g/wikis/OpenAirSoftwareSupport

ホスト環境構築作業:
## gitをインストール。tigは任意。svnは不要と思うが念の為。
sudo apt instlal git subversion tig

## Ubuntu Studioで標準のPreempt Kernelに入れ替える(simだけなら入替不要)。
sudo apt install linux-image-4.8.0-53-lowlatency linux-headers-4.8.0-53-lowlatency

## 追加パッケージ
sudo apt install libboost-all-dev libgdchart-gd2-spm-dev cmake

## 再起動後
sudo apt autoremove

OAI環境構築作業:
git clone https://gitlab.eurecom.fr/oai/openairinterface5g.git
cd openairinterface5g

git checkout -b v0.6.1 refs/tags/v0.6.1
## README.txtを読むとv0.5.2が良さそう。
git checkout -b v0.5.2 refs/tags/v0.5.2
git branch ## 現在の作業branchを一応確認
cd cmake_target
export LANG=C ## 日本語環境対策
source ./oaienv
./build_oai -I
## ↑でFailしたら力づくで処置する方が良い。私はbuild_target内のURLを変更した。
./build_oai --oaisim --noS1
一部、Failedとは出るが、openairinterface5g/targets/bin 以下にバイナリができていればOK。

実行例:

source ./oaienv
cmake_targets/tools/run_env_ue_virt_noS1


source ./oaienv
cd cmake_targets/oaisim_noS1_build_oai/build/
./oaisim -O ../../../targets/PROJECTS/GENERIC-LTE-EPC/CONF/env.band7.tmi.generic.oaisim.local_mme.conf --xforms
    (-Aで EPA, EVAなどのチャンネルモデルを指定することもできる)

とすると、下記の画面が出る。これを実行中のCPU負荷は、とても高い。

続きは次回(・・・たぶん無い)。

CPUの健康管理が時として仇となる

最近、省電力機能に関連するトラブルが、本当に増えてきました。先日のスマホVLC BANの件もそうでした。本件は、デスクトップ系CPUの話になりますが、CPUの健康管理機能は、時として仇となります。

キーワード:
P-State, C-State, Thermal Throttling, Junction Temperature (TjMAX)

最近、仮想マシンばかり触れていて、完全に失念していました。エンジニアは、これらの機能を認識しておくことが極めて重要です。これらの機能は、仮想マシンでは、どうにもなりません。

上記の機能は諸刃の剣であり、用途や適用によっては、悪影響となります。CPU種別・マザーボード実装・OS実装・用途によって、完全にケースバイケースとなるので、状況に合わせて調査が必要となります。

情報は多いので、調べれば何とかなりますが、気付かないとかなり回り道するケースが発生しそうなので、備忘録として記録しました。

思い出したきっかけ:
OpenAirKernelMainSetup#power-management
OpenAirKernelMainSetup#virtual-machine-vmware-virtual-box-etc

注意事項:
周囲温度とジャンクション温度は別物ですので、気をつけて下さい。

トレーニングでのBGM

レーニングでのBGM。ゆっくりローテーションしているが、ここ数ヶ月は固定し、ルーチンになりつつある。

<トレーニング>
1) Zedd - Get Low
スタートアップ。体のキレを確認しながらこの日のテーマを決める。
キレが良い時ほど怪我をするので要注意!
2) Maluma - Carnaval
「Huu」という所で特に力を入れる。
3) Becky G - Can't Stop Dancin'
「Fuuu」という所で特に力を入れる。

<ストレッチ>
1) 杏里 - D.J. I LOVE YOU
今でも最高のキラキラサウンド/クリアボイスのマッチング。横浜ベイブリッジの思い出、バブルの残り香に浸りながらストレッチ。
2) Mandy Moore - I Wanna Be With You
このダンサーのように動ける日を妄想しながらストレッチ。
3) Jane Kelly Williams - I'm Leaving for You
某スーパーのクロージング。そろそろ帰ろうという気分でストレッチ。

VLC BANの対応

以下、記録として残しておくが、今はVLCを普通にインストールできる。

    • -

本件は微妙に「脱力モード」ではない本筋の話。下記のスラドの件にヒットしていた。純正VLCが無いなぁとは思っていたが、まさかBANされていたとは。。。
mobile.srad.jp/story/18/07/31/0723249/

対策:
※以下、決して安全ではないので、自己責任で。

1) スマホchrome一時的に実行権限を与える。
 設定→セキュリティとプライバシー→その他→不明なアプリをインストールする→Chrome
 →アプリのインストールを許可する

2) スマホchromehttp://get.videolan.org/vlc-android/ から、最新のフォルダを選択し、ARMv8の.apkファイルをダウンロードし、インストール。インストール画面が出ない場合は、右上をタップして「ダウンロード」→該当ファイルを選択し、流れに従う。

3) 忘れずに、1) の危険な設定を元に戻す。

以下、バックグランド再生設定。通勤やスポーツジムでは必須。さもないと、画面Off後しばらくして、停止する。

4) 設定→電池→起動→VLC→手動で管理(項目は全てON)

5) 設定→アプリと通知→アプリ→(画面下)「*」マーク→特別なアクセス
 →バッテリー最適化を無視→(画面上)すべてのアプリ→VLC→許可

6) VLCアプリ左上から:設定→ビデオ バックグラウンド/PiPモード
 →バックグラウンドでビデオを再生

備考:
イコライザーは下記設定。音質はイヤホンに大きく依存するが、クリアで引き締まったサウンドになる。スマホのメーカを変更しても、サウンドは忠実に引き継ぐことができた。

Hz: 31 631252505001 k2 k4 k8 k16 k
dB:11.55.7-0.3-5.0-2.8-1.1-1.71.80.43.8
備考2:おおよそ1ヶ月毎に、上記1)〜3)を実施した方が良いだろう(自己責任で)。

備考3:音だけで良いならHF Player(ONKYO製)でいいだろう。VLCと違って、スマホ側のバックグランド設定は不要だった。グライコで200〜250Hzを低点にした「レ」を描けば、上と同じサウンドを狙える。