気がつくと体重が 6kg 増えている。やばい。去年は WFH なら食事もスナックも有限だし心配ないわとか思っていたが、欲深さに負けた模様。
前回の記録を読み直す。攻めてんな・・・。
子がいると「食事しない」は色々都合が悪いので、前回のように攻めることはできない。ではどうするか。
- 朝食はパンは食べず、野菜とプロテインのみ。
- 昼飯はナシ。
- 夕食は普通にたべる。おかわりはナシ。
- 週末外出時は普通にたべる。
- 当然間食はナシ。
この空腹感、ひさしぶりだなー。最初の一ヶ月で 3kg 減らせるとして、だんだん減速するから 3 ヶ月くらいかかるかなねえ。長い。
アロケーション直後のメモリアクセスで page fault が起こるため超遅い(俺のせいじゃねー)のをなんとかしたい。
素朴なアイデア: 事前に巨大なメモリを確保し、そいつを pre-fault し、その後リリースすれば、そのメモリが再利用されてめでたしめでたしじゃね?
が、これはダメっぽい。
まず pre-fault だが、madvise にはそういうオプションがない。mmap() には MAP_POPULATE があるのに!MADV_POPULATE を入れたいぞ、というパッチがあるが今年のはじめとかで、どう考えても Android には入っていない。そもそも merge されているのだろうか。(されてはいるらしい。)まあこれは最悪 page を traverse すれば良い(ほんとに?)。
問題はアロケータ。Android は少し前から scudo というアロケータを使っている。
が、こいつのコードをみると・・・
- でかいメモリブロックはキャッシュされない!
- キャッシュされるときも releasePagesToOs という関数が madvise(...MADV_DONTNEED) してしまう!世知辛いねえ完全に正しいが・・・。
ところでメモリアロケータってなんとなく連続領域を確保してそいつからメモリを切り売りする、足りなくなったら brk() で伸ばす、みたいなメンタルモデルだったけど、全然違うね。普通に mmap() でインクリメンタルにページ/ブロックを確保していく。使い終わったら unmap() で返す。まあこれが正しいよなあ。
自分の冒頭の素朴なアイデアは完全に 20 世紀のメモリアロケータに依存していたと反省。
冒頭の問題を解決するにはアロケータ差し替えとかが必要な気がするが、それは現実的にはぜんぜん無理なのでなんとか scudo に抜け穴を作って欲しいが、上流が llvm じゃあそれも難しそうだなあ・・・。なんかパラメタいじって乗り切るとかする必要があるのかもしれない・・・。
また早寝早起きをするようにしている。二年前はやっていたのだが、よく覚えてないけど WFH 移行とかのタイミングで中断したのだろうか。あるいはやってる作業がつまらなくなって途絶えたのかもしれない。上の日記にも PyTorch のチュートリアルが面白くないとか書いてあるし。
今は 20-21 時に寝て 4 時に起きており、これだとまったく睡眠不足はない。が、WFH 移行は朝にジョギングしているので、6 時過ぎくらいには切り上げないといけず、そうすると 2 時間しかない。もう一時間前倒ししても良い気はする。そんで必要に応じて昼寝する。WFH, 昼寝のしやすさはオフィスより圧倒的に上だからね。
明日から一週間くらい 3 時に起きてみようかなあ。
仕事のやる気がない、というかストレスが高いので、なんか現実逃避的な余暇プロジェクトが必要だなと思い、以前から気になっていた duckdb のコードを読むことにした。せっかくなのでコード読み日記をつける。場所は、ブログというほどでもないなということで karino2 の真似で githbub issues を使ってみている。columnar database なので縦書日記。ブログへの export とかはしない。
どういう milestone にするかは悩ましいが、とりあえず 30 日やってみるとかだろうか。あと現実逃避というか pure fun なのであまり生産性とかは気にせず雑にやりたい。
職業プログラマ的には ML とかやった方がいいんだろうけど、自分にとって ML はやってない宿題的なイヤさが高まりすぎて考えただけで憂鬱になってしまう。ストレスから離れるための場で別のストレスを受けてはたまらないので、有用性は追求しない方向。
仕事、なんか細かいタスクでしかも他人に確認したり調整したりブロックされたりブロックされたりするものが色々あって、しんどい。というか完全に気が散りまくって生産性どん底。こういうのちゃんとできないのだよ・・・。
これまでは Deep Work 的な集中力ばかり気にしていたが、こういう細かいタスクを juggle するスキルというのは存在するはずで、なんか軽くレビューしたい気がする。しかしそういうのあまりに興味がなさすぎたのでまったくリテラシーがない。マルチタスク力みたいな。マルチタスクとかダメですよ、終了、という立場だったわけで・・・。
でもチームのエラ目の人達はこういうの自分よりよっぽど大量に抱えており、かつそれをこなしていて、なんというか、あまり自分の立場に文句をいう気になれない。こうして愚痴るくらいがせいぜい。しかし偉くなると雑用(というと怒られそうだけど)が増えるばかりというのはマジ夢がないぜ。
自分のチームの TPM とか超絶マルチタスク雑用マシーンという感じで、完全に人間離れした仕事をしている。しかし正直あまりハッピーという感じはない。季節性もあるのだろうが。なんというか責任感だけが彼を支えている感じがして、しかも必ずしも抱え込むタイプではなく自動化とか文書化とか超絶ちゃんとしており、本来ならもうちょっとスケールされてしかるべきなのだが、なんかその手の仕事ができすぎて頼りにされちゃうんだろうな。
そういう TPM を burn out させないために、そして自分も burn out しないために、ある程度の雑用力はつけたい気がしている。しかしそういうのは一体どうすれば身につくのか、根本的な部分で興味がないせいもありまったくわからない。Productivity Porn の世界ではこういうんはアンチパターンとされているわけじゃん?しかし現実にはそういう仕事は個人の力では撲滅できないわけじゃん。あの人たちどうしてんの?なんとなく「過労している」が答えな気がしているが、怖くて確認できない。