/var/log/journalは移動できない

systemd以降、OSログは/var/log/journal以下へ保存される。圧縮ファイルになるが、それでも、放置していると、かなりの量になる。4〜5年運用している私のホビーマシンでは、860MBの蓄積があった。

組込では、ログ領域を移動したいシーンが時々ある。まぁ、どこかに設定ファイルがあって、移動は簡単だろうと思いきや、調べてもなかなかパラメータ設定が出て来ない。ユーザランドgrep検索しても設定ファイルが浮き上がらない。

まさかとは思いつつ、systemdのソースコードを見たら、その、まさかのコチコチのハードコーディングだった。
例)https://github.com/systemd/systemd/blob/master/src/journal/journalctl.c

それでも無理やり移動させるなら、systemdが実行される前に、/var/log/journalのマウントポイントを変えるしか無い。それを実施できる機会は、初期RAMDISK(initrd)内でのスクリプトである。initrdが無いプラットホームでは、Kernel起動パラメータ「init=」で/sbin/init以外の自作スクリプトを指定し、そこで対処する。

備考:
Kernelが最初に走らせるプログラムは/sbin/init。初期RAMDISK(initrd)がある場合は、initrdに含まれる/sbin/initとスクリプトが実行され、最後にHDD等のユーザランドchroot(pivot_root)される。その時に、今度は、HDDの/sbin/initが実行される。そのHDDの/sbin/initは、systemdへのシンボリックリンクである。

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
某スーパーのクロージング。そろそろ帰ろうという気分でストレッチ。