Spinach Forest

January, 2020

/ Revisiting FTrace   / Revisiting Altair   / Fragments #42   / 高速化日記 (10) - The Deprecated Way   / 高速化日記 (9) - Processing Traces   / 高速化日記 (8) - Load Average and Jiffies   / 高速化日記 (7) - Removing Code   / Fragments #41   / Book: Women's Work   / Book: Zero To One / The Startup Way   / Fragments #40   / Link: Graphics and Gaming Development | The Bifrost Shader Core – Arm Developer   / Fragments #39   / Picture Taking Practice, A Month Later.   / 自己デバッグ / Snippets   / 時間予算日記 (18)   / ... 

Revisiting FTrace

|

ふと思い立って ftrace 周辺のドキュメントを軽く冷やかしてみる。数年前から Sphinx ベースになったらしい・・・。

自分の五年前の理解は、間違ってはいないがだいぶ雑だった。

FTrace はもともとはカーネルのコードで GCC のプロファイラオプションというか gprof を使えるようにするというもので、ただカーネル空間にはプロファイラのランタイムがないのでカーネルが自前のランタイムを提供していた、らしい。そのランタイムのインフラに他のトレース機構、たとえば tracepoint が乗っかってきた。ここでいうランタイムは、具体的には CPU スレッド単位のリングバッファ。Android の ATrace もこのバッファに便乗している。

コンパイラが関数単位で instrument するタイプのプロファイラは全然スケールしないので、ある規模以上のコードベースではふつう sampling-based profiler を使う。Linux も perf とかはサンプリングベースだったはず。

ただしそれとは別に、FTrace は "dynamic ftrace" という仕組みを追加した。カーネルのコードをプロファイラ有りでビルドしつつ、ランタイム関数の呼び出しは起動時に全部 nop で塗りつぶす。この塗りつぶしができるよう、呼び出し箇所の一覧を事前に作っておく。そして API で関数を指示すると nop の所にランタイムへの呼び出しを書き戻す。デバッガがやるようなことをカーネルの機能として提供している。たぶん今はこっちの方が主流っぽい。手元の Ubuntu ではふつうに有効になっている。Android はセキュリティのためカーネルを read only にしている都合で無効らしい。でも性能改善のドキュメントで紹介するくらいなら userdebug では有効にしておいてくれや・・・カーネルのリビルドとかやりかたわかんないよ・・・。

そんなかんじで Android からはカーネルの中に明示的にうめこまれた tracepoint たちとユーザ空間から書き込まれたデータしかトレースできない。まあいいんだけど。

Tracepoint のようにプログラマが手で足すにしろ Ftrace のようにコンパイラの助けを借りるにしろ、トレースの記録通知と通知を受けて何をするかは分離されており、イベントハンドラみたいのを(カーネル空間で)登録できる。リングバッファに書き込む、という部分はそのイベントハンドラの責務となっている様子。なかなか正しいデザインと言える。Brendan Greg の BPF 本では BPF をカーネルのイベントハンドラと表現していた。実際トレーシングのインフラがイベントハンドラを提供しているんだね。

Perfetto も自分でトレースフックのカーネルモジュールを書けば効率的にデータを読み出せそうなものだが、そんなカーネル依存のことはしてないだろうなあ。

リングバッファに話をもどすと、バッファには trace_pipe を読むとでてくるテキストが直接書き込まれているわけではなく、何らかのバイナリ列を書き込む。そして trace_pipe を解釈するタイミングでそのバイナリをテキストに整形する。なお ATrace はユーザ空間から任意のテキストを書き込める trace_marker という API を使っているので、じっさいバッファにテキストを書き込む。整形の仕組みをユーザ空間からもアクセスされてくれればよかったのに・・・。なお trace_marker_raw というバイナリ列を直に書き込む API もあることはある。

トレーシングというものの実装としてはだいぶがんばっている例の一つだと思うので、参考のためにもうちょっとコードを読んでみたいもんです。そのうち。

Revisiting Altair

|

久しぶりにログを SQL で調べものをする仕事。二日くらいで終了。

昔にくらべ SQL は相変わらず下手くそだが Pandas/Matplotlib スキルが上がっており、それなりのチャートを Pandas だけで出せるようになってきた。結果として、二年前の "SQL 書くなら Altair 必須" という気分は消え去り、気がつくとぜんぶ Pandas で済ませている。たぶん当時は Pandas と Matplotlib を混ぜて使えなかった。今は Pandas の plot() が matplotlib の薄いラッパであるという事実を活用し、subplot したり axes 重ね書きしたりできるようになった。

とはいえもうちょっとモダンでシュッとしたライブラリを使えた方がいいんじゃね・・・という反省もあり、今回描いたチャートを一通り Altair に移植してみた。が ...mixed feeling. コードはすごいコンパクトかつ宣言的になるし、描かれるチャートもいいかんじ。でも自分の生産性がどれだけあがるかは微妙。

生産性を妨げる要素は、大きく分けて二つある。

ひとつ目は、自分のデータ力の低さ。Altair は入力の DataFrame が tidy data 的に正規化されていることを期待している。Altair が ggplot の追っかけである事実を考えると当たり前の帰結なんだけど、自分の手元のデータは必ずしも tidy でないので reshape しないといけない。でもデータの reshape とか素人には認知的負荷が高いのだよね。Pandas の API もわかんないし。今回のデータでいうと、ひとつ目のチャートは pandas.concat で複数の DataFrame を連結する必要があり、ふたつ目のチャートでは DataFrame.melt というので unpivot した。データの最終型がわかっていればこうした API を探す心の余裕もあるけど、実際の問題の中でごちゃごちゃやってる時には新しい API をみつける気力が無い気がする。同様に SQL も一段階がんばって書かないといけない。最終的に tidy な DataFrame をつくるための小細工とかを SQL に入れる必要があるので。でも SQL とかわかんないのだよ・・・。

一方で Pandas を生で使っていると適当に for 文を回しながらゴミのようなデータから手続き的に欲しい絵が出せるので、問題を考える mental bandwidth を浪費しない。たとえば一つの tidy DataFrame を使うかわりに、二つの単純な SQL のクエリから持ってきた二つの DataFrame を順番に使う、みたいなことができる。ただしコードはゴミ。

Hadley Wickham の Tidyverse がスパルタなデータサイエンティスト養成ギプスとして機能しているように Altair を tidy data 養成ギプスとして受け入れるのがあるべき姿なんだろうけど、自分なんて通りすがりで四半期に一回くらい SQL 書くだけなので、正直そこまでがんばりたくない。弱音吐いちゃう。

ふたつ目は Altair の API ergonomics。

Matlab あたりから延々と鍛え抜かれ磨かれた Pandas/Matplotlib の API は色々ダサいが、一方で使用頻度の高い機能がトップレベルの雑なキーワード引数でズバっと実現できるハフマン符号化的強さがある。しかももれなく SO の回答がある。たとえば outlier を適当に無視しつつレイテンシのグラフを書きたい時、Pandas なら df.plot(...., y='latency', ylim=(0, 10000)...) とかやればいいところで Altair は ....encode(..., y=alt.Y('latency', scale=alt.Scale(domain=(0, 10000), clamp=True)), ...) とか書かないといけない。気持ちはわかるがもうちょっとなんとかなんないんですかね・・・。Altair も所々にショートカットを揃えようという意思は感じるが、ベースの API がやや大げさな上にプロジェクトの若さゆえユーザビリティの苦情による API の圧縮が進んでおらず、上のようなかったるさにしばしば遭遇する。SO も頼りにならない。

Ergonomics 上の問題その二は、ベースにある Vega というオブジェクトモデルが言語非依存なせいで発生する冗長さ。Altair は自分自身がデータを dice and slice する仕組みを色々もっている。まあデータのブレイクダウンが必要なのである程度は仕方ないと思うんだけど、Pandas でやらせてくんないかなあ。一連の Data Transformation の仕組みなんて vega expression というナゾのミニ言語を使わされて、しらねーよという気分。ただし、いまドキュメントをみたら「できるなら Pandas 側でやりましょう。そのほうが便利です」と書いてあるのにきづいた。なんなの・・・。

