カテゴリー
技術

Debian の perf を高速化するパッチと、そのGPL的な背景

Cargo の flamegraph ツールがDebian の perf のせいでとても遅いという話。

Cargo flamegraph sample

perf コマンドがプロファイルデータを解析する際に libbfd をリンクすればずっと高速になるのですが、Debian のポリシーでライセンスに違反するため libbfd をリンクすることはできないそうです。

[修正] コメントでの指摘を受け修正しました

perf のライセンスが GPL バージョン2、libbfd のライセンスが GPL バージョン3+ であり、これら二つのプロジェクトを合法的にリンクさせる方法がないそう。

Debian の Makefile では、わざわざ生成された perf コマンドが libbfd をリンクして「いない」ことをチェックするようになっているのですね。

そんな訳で、Debian の perf は dso 一つごとに addr2line コマンドをパイプで呼び出す(そして、毎回サブプロセスは終了する)方式となっています。

しかし、大量の perf 呼び出しを行う flamegraph を作ろうとした @leastfixedpoint さんは、いつまでも帰ってこない perf コマンドに業を煮やし、libbfd をリンクさせない範囲での高速化を考えました。

このパッチでは、addr2line を別プロセスとして起動させたままにしておき、dso をデータとして送り付け結果を受け取っても、addr2line プロセスを終了させないことで、とあるデータ量に対して68倍速く処理が終わるようにできたそうです。

対象のデータ量によっては気にならない程度の速度差なのかもしれませんが、同じようにここの処理速度で困ってる人もいるんじゃないでしょうかね。

via Hacker News

カテゴリー
fun

ZeroVer – ゼロベース・バージョニング

ZeroVer は、決してバージョン1に到達しないバージョンつけ規則を提唱しています。

「ソフトウェアのリリース数が史上最高を迎える現在も、皆が一致する方法は見つかっていません。メジャーバージョンはもう古い。ならばソフトウェア・バージョンの過去・現在・将来はいかなるものか? ゼロバー0.0.1へようこそ!」

ZeroVer: 0-based Versioning — zer0ver

ゼロバー(ZeroVer, 0verとも)では、メジャーバージョンは最初にして最も重要な数値である0を超えることは決してありません。

0ver サイトでは、著名なオープンソースのプロジェクトの多くが 0. で始まるゼロ・バージョニングを採用していることを、巨大な表を使って見せてくれています。

React Native 0.65.0-rc.2 や axios 0.21.1 、hugo 0.85.0 など、GitHub でスターを数万以上も集める有名なオープンソースプロジェクトがいくつも、プロジェクト開始から何年も経過しているにも関わらずバージョン0 を維持し続けています。

Wikipedia でバージョンが0.から始まっているソフトウェアプロジェクトを検索するための WikiData のクエリも公開されています。

サイトではゼロ・バージョニングを実施している優れたプロジェクトを募集しており、条件に合致すればリストへ追加してもらえるそうです。条件は

  • ゼロ・バージョン(0.*)を採用していたり、長期にわたるゼロ・バージョンの利用があること

そして、以下のいずれかを満たすこと

  • GitHub でスターが1000個以上ついているなど広く知られていること
  • 商用製品やサービスのプロモーション
  • 完成度が高く、インフラを支えていること

バージョン0.*から決して上がらないソフトウェアをお持ちの方は申請してみるのもいいかもしれません。

今までこのゼロ・バージョニングの概念についてはうかつにも知らなかったのですが、サイトのリリース日を見ると2018年の4月1日にはもう公開されていたんですね。

via Hacker News

カテゴリー
技術

アナログなメーターをデジタルなネットワークに接続する

従来の機器についたメーターが示すデータをネットワークで利用するためにカメラと画像認識を組み合わせるという話、つい最近も新型コロナウイルスのワクチンを低温で保管する冷凍庫の温度監視という文脈でNHKニュースで紹介されて話題となってました。

メータのデータは内部に存在するのだから、データを直接取り出すのが技術的には筋が良いように思います。しかし、既存の冷凍庫をこのために新しいものに置き換えるのは費用が掛かるし、別の冷凍庫を監視したくなったらそちらに対応するにはまた別の接続ツールが必要となるでしょう。

人間が読み取る目的のメーターをカメラで読み取るという、一見無駄のあるソリューションにもそれなりの利点があるというわけです。

ピート・ワーデンさん(Pete Warden)がブログで紹介しているのも、そんなメーター読み取りの事例です。

アナログ式のメーターの上にかぶせる形でカメラをつけ、そこからメーターの最新の画像を入手し、

画像中の数字や文字、針の向きなどをソフトウェアで解析して、

メーターで表示されている情報を取り出せます。

あわせて10ユーロもしない IoTマイクロコントローラ ESP32 の載ったマイコンボードと200万画素のカメラモジュール OV2640 の上で、畳み込みニューラルネットワーク(CNN)を作り、文字盤や針を読ませることができているそうです。ソフトウェアは jomjol/AI-on-the-edge-device で公開。

このマイコンボード上からWebインタフェースで読み取り結果を公開してるので、読み取った結果を蓄積するもグラフ化するも、異常値を見てアラートを上げるのも自由ですね。

もちろん同様の商用のソリューションはいろいろあるようですけど、それなりの価格はしそう。安価なマイコンボードと自作ソフトウェアでもここまでできるんですね。