2024-02-27@glitch_murder_drones
第一話を見たけどあまり自分と共鳴する部分を感じ取れなかった。project-closed で open-communication を行う云々という話を sosukesuzuki がしている夢を見た呪術廻戦
https://www.amazon.co.jp/gp/video/detail/B0BX3Z3C5Khttps://www3.nhk.or.jp/news/html/20240228/k10014372911000.html
SIE 人員削減……。
Cookpad もそうだけれど、なかなかうまくいかない会社が近くにありがちな感じがする。「一汁一菜でよいという提案」を読み終わった。プロによる高級な料理と家庭料理を明確に分け、その上で後者について筆者による味噌汁作りの記録と共に余分な力を入れずにご飯と味噌汁を用意し食べることの重要性が複数の面から主張されていた。盆を用意すると食事の場が決まるので一人の場合はおすすめする、ということが書かれていたので参考にしたい。味噌汁作りの iteration を安定させようとすれば、食が人生の根源であるところから食事以外の人生にまつわることもまた安定するであろうという教えがあった。シンクが汚ない状態になっているのを直したいと思った。
つくばに帰ってきたけど、まだシンクに水が溜まっていた。勇気を出して腕を突っ込むしかないんだろうか……。https://www.youtube.com/watch?v=f0wsetchApE
きになる
netem_skb_cb: cb は control block のよう
sch_netem.c の L751 で qdisc_watchdog_schedule_ns を time_to_send を引数として呼び出している。 https://elixir.bootlin.com/linux/v6.7.6/source/net/sched/sch_netem.c#L751
sch_api.c に qdisc_watchdog_schedule_range_ns の実装があり、これを中で呼び出している。qdisc_watchdog_schedule_range_ns の expires 引数にその時間が与えられている。
この中では hrtimer_start_range_ns が ns_to_ktime(expires) と共に呼び出されている。
qdisc_watchdog_schedule_range_ns の実装 https://elixir.bootlin.com/linux/v6.7.6/source/net/sched/sch_api.c#L635* HRTIMER_MODE_ABS - Time value is absolute
* HRTIMER_MODE_PINNED - Timer is bound to CPU (is only considered
ns_to_ktime(expires) は恒等関数に見える https://elixir.bootlin.com/linux/v6.7.6/source/include/linux/ktime.h#L222
implementation of hrtimer_start_range_ns https://elixir.bootlin.com/linux/v6.7.6/source/kernel/time/hrtimer.c#L1284hrtimer って何?
timer_list の単位が millisecond だったのに対して、これは high resolution timer を名乗っており、nanosecond が単位となる。
hrtimer.function が割り込みで呼び出される。
https://bablovia.hatenablog.com/entry/2021/03/31/170251timeout すると何が起きるのかよくわからないので netem_dequeue を見る。
https://elixir.bootlin.com/linux/v6.7.6/source/net/sched/sch_netem.c#L1282 にある __read_mostly が数多のドライバのソースから参照されまくっていて訳がわからん。
これは qdisc としての dequeue の処理っぽいので違う気もする。これ自体もいつ呼び出されるのかよくわからないが……。ChatGPT に聞いてみたけど欲しい回答は得られなかった。https://elixir.bootlin.com/linux/v4.3/source/net/sched/sch_api.c#L589 を見てる。qdisc_watchdog_init を見れば流石に function を初期化しているだろうと思ったらビンゴ。https://elixir.bootlin.com/linux/v4.3/source/net/sched/sch_api.c#L576 を function に設定していそう。container_of って何?と思ったらマクロらしい。
container_of(構造体 S のフィールド F へのポインタ, 構造体 S, F のフィールド名) で S へのポインタが得られる(逆算される)。
https://kernelhack.hatenablog.com/entry/20091226/1261754005https://elixir.bootlin.com/linux/v4.3/source/include/linux/rtnetlink.h#L51
rcu_dereference_rtnl の RCU って何?と思ったら Read Copy Update のことらしい。ロックフリーなデータ構造を実現するために利用される技術である。ある部分を更新する際に他のスレッドがその部分を既に参照していたとしても更新が成功する。
手法としては、まず更新後の値を用意する。そして、以降に部分への新たな参照が生じるときにはその更新後の値を指すようにする。更新前の値は、それに対する参照が全て消えたらメモリ上から破棄する。https://elixir.bootlin.com/linux/v4.3/source/include/linux/rcupdate.h#L625
__rcu_dereference_check(p, c, space) が何を言っているのか全然わからないhttps://tkokamo.hateblo.jp/entry/2017/08/16/161202qdisc_watchdog ->
https://wiki.bit-hive.com/linuxkernelmemo/pg/%E9%80%81%E5%8F%97%E4%BF%A1#:~:text=2.%20%E9%80%81%E4%BF%A1%E5%87%A6%E7%90%86-,2.1%20%E5%87%A6%E7%90%86%E3%81%AE%E6%B5%81%E3%82%8C,-%E9%80%81%E4%BF%A1%E5%87%A6%E7%90%86%E3%81%AE