Altair にせよ Vega にせよ ggplot と戦う気なだけあって色々よく考えられ、その結果としてよく練られた抽象がある。ドキュメントも割とよく書けてる。ただ裏を返すと大袈裟で、学習勾配がきつい。通りすがりのモバイルプログラマにはやや荷が重い。

がしかし!データワナビーとして我々は!背伸びをしてでもモダンなフリをキメるべきではないか!問題解決原理主義者に負けるな!

コードは短くなるしチャートはシュっとしているし DataFrame は Tidy になるし、良いことは良いんだよねー。まあ締め切りの厳しさと相談しつつぼちぼち使っていきたい所存。SQL 仕事だけじゃなく普段のベンチマークの結果整形とかにも使って体を慣らしていくのが良いかもしれない。

追記

Colab の local runtime ではちゃんと動かないことが判明しがっかり・・・。

Fragments #42

|

2020-01-27 (Mon)

  • bradfitz - Leaving Google "3,064 Android CLs" ってすげーな。
  • With SiFive, We Can Change the World - SiFive - MLIRTF Swift もどこにも行かずか・・・。RISC-V が盛り上がるのはいい話だが。
  • 仕事。Field data のモニタリングは他人にすっかりおまかせだったが、なんかちょっと数字ヘンなので調べてといわれ久々に SQL を書く。SQL の文法は以外と忘れていない(というかもともとほとんど知らない)が該当ログの schema を忘れている。そしてコピペしようと覗いた dashboard 用の SQL は、データサイエンティスト氏によってマクロ使いまくりバージョンと化しておりコピペできん・・・。マクロをコピペしつつ、COUNT(*) バージョンから徐々に欲しいクエリに近づけていく作業。気がつくと日が暮れている。はー・・・。
    • ダッシュボードでは 50p と 99p にアグリゲートしている値を雑にサンプルして histogram を書く、というありがちな分析でだいたい仕事終了。レイテンシはは分布がめちゃ right-skewed なので mode と 50p が一致せず、そのせいで色々誤解がありますよね、というような話だった。mode って histgram では一目瞭然だけどどうやって SQL するんだろうな・・・。
    • この field data はさわるたびに不備がみつかり直さなければと思いつつほっとく、ということを繰り返している気がする・・・。
  • 忙しくて放置してるけど budgeting をちゃんとやった方が良いのではないか、と奥様。手間がかかるだけでなくカネの話をするのはほんとにストレスなので(ほらこれが出費でしょ、という話をしては嫌な顔をされる、という展開になりがちなため)個人的には乗り気でないが、配偶者が finance aware になっている機を逃したくない気もして、悩ましい。
    • 出費はでかいやつ(家賃、学校、旅行)が支配的で、日頃の子供のおもちゃとか衣類とか home improvement とか食費は相対的にはどうということはない。(派手な外食とかしないため。)そして家賃、学校、旅行のうちコントロールできるのは旅行である。端的にいえば日本に帰る頻度を毎年から隔年にすれば日頃の出費のザルさはすべて赦される。逆に旅行一回分を日常を通じて節約するのは大変。しかしそうしたポイントを budgeting を通じ commuicate するのは関係性の地雷がありすぎてまったく気が乗らない。
    • 自分のガジェット浪費が渋くなるのを心のどこかで嫌がっているのではないか、といわれるとそれはゼロではないけれど。
    • 前回は給料が半分になる(ベースのみになる)ことがあっても生きていけるようにするという目標でやっていたが、それは割と厳しいことが判明している。その厳しさゆえに発生するストレス(たとえば旅行頻度の低下を説得するプロセス、外食の上限に達したしんどい日の夜など)はしょうじき割にあわない。一歩で budgeting とは本質的に goal setting なので、なにか意味のあるゴールを設定しないといけない。ランダムに線を引いてもあまり意味がない。家を買うとか?別にしたくないしな・・・。
    • なので(家を買うとかアーリーリタイアとかスタートアップで働くとかを諦めた結果)現状とくにカネに困っていないという事実をありがたく享受する方が我々のトータルの幸福には寄与するのではないか、とおもうのだけれど。どうしてまた budgeting したくなったのだろな。ナゾ。
    • といった点をインタビューするのが必要なのでしょう・・・。

2020-01-28 (Tue)

  • Coronavirus outbreak のお知らせが仕事や学校に来ているこの頃ですが娘氏風邪を引いてて心配だわ。しかし今は coronavirus 以前にふつうに flu season なのわかってんのかおまえら。と誰となく。
  • 会社の年次サーベイに答え、愛社精神の継続的喪失を実感する。割とあると思いがちだが、そうでもない。しかしまだ底ではない気配がサーベイの質問項目からは読み取れる。
  • 引き続き SQL 業務。苦情を濡れ衣だと証明する、というと語弊があるが、そんなかんじの仕事。
    • 勤務先はログの保存日数に上限があり、集約していないログは割とすぐ消えてしまう。しかし集約したログがブレイクダウンに必要な dimension を持っているとは限らず、というかもっていなかったので、決定的な結論を導くことはできませんね・・・となった。この dimension を足してほしいけど、そういうスキーマ変更は longitutional な分析を難しくしたりしがちで、どうすりゃいいの。まあどうにかするのは自分の仕事じゃないからいいっちゃいいんだけど。
    • 手元にあるデータの範囲では、申したれられた問題は濡れ衣ですね、と言えそう。しかし実際にブレイクダウンしてみると色々と発見があって面白い。時間があればもうちょっとデータ仕事をやりたいが、なかなか・・・。
    • データすなわちレイテンシの分布の変動幅が厳しい。人々は週末に写真をよくとるわけだが(実体験とも一致する)、アプリというのは頻繁につかわれるとキャッシュにのる確率があがるなどの理由で起動は速くなりがち。しかし自分が知りたいのはアプリの instrincic なレイテンシであって、そういう外部要因は排したいのだよ。どうすりゃいいの、というかそれを廃するための dimension がその集約ログにねーんだよ!もー。
  •  家計簿復活プロジェクトつづき。
    • インタビューの結果、予算策定をしたいという計画指向ではなく月にいくらくらいカネがかかってるのかくらいは把握したいというトラッキングが要望だとわかる。それなら Mint でわからなくもない(というか現状は Mint でみている)が、一方で 説明しがたい使いにくさがある。(この Wirecutter の記事がまあまあ的をいている。) YNAB ほどは頑張れないが Mint よりは柔軟な何かがほしい。自分もそのくらいは頑張って良い気がしてきた。
    • ということでツールを探すと Tiller が一番近そう。もうちょっと調べてから試してみよう。個人的には旅行にいくらかかるのか、交通費と宿代だけでなく E2E で集計したいと常々思っていた。Tiller はそういう用途には向いていそうではある。収入や総資産のトラッキングは Mint にまかせておけばよい。
  • Google Sheet ってなにができるのだろうか・・・Excel と比べたらずっとしょぼいとはいえ、Excel というのは Microsoft の一時代を築いた超巨大製品なわけで、それと戦おうとするならそれなりにだいぶ複雑であることが予想される。そしてガイドブックとかが書かれる時代は終わってしまった気がする。
  • 子に風邪をうつされたらしく、喉が痛い。

2020-01-30 (Thu)

2020-01-29 (Wed)

  • SQL 仕事、は今日でおしまいかな。せっかくなので Colab でレポートを書いてみる。なんか社内バージョンはちょっと機能が多く、レポート書くとかも微妙にやりやすい。しかしこれパブリックにしない理由はないと思うのだが、相変わらずの内外断絶・・・。
  • How we retired Python 2 and improved developer happiness | LinkedIn Engineering みな苦労してる・・・。自分も新しいコードは Python3 で書くようにしてるけど、古いコード結構あるよだよな・・・。
  • San Diego から出張中の同僚が PS4 と書かれたジャージを着ていた。昔仕事でやっていたという。San Diego にはたしかにソニーがあるらしい。San Diego が大都市なのか、Sony が大企業なのか。両方か。
  • What’s new in 1.0.0 (January 29, 2020) — pandas 1.0.0 documentation 検索していて気づいたが、もうすぐ 1.0 になるのか。そして deprecated API が removed とかいってる・・・。
    • Pandas 1.0 | Hacker News なんか HN でも盛り上がってるな。今日リリースだったの?なんか RC ってかいてあるけど。

