こちらの続きです。第2回は拙作「BPFQL」を紹介したく。RbBCCの実例として2つのプロトタイプを作ったうちの1つです。
eBPF for Rubyist 現状確認(1) - RbBCC の使い方 in March 2020
気づいたら3月に...
このたび、Rubyアソシエーションの助成対象となった RbBCC の開発について、最終報告書を出したのですが、せっかくなのでブログで何をやったかも書いとこうという気持ちです。
これの話です。
で、サラッと書くつもりでしたががっつりしています。週末プログラミングのお供にでもどうぞ。
RbBCC の話
以前ブログに書いた気がしていたんですが、 hello world が動いた!みたいなことしか内容がなくて、
今はもうちょっと現実的なツールが動くんで、とりあえず書いて動かしてみましょう。
続きを読むmrubyのバイナリコマンドをGitHub Actionでリリースする
あけおめ!
去年やってブログに書き忘れたことをほそぼそ書くシリーズ。
- mrubyのプロジェクトでCIでビルド・テストを回したい
- バイナリを作成するツールなので、バイナリのリリースも自動でやりたい
こういう時の設定例です。
続きを読むCRIUをラップしてより簡単にプロセスのチェックポイント/リストアをするツールを作った話
Linux Advent Calendar 2019 12日目の記事です。
今日はCRIUに関わる自作ツールの話をします。
CRIU って?
Checkpoint and Restore In Userspace の略で、プロセス(や特殊なプロセスであるところのコンテナ)の動いているメモリ状態などをイメージにダンプし、またそのイメージからのリストア起動を実現するLinux向けのツールです。
詳細は、 TenForward さんの記事が詳しいです。
任意の状態のプロセスのセーブポイントや、 kvm などでいうライブマイグレーションのような用途での利用を想定しているようです。
で、この技術、やれることはとても魅力的なのですが、使い方がかなり難しいことでも有名です。
雑にプロセスを立ち上げてそのPIDをダンプしようとしてもエラーが出たり、
$ sudo criu dump -t 25010 Warn (compel/arch/x86/src/lib/infect.c:280): Will restore 25011 with interrupted system call Warn (compel/arch/x86/src/lib/infect.c:280): Will restore 25018 with interrupted system call Error (criu/tty.c:1859): tty: Found dangling tty with sid 5228 pgid 25010 (pts) on peer fd 0. Task attached to shell terminal. Consider using --shell-job option. More details on http://criu.org/Simple_loop Error (criu/cr-dump.c:1743): Dumping FAILED.
言われた通り --shell-job
をつけてもリストアでまたエラー。
$ sudo criu dump -t 25010 --shell-job Warn (compel/arch/x86/src/lib/infect.c:280): Will restore 25011 with interrupted system call Warn (compel/arch/x86/src/lib/infect.c:280): Will restore 25018 with interrupted system call $ sudo criu restore 25058: Error (criu/tty.c:412): tty: Found slave peer index 1 without correspond master peer Error (criu/cr-restore.c:1457): 25058 killed by signal 9: Killed Error (criu/cr-restore.c:2333): Restoring FAILED. $ sudo criu restore --shell-job pie: 25058: Error (criu/pie/restorer.c:1811): Unable to create a thread: 25060 pie: 25058: Error (criu/pie/restorer.c:1951): Restorer fail 25058 Error (criu/cr-restore.c:1454): 25058 exited, status=1 Error (criu/cr-restore.c:2333): Restoring FAILED.
エラーも見慣れないもので何もわからん...。ちなみに、ホストのプロセスをダンプする場合、 PID含めて リストアしようとするため、そのPIDがすでに別のプロセスに取られていた場合そもそもリストアができない(回避方法はないようです...)などの問題もあります。
また、 images-dir
などの必要な設定など、いろいろな規約を自分で決めたり、ちょっと触りたいだけではなかなか面倒な印象を持つかもしれません。
やりたいことは普通にプロセスの状態のスナップショットをとって、戻したりしたいだけなのに...。
LXD のような場合は実は標準の checkpoint
コマンドを経由することもできますが、「普通にVMで立ち上げてるアプリやプロセス」の場合は周辺の準備が面倒そうですよね。CRIUは基本的に非常にレイヤの低いオプションやAPIを提供するので、現実の用途のためには色々とラップする必要が出てきます。
ということで、普通のプロセス向けに、こういうツールを書いています。
続きを読む