【#コバンザメのつぶやき | マジで何モン?】『魔剤そんぐ』MV に出てくる謎のプログラム調べてみた【京V同情シス部門】

初めまして. (修士) 2 年生になったぐぐたくです.
.... ブログでお会いするのは 2 回目?いや人違いですよ. ンフフ.

茶番はさておき

2022 年 4 月 1 日にくじさきさんのオリジナル曲『魔剤そんぐ』("Virtual Vivid Voice" 収録) の MV が公開されました.

www.youtube.com

これはいい MV くじですねぇ

くじさきさんを紹介した VTuber 紹介ブログ "V推しなんしょ" 第 89 回はこちら:

ku-vtuberlove.hatenablog.com

ちょっと待てや

MV の 1:28 あたり2:27 あたりをみてくれ.

魔剤そんぐ - 謎のプログラム

これ何?

なんかこんな感じの文字列が書いてあります:

nblocks = (gidsetsize + NGROUPS_PER_BLOCK - 1) / NGROUPS_PER_BLOCK;
/* Make sure we always allocate at least one indirect block pointer */
nblocks = nblocks ? : 1;
group_info = kmalloc(sizeof(*group_info) + nblocks*sizeof(gid_t *), GFP_USER);
if (!group_info)
return NULL;
group_info->ngroups = gidsetsize;
group_info->nblocks = nblocks;
atomic_set(&group_info->usage, 1);

if (gidsetsize <= NGROUPS_SMALL)
group_info->blocks[0] = group_info->small_block;
else {
for (i = 0; i < nblocks; i++) {
kgid_t *b;
b = (void *)__get_free_page(GFP_USER);
if (!b)
goto out_undo_partial_alloc;
group_info->blocks[i] = b;

C 言語とかで書かれた, 何かのプログラムのソースコードっぽいなと思って調べてみました.

ソースコードの出身地、職業、その他プロフィールを調べた結果......

これの 20 行目 〜 38 行目でした:

github.com

これは "SMART (Simultaneous Multithreading-Aware Real-Time)" というものの一部で, SMART の説明には以下のように書かれています:

SMART is aimed at realtime CPU-bound applications which run for a short period of time (tens of milliseconds) and expect no interruption (basically anything that is facing user and should finish execution as quickly as possible).

(中略)

SMART is just an improvement on classic Linux realtime scheduler, thus all tasks that have SCHED_FIFO or SCHED_RR policy use SMART. From the command line it's possible to manipulate scheduler's policy using chrt command. Also, we provide cpu.smart knob to the cpu cgroup which sets scheduler policy of all tasks in the cgroup to SCHED_RR.

和訳 (by deepL と俺)

SMART は短時間 (数十ミリ秒) で動作し, 中断を許さないリアルタイムの CPU バウンドアプリケーション (一般に, ユーザに接していて可能な限り高速に実行を終了すべきもの) を対象としています.

(中略)

SMART は古典的な Linux リアルタイムスケジューラの改善版であり, SCHED_FIFO あるいは SCHED_RR ポリシーを持つタスクはすべて SMART を使用します. コマンドラインからは chrt コマンドを用いてスケジュールのポリシーを操作できます. また cgroup のタスクのスケジューラポリシーを SCHED_RR に設定する cpu.smart knob を CPU cgroup に提供します.

なんて?

わからんなりに頑張って理解しているふりをして説明してみると, これはコンピュータの内部の処理をイイカンジに効率化してあげるためのプログラムらしいです.

コンピュータには CPU という部品があって, この部品であらゆる (← 嘘. あらゆらないこともある.) 処理をします. CPU の中はコアと呼ばれる部屋に分割されていて, それぞれのコアは別々に動いているので同時に違う計算ができます. コアが 4 つあれば CPU は 4 個の違う計算を同時にできるということです. (← これも嘘やと思うけどこのまま進めます.)

コンピュータ内で行われる大抵の処理は 1 回や 4 回の計算では終わらないくらいの分量があるので, 何回かに分けて計算をしてその結果が全部揃ってようやく完了したことになります.
そしてコンピュータは基本的に常に複数の処理を抱えていて, それを全部 CPU で急いで計算しないといけないんです. 大変ですね. そこで, 「次にどのコアでどの計算をするか」というスケジュールを立てる, 列整理のような役割を誰かがする必要があります. これがタスクスケジューラと呼ばれる職業です.
スケジューラの中でも特にリアルタイム処理を専門とするおじさんをリアルタイムスケジューラと呼ぶ気がします.

で, このスケジューラが賢いほど, 列に並んで CPU に計算してもらうのを待ってる処理たちがスムーズに CPU に案内してもらえるんですね. つまりスケジューラを賢くすれば同じ性能の CPU を使っていてもコンピュータが速く動きそう, ということです.

SMART の説明にはこう書いてあります:

Linux realtime scheduler uses cpupri structure to distribute tasks among CPU cores which doesn't take topology into account and thus can make very poor scheduling decisions. SMART scheduler completely abandons cpupri mechanism and tries to balance RT load between NUMA nodes and doesn't place (if possible) tasks on adjacent SMT threads of a single core.

和訳 (by いろいろ諦めた俺)

Linux のリアルタイムスケジューラは CPU のコアに処理を割り振るために CPUPRI 構造を利用するが, これはトポロジーを考慮していないためかなりおバカなスケジュール決定をすることがある. SMART スケジューラは CPUPRI の仕組みを完全に葬り去って, NUMA ノード間での RT ロードをうまいことやって, (可能であれば) 1 つのコアの SMT スレッドで処理同士が隣接しないようにがんばります.

本当に何を言ってるのかわからない. けどどうやら SMART はやっぱり CPU のコアに処理を送り込むのをイイカンジにやるためのプログラムっぽい気がします.

で, 魔剤そんぐに登場するのはそんなプログラムの中でも.... え待って何を担当している部分なのかマジでわからへん. 何????

まとめ

調べてみましたが, 残念ながらよくわかりませんでした!(前章タイトル回収)

いかがでしたか?
SMART やタスクスケジューラに詳しい人, SMART を作ってる人, この記事に文句がある人はぜひご連絡ください!泣きます.

あと上記以外の人と上記に該当する人は魔剤そんぐを 1 日 5 回, いや 10 回は聴きなさーい. 人生の幸福度が 5 億 % 上昇します. (本当ですか〜?!)

ただし魔剤を飲むのは 1 日 1 本までにしましょう. たまになら 2 本でもいいです.

....やっぱり一応 3 本までは目を瞑ろうと思います.

記事執筆: ぐぐたく / Yuta NAKAMIZO

P.S. アボカド魔剤は 1 本にカウントしなくてもいいと思う.