2020-01-31 (Fri)

2020-02-01 (Sat)

  • 妻子めずらしく週末プレイデートに外出中のため留守番。Tiller をセットアップする。よしよし。しかし風邪のため脳が働かずセットアップだけで終了。

2020-02-02 (Sun)

  • 凧揚げ。強風のためすごい勢いであがり、紐で指を切る。
  • 喘息は軟調。

高速化日記 (10) - The Deprecated Way

|

前回かいた Systrace (というか Ftrace) データのパース、やろうとおもいつつ procrastinate していた理由の一つは、それより Perfetto の trace processor を使う方が良いのではと思っていたからだった。が、まあ気のせいだったね。

Trace processor は Perfetto のダンプに sqlite でアクセスできる機能があり、これは魅力的である。ただ現実には自分は特別 SQL が流暢ではないので Python で regexp して Pandas で加工した方が速いし、できることも多い。例えばこのあいだアロケーションのレイテンシとサイズの相関を求めたが、その解釈にはネストした trace section を紐付ける必要がある。これは for 文で書けば自明だが SQL だとどうしていいかわからん。しかもその trace processor には Pandas インテグレーションとかがないので可視化もできない。使えねー。

より深刻な問題は Perfetto が lossy である点。Perfetto はオンデバイスのコマンドで、自分でバッファを持っている。ということは ATrace の API も Perfetto に直接フィードするのかな・・・と思いきやそんなことはなく、引き続きカーネルの trace_marker書き込んでいる。言われてみれば atrace/systrace の動作を壊すわけにはいかないので当たり前だが、つまり Perfetto は ftrace のバッファをパースして Perfetto の protobuf に詰め替えているということである。しかもオンデバイスで!まじか。そんなことで余計な CPU サイクル使わないでくれよ・・・しかもオンデバイスなんてロジックにバグあったら直せないじゃん・・・デバイスの外でやれよ・・・。

オンデバイスでやりたいのはオンメモリのバッファでけでなくファイルに書き出す長時間トレースをサポートしないなどの事情と関係あるのは理解している。しかしトレードオフには納得できない。実際、Q のオンデバイストレース (perfetto フォーマット) を Systrace のデータに変換しようとすると失敗したり、エラーにはならないが表示が壊れることがしょっちゅうある。一方で Perfetto ネイティブなビューアは機能がたらない。だめじゃん。Perfetto Native UI は wasm とかをつかっているあたり、いかにも実用的なものをつくる気のなさを感じる。というとディスりすぎかもしれないが。

自分が Perfetto への乗り換えを考えていたのは Q から on-device tracing のフォーマットが Perfetto に変更されたからだが、こうした不利益をわざわざ受け入れる必要はないと考えを改めた。特に ATrace が引き続き ftrace に依存している事実を考えると ftrace のバッファが the source of the truth なわけで、間に lossy な Perfetto を挟むのはリスク。やめやめ。引き続き Systrace で生きていきますわ。

Perfetto は Chrome と Android 共通のインフラにすると主張している。そんなら Chrome で枯らした後で Android に持ってきてほしかった。勤務先には "a shiny but work in progress way と a functional but deprecated way がある" という格言がある。Perfetto はその一例になっている感。そういう場合は常に the deprecated way を進めというのが先人の知恵で、自分はそれを体現してしまったのだった。Sigh.

追記

Perfetto の UI がバージョンアップし、以前は表示されなかったメトリクスが見えるようになった。そして後ろの席の同僚は文句をいいつつがんばって perfetto コマンドを使っていた。そうですね我々会社員には使ってバグを踏んで報告して直させる、という暗黙の責務もあるんですよね・・・。職業倫理の差を感じる。はーつかうか・・・しかし Colab から読めねーんだよなー・・・ヒマなら業務外で Perfetto に首を突っ込みたい所だがちょっとなー・・・。

高速化日記 (9) - Processing Traces

|

前回のつづき。

機能 F が招くコマ落ちの原因探求、最初の被疑者たる CPU 負荷は無罪の見通しとなったため、他の指標をさがす。

コマ落ちの直接の原因である HAL API A のレイテンシは機能 F の有無でどのくらい違うんだろうか。Systrace の HTML を肉眼で眺めていてもいまいち決定的な違いが見えない。重い腰を挙げて Colab を開き、適当に正規表現を書いて Systrace 内のデータに含まれる該当 API のトレースを読んでレイテンシを抜き出す。そして時系列にプロットしてみる。

と、やはり F 有効時はちょっと悪い気がする。しかしなぜかがわからない・・・。

さて、件の API は何かと言うと、共有メモリ (gralloc) のアロケーションである。そして件の API 内部のトレースには要求されたメモリのサイズが書いてある。このサイズを見ると、誰が要求したメモリなのかがひと目でわかる。そしてサイズがでかいほどレイテンシは大きくなりがち。

ふと思い立ってパーサのロジックを書き足し、プロット (scatterplot) にサイズを反映してみる。X 軸を時系列、Y をレイテンシ。サイズを色に割り振ると・・・やはりサイズがでかいアロケーションは遅い。そして F 有効時はそもそも「サイズのでかいアロケーション」の数が多い!沢山の細かいアロケーションに隠れていて気づかなかったが、こりゃ遅くなるわ!アプリのログや同僚へのインタビューでこの事実を確認する。振り返るとアルゴリズムの性質から自然な帰結である。OMG.

この初歩的な問題に何週間も気づいてなかったのは shame. 肉眼さん・・・。

API リクエストの頻度自体は他の機能によるリクエストが支配的で、総数は機能 F の有無で大きな差はない。しかし他の機能がリクエストするアロケーションはぜんぶサイズが小さい。F によるアロケーションはでかい。しかも F のスレッドが直接リクエストを発行するのではなく、F がメモリを長時間保有するせいで普段はプロセス内で資源が再利用され省略されるアロケーションが発生してしまうという間接的な症状なのでグチャっとしたトレースを睨むだけでは気付けなかった。

というわけで可視化重要。あとゴチャっとしたデータをパースして構造化するのも重要。トレースをパースするコード片を書き溜めないとな。

可視化素人としては subplot の利用と scatterplot の color axis を使えるようになったのが最近のブレークスルーであった。

高速化日記 (8) - Load Average and Jiffies

|

とある機能 F を有効にするととある操作 T のあとでコマ落ちするという、ユーザ(上司)の手元では再現するが手元での再現率がいまいちなバグを直そうと苦戦しつつはや数週間。

ハイレベルには、F を有効にした状態で操作 T をトリガーすると瞬間的に CPU の負荷が跳ね上がり、画像パイプラインのクリティカルパスにある HAL API である A のレイテンシがフレームレートを超えてしまい、コマ落ちに至る。

A のレイテンシは普段は余裕で予算に収まるのだが、他のタスクが増えると CPU のサイクルを奪われて遅くなる。症状から A の重要性は明らかなので A が動くスレッドを SCHED_FIFO にしましょうと主張してパッチを書いたが、OS のひとにインパクトでかすぎるのでダメと押し返されうーむとなる。

なお HAL の一部では SCHED_FIFO はぼちぼち使われている...まあ「ぼちぼち」は overstatement かもしれないですね。はい。従ってこの問題は priority inheritance で解決されるのが筋だが、俺のせいじゃねー的 API のせいでその仕組みは使えないのだった。


