ローファイ日記

出てくるコード片、ぼくが書いたものは断りがない場合 MIT License としています http://udzura.mit-license.org/

Nginxをbpftraceで追いかける

このブログは、昨日の分です。だめですかね... カーネルトレーシングシリーズです。今日は、Nginxを、追ってみます。 まず、 uprobe が見えるnginxバイナリを用意する 大抵の場合、パッケージのnginxバイナリはシンボルがstripされていて、uprobeが見えない…

名前付きパイプの使い方の小ネタ

まだまだ消費増税に対抗するため、無理やりネタを紡ぎ出す。 named pipe、「名前付きパイプ」の簡単な使い方を残しておく。 プロセス間通信 プロセスの間でなにかしらのデータのやり取りをすることをプロセス間通信(Inter Process Communication)と呼ぶ。…

Haconiwaの起動〜execve、起動〜listenまでの時間をトレースできるようにした

昨日は普通にブログを忘れていた...。増税に負けてしまった...。 気を取り直して今日。 github.com hacoboot_sampler というツールをリポジトリに同梱した(名前は...)。 # 第一引数は、コンテナの init のコマンドを推奨 $ sudo bpftrace misc/hacoboot_sa…

rbenv環境で「今使われている本物の」rubyバイナリを当てる

小ネタです。

POSIX Timer で純粋に時間を測る

man7.org sevp.sigev_notify を SIGEV_NONE にし、なおかつ非常に先の時間を expiration に指定すれば、その時間までの残り時間を timer_gettime(2) で取得できる。 あとは引き算をすればOK。「非常に先の時間」以上の時間を計測できないことになるが、 10億…

Haconiwaのprobeを少し整理した

github.com 今までタイムスタンプを clock_gettime でとっていたけど、そのタイムスタンプはカーネル側でつけてくれるような気がしたので外した。それよりも、同じコンテナ管理プロセスでのイベントかどうかを見分けたいので、hpidという数字を発行すること…

eBPF でイベントが起こったプロセスの cgroup IDを取るには

bpftrace には cgroup という変数があって、イベントが起こったプロセスの cgroup ID(後述しますが、?な数字です)を取得できます。 $ bpftrace -e 'uretprobe:/bin/bash:readline { printf("input(%d@%d) = %s\n", pid, cgroup, str(retval)); }' Attachi…

Linux上のRubyのUSDT

Rubyは 2.0 から --enable-dtrace オプションでコンパイルが可能になったんですが、 magazine.rubyist.net 一方で現代のLinuxとしてはこれらのトレースポイントは USDT としてトレースできます。今日はその手順など。

mruby-mrbgems-template を cli tool 化した

一般にパッケージを作る場合テンプレートジェネレーターがあると便利です。mrubyも例外でなく、mrubyでmgemを作る場合は mruby-mrbgem-template が定番です。 github.com 実は今まで以下のような手順でmgemを作っていました。DSLを残せるのはいいのですが、C…

自分のためのカーネルトレーシング、その2 - コンテナにUSDTを仕込む話

消費税増税に対抗し、10月はなるべく毎日営業日はブログを書こうと思います。 udzura.hatenablog.jp これのシリーズです。はてブが伸びなくても書いていく。消費税増税に対抗するのが目的ではてブは目的ではないから。

自分のためのカーネルトレーシング、その1

色々な理由 でカーネルのイベントなどをトレースする方法を整理する必要が出て来たので。地道にやっていくシリーズ。最近シリーズものが続いてないのでまた中断される可能性が...。 今回は、カーネルのイベントソースとして tracepoint, kprobe, uprobe とい…

BCCの hello_world.py 相当がCRubyでも動いた

udzura.hatenablog.jp mrubyでやってる話は前したけど、CRubyでも動いた。 I have ported BCC's hello_world.py into Ruby(MRI), and named it RbBCC!! I continue to porting the rest of functionalities. Check it out:https://t.co/wqQBlHXwhb pic.twitt…

libbccをmrubyにポートしている話

たまには「〜話」メソッドでブログを書く。あと6月は二回ブログを書けたのでめでたい。 さて、タイトルのようなことをしています。 前提としてeBPFという、カーネル内で動く特定の目的のプログラムを比較的高速・安全に書くための技術があるのですが、その…

完全なワンバイナリーmruby

タイトルは 575 です。相変わらず気ぜわしいので小ネタを投げます。 mruby は「ワンバイナリ」を作れるRubyとして知られています。ですが、実際にはlibcなどをダイナミックリンクします。それはそうでしょうという感じですが、例えばLinuxでmruby-bin-mruby…

See you, RubyKaigi

