2019-01-01から1年間の記事一覧
Linux Advent Calendar 2019 12日目の記事です。 qiita.com 今日はCRIUに関わる自作ツールの話をします。 CRIU って? Checkpoint and Restore In Userspace の略で、プロセス(や特殊なプロセスであるところのコンテナ)の動いているメモリ状態などをイメー…
諸事情 で Python の ctypes のコードを Ruby の fiddle に移植しているんですが、どちらもだいたい同じことができる、一方APIなどの設計思想が違う、みたいな感じで興味深いです(興味深い)。 今回ctypesで普通にやるような、「参照先を更新する関数」の呼…
この記事はCfP Advent Calendar 2019の9日目です! adventar.org 1日勘違いしていました! カンファレンスではないですが「Rubyアソシエーション 開発助成金2019」への応募内容をここで公開します。って、していいものなのでしょうか...「アウトプットを期待…
Pepabo Adovent Calender 3日目の記事です。 qiita.com @udzura です。こないだDuolingoの話をガッツリしてしまったせいで記事に書くネタがなかったんですが、某ruby-jpで話題に出て気になったので当該の内容について調べてみました。 これで妥当な結果が出…
僕の知人ならもはや誰もが知っていると思うけど、 Duolingo をず〜っとやっている。今年一番使ったウェブサービスでありアプリだと思う。 Duolingo についてちゃんと紹介しているブログもないので語ってみたい。
色々あって確認をしたので書く。 github.com
なるべく簡単なロジックで、おおむね被らないようなIDをスレッドごとに吐けないだろうか、それも同じスレッドなら何度呼び出しても同じIDになるやつ(=キャッシュが要らない)、と思ってこういうのを考えた。 とりあえずコード:
消費税... うっ... なんというか、普通に忙しくブログを書けていなかった。あとリングフィット買いました。 11月、1回のワークショップと2回の登壇を予定しています。
完全に消費税に負けた... 今日も小ネタです。 一般に、以下のようなことを調べる時 netstat や ss などのツールは便利です。 あるポートがリッスンされているか知りたい あるコネクションに実際に通信があるか知りたい MySQLサーバなど外部プロセス/サーバに…
「カーネル謎機能を活用したパフォーマンスとの戦い」と題してPepabo Tech Fridayで発表していた。ペパボテックフライデーとは下記です。 tech.pepabo.com しかし、割と生々しい社内のプロジェクトの計測値を出しているので、資料は公開しません...(入社し…
このブログは、昨日の分です。だめですかね... カーネルトレーシングシリーズです。今日は、Nginxを、追ってみます。 まず、 uprobe が見えるnginxバイナリを用意する 大抵の場合、パッケージのnginxバイナリはシンボルがstripされていて、uprobeが見えない…
まだまだ消費増税に対抗するため、無理やりネタを紡ぎ出す。 named pipe、「名前付きパイプ」の簡単な使い方を残しておく。 プロセス間通信 プロセスの間でなにかしらのデータのやり取りをすることをプロセス間通信(Inter Process Communication)と呼ぶ。…
昨日は普通にブログを忘れていた...。増税に負けてしまった...。 気を取り直して今日。 github.com hacoboot_sampler というツールをリポジトリに同梱した(名前は...)。 # 第一引数は、コンテナの init のコマンドを推奨 $ sudo bpftrace misc/hacoboot_sa…
小ネタです。
man7.org sevp.sigev_notify を SIGEV_NONE にし、なおかつ非常に先の時間を expiration に指定すれば、その時間までの残り時間を timer_gettime(2) で取得できる。 あとは引き算をすればOK。「非常に先の時間」以上の時間を計測できないことになるが、 10億…
github.com 今までタイムスタンプを clock_gettime でとっていたけど、そのタイムスタンプはカーネル側でつけてくれるような気がしたので外した。それよりも、同じコンテナ管理プロセスでのイベントかどうかを見分けたいので、hpidという数字を発行すること…
bpftrace には cgroup という変数があって、イベントが起こったプロセスの cgroup ID(後述しますが、?な数字です)を取得できます。 $ bpftrace -e 'uretprobe:/bin/bash:readline { printf("input(%d@%d) = %s\n", pid, cgroup, str(retval)); }' Attachi…
Rubyは 2.0 から --enable-dtrace オプションでコンパイルが可能になったんですが、 magazine.rubyist.net 一方で現代のLinuxとしてはこれらのトレースポイントは USDT としてトレースできます。今日はその手順など。
一般にパッケージを作る場合テンプレートジェネレーターがあると便利です。mrubyも例外でなく、mrubyでmgemを作る場合は mruby-mrbgem-template が定番です。 github.com 実は今まで以下のような手順でmgemを作っていました。DSLを残せるのはいいのですが、C…
消費税増税に対抗し、10月はなるべく毎日営業日はブログを書こうと思います。 udzura.hatenablog.jp これのシリーズです。はてブが伸びなくても書いていく。消費税増税に対抗するのが目的ではてブは目的ではないから。
色々な理由 でカーネルのイベントなどをトレースする方法を整理する必要が出て来たので。地道にやっていくシリーズ。最近シリーズものが続いてないのでまた中断される可能性が...。 今回は、カーネルのイベントソースとして tracepoint, kprobe, uprobe とい…
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…
たまには「〜話」メソッドでブログを書く。あと6月は二回ブログを書けたのでめでたい。 さて、タイトルのようなことをしています。 前提としてeBPFという、カーネル内で動く特定の目的のプログラムを比較的高速・安全に書くための技術があるのですが、その…
タイトルは 575 です。相変わらず気ぜわしいので小ネタを投げます。 mruby は「ワンバイナリ」を作れるRubyとして知られています。ですが、実際にはlibcなどをダイナミックリンクします。それはそうでしょうという感じですが、例えばLinuxでmruby-bin-mruby…
Hey Rubyists, did you enjoy RubyKaigi 2019 in Fukuoka? I am @udzura. RubyKaigiがまずは終わった(残件はある)といいつつ本業も慌ただしく、すぐに 次のプロジェクト に入ってしまった感じでなかなかふりかえりモードになれない(なんならまだふりかえ…
ここ数日、 Grenadine (グレナデン)と名付けたOSSをやっていっていました。 github.com Grenadine は、CRIUを用いて、いわゆるコンテナ化をしていないような、VMにデプロイしているようなサーバ型アプリケーション(Webなら、Rails, Django, node.js ...)…
User Namespace の各コンテナでの対応状況その2。前回から引き続き: udzura.hatenablog.jp
シリーズ2回めです。今回もベースは自分のためのまとめであり、調査不足な点はぜひ突っ込んでください...。 前回: udzura.hatenablog.jp 今回から、User Namespace の各コンテナでの対応状況を見ていく。 コンテナの非特権に対する対応 前提として、前回のUs…
一般に同じアドレスを同じポートではlistenできない。しかし、ソケットのオプションに SO_REUSEPORT というものがあり、Linuxではカーネル3.9以降で利用できる。 ソケットを作成した後に setsockopt(2) で SO_REUSEPORT が有効になるように指定すると、同じ…
前のシリーズが終わる前に新シリーズを書いていく。 皆さんのIDはマッピングされていますか? User Namespace とは? まず、TenForwardさんによる日本語でのとてもわかりやすい解説がすでに存在するので、そちらを参照してから...。 gihyo.jp User Namespace…