それはさておき操作 T 発動時の CPU 負荷は機能 F の有無に関わらずどのみち高く、全てのコアが振り切る。機能 F のアルゴリズムが高価なのは事実だろうが、ほんとにコマ落ちの有無を決めるような規模のインパクトがあるのだろうか。こういう雑な仮説を盲目的に信じては痛い目に逢い続けて数年、いちおう検証しておこうと思い立つ。

タスクが多すぎてタイムスライスがもらえないとか、ロードアベレージみたいなのをみればいいんだっけ?と検索すると Brendan Gregg のブログがヒット。要約すると Linux の load average の数字は微妙なので他の指標を使っときなよとのこと。他の指標としては BPF が使えるよ、とかいうが Android でそれは大変。別の候補として紹介されている  /proc/schedstat ファイルを polling してみることにする。

ドキュメントおよびインターネットによると同ファイル内で "sum of all time spent waiting to run by tasks on this processor (in jiffies)" という数字を監視すればよいようだが、Jiffies ってなんやねん。その manpage およびインターネットによるとスケジューラのクロック、たとえば 100Hz だったら 10ms とからしい。なるほど・・・と値を眺めるが、全然合ってない。桁がいくつもちがう。最初は自分の雑なコードが計算ミスをしてるのかと思ったがそんなこともなさそうな雰囲気。はーなんだこりゃ・・・と落胆して帰宅。

翌日気を取り直してカーネルのコードを睨むと、数字の出どころは sched_clock() という関数らしい。実装が複数あるのでよくわからないが、ドキュメントは単位をナノ秒と主張している。 10ms と 1ns じゃだいぶ違うわけだわ・・・。ナノ秒として計算してみるとそれっぽい数字になる。やれやれ。カーネルのドキュメントも案外信用できない。


さてこうして計算したオレオレロードアベレージを定期的に ATrace_setCounter() しつつアプリをつついてトレースを眺めたところ・・・機能 F が有効だろうが無効だろうがロードに全然違いがない。

冷静になってトレースを見直すと機能 F はスレッドが一つ増えはするものの大した並列度はなく、そのスレッドも GPU に計算を投げたり他のスレッドの計算結果を待ったりで必ずしも全力では回っていない。仮説敗れる。はー・・・。

ではなぜ機能 F はコマ落ちを招くのだろうか。ユーザ(上司)の思い込み?でも自分の手元で問題がおきるときも機能 F の有無は影響ある気がするのだよなあ。


そして書いていて気づいたがトレースには sched の tracepoint が含まれているのだからカーネルが集めた stats を使うより自分で事後的に計算した方が色々わかることが多いきがする。たとえばカーネルの stats ではレイテンシの分布はわからない。ただその計算をするにはもうちょっとカーネル詳しくならんとムリだな。はー・・・。

高速化日記 (7) - Removing Code

|

年末にハカソンがあったので、自分は機能を削るとどれだけ起動が速くなるか実際にコードを消して調べることにした。一つ一つモードを消し、UI を外し・・・と一週間コードを消し続けた。しかし一ミリも速くならなかった。がっかり。

理由を考える。

まず前向きな理由がありうる: 余計なコードはクリティカルパスから取り除かれている。自分は余計なものをクリティカルパスからどかす作業を延々とやってきたわけだから、これはまあまあ的をいている。一方で、どうにも信じがたい。

最初の論点と少し関係がある仮説:起動などを遅くしているのは、モードや UI といった user facing feature のコードではなくフラグの定義やモニタリングのようなインフラっぽいコードである。そういうコードはどのみち消せないことがわかっているのでがんばって消すことをしなかったが、実際はまあまあクリティカルパスにあるのでほんとは消してみるべきだったのかもしれない。ただあちこちに断片的に埋め込まれてるので消すのが難しいのだよね。

このハカソンの少し前にフラグ取得の IPC がフラグの数だけ呼ばれまくっていたのを助っ人高速化隊のエースが発見し、それをバッチ化したら起動がぐっと速くなる出来事があった。これはインフラ税の存在を裏付けている。

自分が消していない部分に遅さがあるという意味だと、画像処理や C++ の中にある余計なコードがクリティカルパスにある可能性もある。画像処理パイプラインの「機能」は、わかる人には消せるのかもしれないが自分にはむずかしい。そしてこれらの「機能」は年々複雑化が進み、遅くなっている。

もうちょっと red herring な説: 一旦コードに持ち込まれた複雑さは、単純にコードを消すだけではキャンセルすることができない。たとえば新しい機能のためにリファクタリングして間接化や抽象化を足したとする。コードを消すと抽象化の裏にある実装は消えるが、抽象や間接化そのものが消えるわけではない。コードを消したら、そのあとよくコードを読み直して余計な抽象化を見つけ出し、それをベタなコードになおしてはじめてオーバーヘッドを取り除くことができる。かもしれない。自分は心の奥底でこの説を信じている一方、検証するのは難しいいイチャモンという面もあるのであまり強く主張する気にもなれない。


いずれにせよ「コードがでかくなると遅くなる」というのは必ずしも絶対的な真実ではないし、逆が真とも限らない。たとえばデスクトップ環境に巨大なアプリをインストールしたところで(そのアプリを起動しなければ)対して遅くはならない。一方でサーバに daemon の類をインストールすれば少しは遅くなるだろう。Android のアプリはその間くらい。単一プログラム内の余計なコードがデスクトップアプリのインストールとサーバの daemon のどちらに近いかは、ケースバイケース。というわけで「コードがでかい = 遅い」は経験則のひとつに留め、鵜呑みするのはやめましょう、という話。

そしてコードを消す話をするといつもこれを思い出してしまう人生の呪い。

Fragments #41

|

2020-01-20 (Mon)

  • 下痢。ウイルス性かと心配したが痛みがない。調べると "発熱をともなわない下痢はほとんどが飲みすぎ、食べすぎ、冷えが原因です。" あ、はい・・・。
  • Why Kids Fight Getting Dressed - NYT Parenting 朝、時間どおりに家を出られないのが引き続き大きなストレス源になっているが、これは逃れられない税金として受け入れた方が精神衛生のためだな、と思うに至った。
    • 共働きだと夫婦ともに出勤 deadline があるのでインセンティブが揃っているが、片働きだと働いている方しか出勤 deadline がないので夫婦のインセンティブが異なる。そして当然ながらクリティカルパスは出勤しない側に存在しがちである。(出勤する側は全力でパスを最適化するが、出勤しない側は気にしない/他のプライオリティをとるから。)通学の依存ツリーから自分をデタッチするのが世間では一般的な解決策とされているが、自分の場合それはそれで夫婦関係悪化などのリスクがあるのでやっていない。結果として他人が持っている(がゆえにコントロールできない)クリティカルパス、およびこの自分のインセンティブを理解してもらえない事実がフラストレーションを生んでいる。
    • が、子の年齢が上がりたとえば Kinder なりまで進めば子の遅刻自体に consequence が生まれるため、親は労働の有無によらず deadline に間に合わせる動機が生まれる。つまり(通学の deadline と出勤の deadline が乖離しない限り)時の流れが問題を解決してくれるはずである。あと 2-3 年、朝は遅刻して労働時間のコミットメントを果たせない現実を税金として受け入れる。そういう諦めが求められている。
    • このストレスから思うに、自分は朝早く仕事にいくのが割と好きだったのだなと思う。朝、静かで仕事はかどるからいいよね。あと 2-3 年の辛抱であることよ。

2020-01-21 (Tue)

  • Every Google result now looks like an ad | Hacker News ふーんとおもって試しに ddg をブラウザのデフォルト検索にしてみるが・・・。こっちも favicon あるじゃんよ。大差なくね?まあしばらく試してみよう(デスクトップのみ。)
    • 設定で
  • ジムで走りがてら BPF Performance Tools (Book) をちらちら読んでいる。この本を眺めつつ性能分析の仕事をしていると、BPF のツールとクライアントサイドの相性について色々考えてしまう。端的にいうと BPF はいいかもしらんが bpftrace はクライアントサイドというか Android 向いてないね. procfs を poll する雑なコードを書くのはもううんざりなので BPF 自体は使えるようになりたい気がする。ただ BCC もクロス環境で使われるのが苦手っぽい雰囲気なのでなんとも・・・というかんじ。なぜか FB ががんばっているので、もうひと頑張りして Android を助けてくれ!たのむ!
  • Tracing Summit 2019 ついでに眺めるが・・・これといった発見はなし.