Hey Rubyists, did you enjoy RubyKaigi 2019 in Fukuoka? I am @udzura. RubyKaigiがまずは終わった(残件はある)といいつつ本業も慌ただしく、すぐに 次のプロジェクト に入ってしまった感じでなかなかふりかえりモードになれない(なんならまだふりかえ…

Grenadine: 「普通のアプリケーション」がチェックポイント/リストアの恩恵を享受する

ここ数日、 Grenadine (グレナデン)と名付けたOSSをやっていっていました。 github.com Grenadine は、CRIUを用いて、いわゆるコンテナ化をしていないような、VMにデプロイしているようなサーバ型アプリケーション(Webなら、Rails, Django, node.js ...)…

ID Mapping/User Namespace再入門 その(3)

User Namespace の各コンテナでの対応状況その2。前回から引き続き: udzura.hatenablog.jp

ID Mapping/User Namespace再入門 その(2)

シリーズ2回めです。今回もベースは自分のためのまとめであり、調査不足な点はぜひ突っ込んでください...。 前回: udzura.hatenablog.jp 今回から、User Namespace の各コンテナでの対応状況を見ていく。 コンテナの非特権に対する対応 前提として、前回のUs…

Rubyでも SO_REUSEPORT 使いたい!

一般に同じアドレスを同じポートではlistenできない。しかし、ソケットのオプションに SO_REUSEPORT というものがあり、Linuxではカーネル3.9以降で利用できる。 ソケットを作成した後に setsockopt(2) で SO_REUSEPORT が有効になるように指定すると、同じ…

ID Mapping/User Namespace再入門 その(1)

前のシリーズが終わる前に新シリーズを書いていく。 皆さんのIDはマッピングされていますか? User Namespace とは? まず、TenForwardさんによる日本語でのとてもわかりやすい解説がすでに存在するので、そちらを参照してから...。 gihyo.jp User Namespace…

PSIをLXCのコンテナで試す: その(2) そもそもの値の定義・CPU Pressureをもう少し測る

前回から引き続き、PSIの謎(?)を追う。 udzura.hatenablog.jp

PSIをLXCのコンテナで試す: その(1) CPU Pressure

あらすじ PSIという新しいシステムプレッシャーの指標が Linux 4.20 から利用できます。という内容を前回のブログに書いた。 udzura.hatenablog.jp 今日はこのPSIについて、実際にシステムに負荷をかけたりして変動を眺める。

Ubuntu(などdeb系なLinux)でLinux 4.20 + PSIなカーネルを入れる

あけましておめでとう! では、今日はLinux 4.20より導入された PSI を試していきたいわけですが、まずは環境構築からやっていきたいとおもいます。今後、「〜していきたい」と言う表現が続きますが、そこは任意のユーチューバーやゲーム実況者の声に置き換…

CRIUがプロセス/コンテナをリストアした後のプロセスの扱いの話

Linux Advent Calendar 2018, 21日目の記事です。遅れて申し訳... しかし意外と皆様脱落者が... ともかく、やっていきます。 ちょいと最近やってることの話をしようと思っていて、今日はCRIUがプロセス/コンテナをリストアするときのプロセスツリーの戦略の…

2019年4月、福岡にConference Weekが出現します

結論を最初に 2019年4月15日の週は、 16日(火)に日本で初めての CloudNative Days Fukuoka が、18(木)〜20(土)に RubyKaigi 2019 が開催される、一週間のうち半分以上、前夜祭なども含めると実質毎日カンファレンスな週となります。 この機会に、福岡…

JapanContainerDays v18.12 でCRIUに関して発表してきた

いや〜楽しかった。資料は以下です。 speakerdeck.com 一応、JKDというイベントの性質を考えて資料も英語にしました(口頭は日本語ですが...)。ちょっと時間がなくネイティブチェックもなくて、英語が怪しくてすみません...。 発表中、デモをしたので、特に…

mrubyのプロジェクトで、mruby自体やmgemのリビジョンを固定したい!!1

この記事は GMOペパボ Advent Calendar 2018 の3日目の記事です... 本当に遅くなりすいません... さて、皆さんは、固定したいですか? ペパボは、 latest が最高!という文化の会社です(この記事唯一のペパボ要素)。 とは言え現実は社会なので、そういう時…

mruby-metaprog がvanilla mrubyから切り出された話

タイトルの通りですが、そのようになるそうです。 あー、先日下呂温泉で開催されたSWESTにて、Matzさんを交えて徹夜(!)でmrubyについて協議した結果です。思ったほどRAMが大きいマイコンばかりでは無く小さい物もふつーにあるので、mruby本体もちいさくあ…

CRIU で Mount namespace を再現する

人としてやっていると、いろいろなことがあります。今日はタイトルのことをまとめます。 コンテナとMount namespace LinuxのNamespace機能を用いて、コンテナの中で独立してマウントポイントの情報を持たせることができます。 具体的な例として、以下のよう…

社内勉強会でpecoの紹介をした

シェル大活用講座が開かれたのでハングアウトでお話をした。 pecoがやっていること自体は、 @hsbt さんが紹介したfishなどを使うと別のプラグインで、よりシェルに統合された形でファジー検索を利用できたりもするのですが。 www.hsbt.org peco 自体はUNIX的…