2020-01-22 (Wed)

  • 雨なのでバス通勤。あやうく FB 行きのバスに乗りかかり、運転手に言われて気づく。おっと。
  • プリスクールで育児コンサルタントみたいな人のトークがあるので聞いてきてと頼まれ仕事を早めに切り上げ参加。割とよかった。育児書には色々な suggestion が載っているが量が多くて記憶からこぼれがち。一時間くらいのトークの内容なら脳にフィットする気がする。コンテンツを小出しにすることの、コンテンツ消費側にとっての利点ってあるよな。

2020-01-23 (Thu)

  • 子が朝起きず、結果としてまた労働時間喪失。起きない子を無理やり起こすのが望ましいとも限らず、というのは不機嫌になるので、起こさない選択を間違っているという気もないが、そうしたプライオリティの帰結が個人的に好ましいとは限らないのも事実。諦めはついているが、だからといってストレスが下がるわけでもない。
  • アプリの性能問題、報告されてるのと同じ症状が自分の手元でも起きる!やったぞ!とデータをあつめたのち、 slowdown は開発バージョンの OS が壊れていたせいっぽいと判明。おまえらのバグに付き合ってるヒマはねーんだ!ということで安定してるトレインに移動。やれやれ・・・。こうやって電話機をリセットするたびにインストールしなおすアプリの数が減っていき、現実世界のバグ発生環境から遠のいていく。
  • Fi の data sim 到着。これで二台持ちはおさらばだ!
  • W-2 が来たので tax filing をはじめなければ・・・。どうせ証券方面の書類が当分揃わないので完了はできないが、埋められるところを埋めておくのはよいことだと信じている。
    • それにしても毎年思うこととして配当は罠である。どうせすぐ再投資されてしまうので手元でキャッシュになる瞬間はないのに、ウッとなる金額が課税される。かつ額が予測できないので事前納税も難しい。何も間違ってはいないが、なんとなく納得いかない。
  • 書いている文章が行き詰まる。むー。

 

2020-01-24 (Fri)

  • なぜGoogleはKotlinが広まり始めたのにまた別のFlutter (Dart) を広めてるんですか?今からAndroidやるにはReactNative等含め、どの手法が良いと思いますか? - Quora おまえらは大企業というものをわかっていないようだな・・・。それはさておき今年こそ Kotlin 入れたいもんだなあ。
  • 仕事で書いてるどうでもいいちっこい C++ バイナリ (負荷発生、デバイス状態取得など)をオープンソースにしたいなあキャッキャウフフ的な意味で・・・とぼんやり考える。
    • プロセスはまあ、たいしたことなかろう。なぜなら書いてるものがゴミだから。
    • しかしビルドシステムがめんどくさい。Bazel が一番ラクそうではあるけれど、社内のインフラに乗ると何も考えなくても Android 向けのバイナリを作れるのでそれと比べると boilerplate が理不尽に感じてしまう。スポイルされている。
    • あと下手に GitHub とかに持っていってしまうと自分はともかく同僚に使ってもらうのがかったるくなる問題もある。会社のレポジトリに逆輸入すればいいんだけど、その作業もかったるいし。まあ同僚使わないと思うけどね。
    • ところでバイナリつくるくらいなら Rust でもいいんじゃね?など魔が差して調べると・・・こんなかんじらしい。なんで make_standalone_toolchain.py とか実行しないとダメなんだよ Bazel を見習えよ・・・。
      • ためしに make_standalone_toolchain.py してみると... "WARNING:__main__:make_standalone_toolchain.py is no longer necessary." というわけでやはりいらんかった。Rust が悪いわけではないが、誰か・・・というか公式ドキュメントに最新の手順を書いておいてくれよ・・・。世間で一番台数がでているクライアントサイドのプラットフォーム向けのバイナリを作る方法が文書化されていないクライアントサイド向け言語とかどうなの。サーバ側のシステムソフトウェアなんて Go で書くから Rust いらないじゃん。やる気出せよ・・・。
      • ビルドもだめだけど、ブログとか NDK の API を呼ぶ方法が全然のってないじゃんよ。FFI 生成とかあるんでしょ。おしえてくれ。そういうのが大事じゃないのかい・・・。Java 側からどうつなぐとかどうでもいいっつうの。(よくはない。)
    • しかし仕事で使うコードを Rust で書くにはどのみち練度が足りないな。同じことをやるのに C++ なら一瞬だし・・・。
    • ついでにいうと、仕事をやるなら仕事の環境にくっつけて書くのが一番ラクなのでオープンソースめんどくせー的盛り上がらなさがある。これを乗り越える意欲がないのが至らなさなわけだが。

2020-01-25 (Sat)

  • 一年で一番寒い月のはずだが底が 40F 以上あってもう冬おわっちゃった?みたいな気分。
  • W-2 きたので納税作業はじめます・・・。納税の無駄な大変さの諸悪の根源は Intuit のロビイングというのが最近の個人的な立場。
  • What happened to Mint? | Hacker News ほんと、こういう惜しいものっていっぱいあるよね。でも Mint だけでなくて勤務先の諸サービスもソーシャルメディアもぜんぶそうだよな。

2020-01-26 (Sun)

  • At Starbucks. 雨。
  • お手紙送付業。先週は建て込みすぎで忘れてた・・・。
  • DDG に切り替えてからおよそ一週間。そんなには困らない。気分としてはむかし購読してる新聞を乗り換えた時のなれない感じに似ている。ピンポイントで探しものをする navigational query はいまいちで、Google に fallback することが多い。あとたまに日本語で検索するとだいぶいまいち。ロングテールの検索品質は労働集約的なのだろうなと思う。モバイルはアプリの出来が違いすぎて論外。
  • AWS Graviton2 – Perspectives 一年でちゃんと世代上げてくるとは優秀だなー。

 

Book: Women's Work

|

Women's Work: A Reckoning with Work and Home

The Decade of the Parenting Manual - NYT Parenting で紹介されていたので読んでみた。ここにある本は半分くらい読んでおり我ながらサヨリべすぎて苦笑。そしてマニュアルではなく読み物ばかりだな、このリスト。

この "Women's Work" も例にもれず子育てガイドではなく読み物だった。著者自身の Memoir. もともと新聞記者の海外特派員だった著者が中国(北京)で妊娠し(配偶者もジャーナリストとして一緒に中国にいた)、新聞社の仕事をやめて子育てしながら本を書いてライターとしてのキャリアを続けようとする。しかし非協力的な夫を通じてジェンダー格差の現実に面し仕事が進まず、仕方なく nanny を雇ってみたら今度は中国の貧困やジェンダー格差に加担している自分に気づき思い悩む、という話。途中で第二子が生まれ、そのタイミングで夫の仕事の都合にあわせインド(New Delhi)に引っ越す。そこでまた nanny を雇い、同じ悩みを繰り返す。

ここで終わると傲慢なアメリカ人のうざい独り言なのだが、後半ではジャーナリストとして過去に自分が雇った(そのうち一人はクビにした)nanny に会いに行ってインタビューをする。そこは面白い。自分が employee として見ていた nanny たちのおかれた現実をジャーナリストとして revisit する著者の倫理的葛藤みたいのがよく書けている。

あと「うざい独り言」はやや言い過ぎで、自分も外国で子を育てている手前、そこにはある種の共感があった(インドに住むアメリカ人と比べるとカネの力で殴る経済力はないが)。そして自分はジェンダー格差の受益者なので、著者が夫にブチ切れるところでは胃が痛んだ。この手の本にでてくる夫は割とみんなひどい気がするのだが、自分がそうでないとなぜ言えよう・・・。

Amazon のレビューを見ると "White Privilege Horror Show" という批判がある。でも著者はそれに自覚的で、けれどその傲慢さを隠さない正直さみたいなのが面白いと思う。自分も読んでいる途中で著者のアメリカ人っぷりに笑ってしまう箇所がいくつもあった。書き手としての「声」がある点で「正しさ」に塗り固められた Lean In より個人的には好ましい。声といえば audiobook の narration はその鼻持ちなら無さを完璧にとらえており、最近きいた audiobook の中では最高峰の出来。


子供ができたら親である自分のキャリアは終わる。それは仕方ない。理由はどうであれ、多くの母親が仕事を辞め専業母親化する事実がそれを伝えている。そうしたコストの fair share を引き取ろうとしたら、定時強制の化石技能な万年末端になるくらいは妥当。理屈ではそうわかっていても、日々の impluse がしらずしらずのうちに privilege を claim してしまう。たまにこういう本を読み calibrate していきたい。

Book: Zero To One / The Startup Way

|

割と良かった。スタートアップは陰謀論でカルトなんだよ!と衒いもなく言い切る政治的正しく無さといい、なにかと引用される文献が渋いところといい、ファンもアンチも多いのがよくわかる。過剰なかっこよさ。あと薄いのも良いね。個人的には、世界の秘密を暴けるような仕事がよいという下りがよかった。


リーンスタートアップどういう話か忘れてたのでいい復習になった。ちゃんと innovation accounting してる企業がどれだけあるのか見当もつかないし大企業にそれを売り込める気もまったくしないが、シリコンバレーの会社というのはこういうのを読んだり本物のスタートアップで体感したりした下々が草の根的に存在するので、上の方が雑でも少しはスタートアップ・ウェイがまじりこむのだろうなと思った。

Amazon のレビューを読むと「風呂敷広げすぎ」「よくある企業改革論」みたいな批判が目につく。まあそうなのだろうね。アイデアは Lean Startup から変わってない気がするので。


こういうビジネス書を読んではなくそほじりながらフンフンとかいってるあたり我ながらおっさんだなー。ちなみに actionable な要素は特になし。

Fragments #40

|

2020-01-19 (Sun)

  • 金曜夜に子が乱調対応で就寝が遅れ土曜の朝が失われ、今日は子の birthday party のため何もできず。
  • というわけで子の誕生日会。プリスクールの同級生20人、あるいはプレスクールで同じ「グループ」の 6 人全員を呼ぶ親も多い中、子と中の良い友達二人とその両親という小さな招待のうえ自宅でひっそり開催。自分たちにはこのくらいの規模が適切という感想。
  • 朝に運動をし、かつ8時間睡眠を目指すという組み合わせの結果、夜にがんばって早寝せず21時までに寝れば良いというリズムが出来てきた。早起きしてもまとまった時間が増えるわけではないから早寝の動機ががない。結果として日によっては多少夜に余裕がある。しかし気合の入れた作業はできない時間帯なので、日記を書くなり家のことを考えるなりしたい。まあ家事雑用で消える方が多いが。
  • Holidays を挟んだ結果非公開 fragments が失われ、どうでもいいことを書き散らしがち。来週から再開したい所存。

2020-01-17 (Fri)

  • 4 時に目が覚めてしまい、寝付けず。今日は寝不足確定・・・。
  • Trillion-Dollar Company: Google Reaches Milestone in Market Value - The New York Times 株価上がってるのか。なんでだろうね。なお他に A, A, M も trillion らしい。
    • なお founder 完全引退のニュースを見た時は寂しい気持ちになったが、内省するにどちらかというとせいせいした、という晴れ晴れしさがあるので自分はそんなにファウンダの皆様が好きではなかったのだろうな。嫌いじゃないけどね。
  • 社内の hg 拡張がすごい勢いで開発されていて便利なのはいいがこいつらちゃんと upstream してるのかな・・・と Mercurial の repo を眺めるとそれなりに勤務先の人いるね。しかしそんなのはより大きな発見の前に忘れ去られた。こいつら・・・Rust で書き直してるぞ!!!まじで!!!(コード説明)なんだよ!何楽しいことやってんだよ!!!熱い話じゃないですか。先は長そうだが。とりあえずこのメンテナの人は色々ロックなオーラを出してるのでブログを購読しとこう。
  • デッドロックの疑いからスレッドダンプを眺めていたらまたスレッド増やしてるやつがいるな(適当な罵詈雑言を挿入してください)。スレッド警察やるの他人の尻拭いな割にメンタル消費していやなんだけど、そろそろ真面目に統制すべきかもしれない・・・。
  • 全体的に HAL いじりに没入しすぎて duty を果たせてないので今日はトリアージしたり計画立てたりします。はい・・・。
  • なんか世の中を賑わせてるっぽい DX (digital transformation) というのが何なのか全くわからないのだが、なんなの・・・。Buzzword なのはわかっているが、それにしてもわからない。Anthos くらいわからない。なんとなく Anthos と DX は同じ地平に属している気がするのだが・・・
    • 検索して気づいたこととして、検索結果ページの Ad の区別がまた一段と subtle になったね。どうなのこれは・・・。
    • Leading Digital という本を読めばわかるらしいが、まあ社長サンに頑張っていただこう(気が向いたら聴く)
  • Goodbye, New York, California and Illinois – Hello where? | Hacker News Sigh.

2020-01-16 (Thu)

  • HAL 日記
    • コードを読んでいるうち無駄に HwBinder に詳しくなってしまった・・・。基本的には Binder のコピペっぽく、そのへんのコードはすごい昔に読んだことがある気がするが、目的意識(直したいバグ)を持って読むと理解が捗るというものである。HAL だけじゃなくフレームワーク側もいじれればすごい正しく直せるきがするが、それもどうか・・・。電話機ベンダーがフレームワークいじるのは(アプリ開発者的には)クソ迷惑と思っていたが、気持ちはわかるね。
    • Binder のカーネルモジュールをみるとかなり丁寧に trace が入っており、この情報 Systrace で見れないのだろうか・・・とおもいたちふと Systrace  出力のダンプを grep したらふつうに ftrace のデータとして埋め込まれていた。便利。しかし HTMLを grep する必要があるのどうなの・・・。
    • はー久しぶりに仕事すすまねーモードだなー。
  • 丁寧にお願いを書いたレビューに blunt な質問がきたのでつい blunt に回答してしまい反省。あらゆるテキストフィールドには real-time sentiment analysis が必要。
  • 性能関係成果アピールのニュースレターを書くから9月以降やったことをおしえてちょ、と言われたのでコミットを眺めたが、大したことはなにもしてなかった・・・。電話機出た後はリファクタリングだけやってたため。

2020-01-15 (Wed)

  • HAL 日記
    • 色々と無理ゲー感・・・。何事もトレードオフだが・・・。
    • この変更は微妙でまたダメだしされそうだがやるだけやる、というコードを書いている。
    • 上司と 1:1. この HAL 日記バグどのくらい時間かけたもんですかね、という話をする。まあ意義があれると思うならいいんじゃないの、というような返事。価値判断丸投げができる身分ではなかった。はい。
  • Google Fi には Data SIM なるものがあり、データのみの SIM を無料で追加できると教わる。二台持ちの煩わしさと戦うにはもってこいに思える。そろそろ諦めて Fi にする潮時かなあ。
  • BrendanEich on Twitter: "@SiskoBaseball @HeimishCon Your tweet reeks of bad conscience. In 2014-15, I could not get funding or a job, went outside valley to found Brave, took big pay cut & still-substantial long-term risk. (Compare to chart for top job at Mozilla vs. "performance".) I'm not complaining, but you are spinning. Why? https://t.co/XRNyDvuZfO" / Twitter Mozilla のレイオフに元 CTO が物申しているが、そのせいで "cancel culture" という言葉の存在に気がついてしまった・・・
  • Mozilla lays off 70 | Hacker News 求職スレで求人している人をみていて気づいたこととして、元 Mozilla CTO で JIT とか FxOS やってたのち起業した Andreas Gal は Apple にいるらしい。なぜなら買収されたからである!こういうガチ勢が組織の上の方にいる Apple はかっこいい会社であることよ。どのくらい上なのかわからんけど VP くらいなのかな? いくら元勤務先のリストラとはいえ、VP が HN でヘッドハントしてるの面白いね。それにしてもプログラマをクビにするとはなかなか重症。
  • 会社のとある偉い人が圧倒的に正しいが完全に羨ましいことを始めるという話を聞き、完全に羨ましい一方で偉い人が圧倒的に正しいことをしているのにほっこりする。そういうやんちゃがどこかでは許されている、というのはいい話であることよ。
  • というわけで思い切って Fi に切り替えたぞ!T-mo は明示的な解約は電話が必要っぽいが、そもそも prepaid なので autopay を切ってほっとけばそのうちなくなるでしょう、ということで autopay を切る。Data SIM も注文。無料。

2020-01-14 (Tue)

  • おうちの用事で一回休み。
  • 母親の iPhone および iPad が寿命らしい。買ってあげたいのはやまやまだがセットアップの面倒を見てあげられないという無力感。オンラインでギフトとして購入店頭受け取りにしてもらえばいいのだろうか。

2020-01-13 (Mon)

  • Fitbit の睡眠スコアが 80 を超え、朝ジムも行き、完璧な朝。しかし仕事のやるきはふつう。
  • ソフトウェアエンジニアとして心がけていること|Satoshi Nakagawa|note 自分はなるべくライブラリやインフラはやらないようにしている。それはそれで理由がないではないけれど、やはり活躍して偉くなる人は違うなと思うなど。まあ何事も身の丈であるよ。
  • HAL 日記
    • アプリのレイヤで小細工できないかな・・・と一歩下がって考え直すが、できないという結論に。Sigh.
    • どんなコードベースに踏み込んでも最初にやるのは pthread_setname_np() してまわることである。まったくおまえらときたら・・・。std::thread が引数にスレッド名を取らないのが全て悪い。
    • 色々と悪口をいいたくなってしまうがここに書くべきではない。

Link: Graphics and Gaming Development | The Bifrost Shader Core – Arm Developer

via Graphics and Gaming Development | The Bifrost Shader Core – Arm Developer

ARM の割と新しめな GPU (Bifrost) の資料を眺める。

ARM の GPU には複数の "Shader Core" がある。最大で 32 個くらい。NVIDIA の GPU でいう SM に相当する、とおもわれる。

個々の Shader Core には複数の "Execution Engine" が入っている。上の資料で参照されている G71 というやつ(最新ではない)だと 3 つの EE が入っているらしい。EE  は NVIDIA の GPU でいうところの "CUDA Core" みたいなものだと思われる。

適当な NVIDIA の GPU (ここでは Turing) の資料とくらべてみる。

Turing の SM の数は、構成によって 28-72 個である。一方で SM あたりの CUDA Core の数は 64-128 である。この比率は ARM GPU とだいぶ違う。SM/Share Core の数はせいぜい数倍程度しか違わない一方、それらあたりの EE / CUDA Core の数は 10-20 倍違う。ARM も EE の SIMD 並列化を "Warp" と呼んでいるが、NVIDIA の Warp と比べると断然狭い、グラフィクスの頂点一個を並列処理するくらいがせいぜいに見える。

これは自分の直感の逆だった。ARM の GPU は、SIMD つきのシンプルなマルチコア CPU といった風情。しかもコア数が CPU より多い。GPU はおもったよりたくさんの異種タスクを詰め込めるように見える(他にボトルネックがなければ)。一方で NVIDIA の GPU が想定されているようなでかいベクトルをバンと並列に計算する能力を個々の Shader Core は持っていない。

これは・・・どうなの?少なくとも OpenGL を使っている限り単一プロセスがこのマルチコアの性能を完全に引き出すことはできないよね。なぜなら OpenGL はマルチスレッドのタスクを投げられない・・・というと語弊があるが投げにくいから。もちろんでかい頂点列をマルチコア向けに分割して処理するくらいは GPU なりドライバなりがやってると思うけれども, NVIDIA が暗に築いてきたメンタルモデルを逆手に取る利点はなんかあるのだろうか・・・。不思議。まあ色々なプロセスやスレッドから同時に叩かれるのを助ける面はあるかもしれない。

ARM GPU の理解を深めても自分の役には立たない。Qualcomm の GPU はどうなってんだろう・・・と調べるが、さっぱりわからん。相変わらずだなこいつらは・・・。

Fragments #39

|

2020-01-12 (Sun)

  • 奇妙な夢を見て夜中に目が覚め、親が死んだらロジスティクスどうしよう・・・と仕方のないことを考えてしまい一時間くらい睡眠消失。ぼんやり覚えている結論は、自分の所持する日本円では葬式ができないので誰かに金を借りる必要があるということだったが、他に心配することあんだろ。
  • At Starbucks. 車の窓が凍っていた。ようやく冬らしい日。
  • Amazon, no rush shipping の他に less waster shipping みたいなダンボール少なくなるオプションが欲しい。しかしそれやっちゃうとダンボールの必要性を問われて藪蛇だからムリかな・・・。
    • How to Reduce Your Amazon Packaging Waste 発送をまとめろという主張。まあそうっすね・・・。No rush にすると勝手にまとめるみたいな仕組みが欲しい気もするが、そもそも発送元の倉庫が製品ごとに違うだろうし、悩まし。
  • Misreading.chat ドメイン更新。$40 なり。もうちょっと安かった気がしていたけどそれなりにするね・・・。しかし FM よりは安いのだった。カートで勧められた misreadi.ng は $150 だった。
  • まとまった量の書き物をしたいと週のはじめから試しているが、文書を書く力の弱まりを感じる。Fragements 以外の書き物はしばらく減りますが、悪しからず。

2020/01/10 (Fri)

  • HAL 日記
    • とりあえずパッチを出してみたら案の定断られる。ですよねー・・・。もうちょっとマシな方法を考えないとダメだな。
    • ローカルにビルドした Android の中で自分の変更が動く事実には若干の感動がある一方、HAL とか普通に userspace のプロセスなのでなんちゅうか、ふつう。
    • OpenBinder: OpenBinder 新入り Android プログラマ向けリンク集から参照されたいた。ほんとに Palm だったのだなという気持ちと、おまえら個人サイトにリンクしてないでドキュメント書けという気持ちがいりまじる。
    • Performance Testing  |  Android Open Source Project Binder の thread priority inheritance, HAL だけなの?まじ?困るよ?
    • Binder, アプリが他のサービスのクライアントになるのはいいとして、サーバになるのはほんとにやばいなと思う。なにげなく作ったオブジェクトが実は binder を持っており、その参照を誰かに渡し、それがどこか遠くから呼ばれる。こっちくんな!

2020-01-09 (Thu)

  • HAL 日記。
    • AOSP, SDM855 というディレクトリがないと思ったら Snapdragon 855 は SM8150 と言う名前なのか。知らんがな・・・。それにしても HAL の実装は古い世代をバリっとコピペして作られており、こりゃ古いチップセットの OS はバージョンあがるわけねーという感じ。完全にエンジニアリングの敗北。
    • ビルドが Ninja ベースになったのでインクリメンタルビルドが速く、昔のように奇怪なコマンドを覚えなくても常に m -j でよくなっておりめでたい。
    • チェックアウトがでかすぎて死にそうだが、モバイル部門のひとは 1TB の SSD を注文しなさいね、と書いてあったので注文。

2020-01-08 (Wed)

  • 2019: Year in review - Julia Evans Julia Evans, 会社やめてたのか。すごいな・・・。
  • なんかちょっと眠いな・・・と Fitbit の sleep record をみると 6 時間.  少なくとも六時間半(就寝-起床 7 時間半相当)ないと厳しいので 30 分くらい足りてない.  無駄な寝過ごしを避けるため目覚ましナシは諦め 5 時にしてみたが、就寝が遅れるとアウトなのだった。きびしい。
  • Sony’s electric car is the best surprise of CES - The Verge Sony と Tesla どっちがほしい、というのはなかなか究極の問であることよ。まあ当方はしばらく化石燃料で生きていきます。
  • 社内、ついに公式タスク管理ツールを真面目にやりはじめた。バグをファイルして反応をみると担当者もかなりまともっぽい。会社をとりまくうんざりな社会状況とは裏腹に、仕事はやりやすくなっている皮肉。クビになるまでは前者は受け流し後者にフォーカスしてくぞ!

2020-01-07 (Tue)

  • Everything You Thought You Knew About Inbox Zero Is Wrong  を流し読みしてメール以外の inbox について考える。(自分はメールは概ね inbox zero しており、記事が示唆するようなストレスは特に感じていない。というか inbox zero 以外のメールの運用がいまいち想像できない。)
    • コードレビュー。社内のレビューツールは inbox zero の観点からはよくできている。自分はさぼりがちだが、常に空にする精神でやってもいい気がするな。やってみるか。下っ端なおかげでたいして量はないし。
    • バグ。こいつは曲者である。そんなすぐ片付けられりゃ苦労しねえっつーの。
    • メールにしろコードレビューにしろ主要な問題は「めんどくさい」ことであって、要素単位では低数時間で片付けられる。しかしバグや機能は仕事の主要な部分なので、そんなかんたんには片付かない。とりあえずはメールとレビューをささっと片付けてバグは別に考えるのが良いのだろう。ほんとは「定数時間で片付けるべきバグのリスト」があり、そいつをババっとやっつけられるとよいのだが、それはツール側でなんかを発明してもらう必要がある。hotlist は長続きしなかった・・・。
  • 社内のバグトラッカーおよびコミットログでついに markdown がサポートされた!やった!我々の平成がついに終わったぞ!うそです平成は強気すぎた。20 世紀くらいにしときます。
  • The End of the Beginning – Stratechery by Ben Thompson もうしばらく次のプラットホームはないのでは、でかい企業は居座るのでは、という主張。それはなんつうか、だいぶつまんないね。家でも買うか・・・(うそです)。自動車産業をメタファに使っているが、そうするとどっか他所の国(中国なりインドなり)から Toyota や Honda 相当の破壊者が来るのでは?という恐怖はある。
  • 今年は HAL を触るぞ・・・と意気込んだはいいがそもそもチェックアウトすべきブランチすらわからん。Android むずかしすぎる・・・。しかしドキュメントは昔よりだいぶ整備されている気はする。ついでに眺めた新入社員向け一般ドキュメントもだいぶ整備されており、大企業感の高まりを感じる。

2020-01-06 (Mon)

  • 仕事はじめ。会社は平和・・・。OS をアップデートしたりなんだり。あとは Worklog という ChangeLogMemo の GDocs 版みたいのを年次で書いてるので、2020 版を作るものなり。
  • Highest Paying Companies of 2019.pdf - Google Drive
    • 偉くなると急速に給料よくなるが、まったく偉くなれない現実。不思議なのは ladder ごとに会社が目まぐるしく入れ替わることで、いまいち信憑性に疑問。会社間でそれなりにレベルを calibrate している感じはするが・・・。まあ同じ ladder の中ですらだいぶばらつきがあるはずので、単独の値だけ見てもあまりよくわからない。自分の勤務先が特別高給というわけでないとわかるのは希望があってよい。ここに並んでいるキラキラカンパニーズに雇ってもらえるとも思えないが。同じ身分で現職より払いが良いのは FB と Netflix くらいだろうと思っていたが LinkedIn も案外良さそうじゃん。MS 買収プレミアムは関係あるのかな? (HN)

Picture Taking Practice, A Month Later.

|

Picture Taking Practice をはじめて現在 36 日分経過。

  • 完全に毎日はできないが、まあいいです。人間風邪引いたり調子わるかったりするので。精神衛生を損なうと写真を撮らなくなりがちで、ある意味バロメータになっている。
  • 一日に一回 curate する頻度は割とちょうどいい感じがする。寝る前に 10 分くらいなので負担がない。
  • 家族日記として機能している。自分の個人的な記録はないが、どこいったみたいな家族としての記録が残るのはよい。
  • どうせとるならフルフレームが欲しいなーと思う一方、でかいのはムリだなという気分も深まる。でかいカメラを抱えて隣の公園で散歩するのもやはり silly に感じてしまうので。APS-C くらいでいいのかもなあ・・・というか 4/3 でいいのか・・・など無駄な物欲的悩み。
  • アプリ的な話
    • 奥様にも写真を追加してもらうようにした。Photos はこれができるのが便利。
    • Timelapse がすばらしい。日常の banality も圧縮によって消える。
    • Portrait も、被写体を強調する目的でだいぶよい。ボケはひきつづきだいぶ雑だが、Pixel 4 は激しい壊れ方をすることは減った(人間相手なら)。スマホで眺める分には許容範囲かなと思う。
    • Night mode は子供を録るには不向き。水族館でも普通の Photo mode の方が良い。
    • 週末、プレイデート友達家族と外出した先で子らが遊ぶ様子を両親 x2 の四名がスマホで写真をとる瞬間にはその sillyness に躊躇がある。
    • カメラアプリのバグに遭遇しがち。ぐぐぐ・・・。

自己デバッグ / Snippets

|

I'm resuming my snippets from today. I have little-to-no time for intellectual activity these days. so I'm posting my physical activity (running) and the body weight.

  • Running 3/5
  • Body weight: (Goal: 65kg)


自己デバッグはとくになし。

 

時間予算日記 (18)

|

休暇中に精神衛生の劣化が限度を超えてしまい、ふと思い出して朝にジムで走ってみると・・・世界が!明るくなったぞ!(比喩的に!)そういえば走った日ってこういうかんじだったわ。すっかり忘れていた。トラブル気味だった大腸も元気になった。

スクーター通勤に切り替えて以来運動ができていなかったが、それでも通勤という軽運動はしていた。しかし休暇に入りそれすら途絶えていた。もっというと、通勤ランは色々気が散りがちでジムで走るほどの効能はない。ジムで走るみたいな純粋な心拍数向上活動は子が生まれて以来三年ぶりくらいな気がする。

睡眠に続き、目をそらしていた健康上の懸念を突きつけられた気分。じっさい休暇中は色々とストレスがたまりがちで、夫婦間の空気を険悪にしないようかなりの努力を要した(つまり、たぶんちょっと険悪になってたね。)色々理由を考えていたが、単に運動不足だったとは。脳内麻薬欠乏やばい。

やはり運動は必要に思える。薬物の質という点でジムなり公園で走るのが望ましい。そして薬効を最大限活かすには朝がよい。休暇前は朝おきて会社のメールを読んでいたが、これは諦めてジムに行くべし。


とはいえジムでの運動は着替えやシャワーを含む E2E で一時間。きびしい。5:00 に起きて、5:30-6:30 運動、そのあと家事。朝のメールが消える結果、8 時間労働を達成できない問題は振り出しに戻ってしまう。このトレードオフは字面からはあまり自明でないが、脳内麻薬の欠乏(に無自覚であること)は無視しがたい恐怖を感じるのではやり運動は取り戻したい。

一方、これを時間割とすると家でラップトップを触る時間はほぼ消えてなくなる。いまは就寝前にちょこっとさわったりしているが、大して生産的でない割に睡眠を削ってしまい望ましくない。

年末からは fast を兼ねて会社では昼飯を食べず、かつちょっと時間をちょろまかして昼食前後一時間半くらいを課外活動に当てている。これが自分の課外活動の全てとなる。八時間労働できないのに時間ちょろまかすのどうなの、という話はあるけれど、ただ子の着替えやトイレを待つのに使う時間と課外活動に使う時間ではトレードオフの妥当性が違うのだよ。

家でパソコンとかさわらないプログラマってこういうかんじか・・・ほんとに・・・?しかしここで躊躇して運動しないと鬱病になってしまうのでとりあえず運動はします。はい。今日もスタバまで走ってきたよ。