タグ

ブックマーク / yasukata.hatenablog.com (3)

  • ptrace より 100 倍速いシステムコールフック作った - かーねるさんとか

    新しい高性能で汎用的なシステムコールフックの仕組みを作ってみました。 モチベーションとして、システムコールをフックしてユーザー空間でエミュレートしたくなったのですが、現状、性能と汎用性を両立する仕組みがなさそうだったので、新しい方法を考えました。 今回のシステムコールフックの仕組みは以下のような特徴があります。 ptrace より 100 倍以上高速 LD_PRELOAD や既存のバイナリ書き換えツールより確実 カーネルへの変更なし、かつカーネルモジュールを使わない プログラムのソースコード、プログラムの再コンパイル不要 eBPF でトレーシングをしているけれど、できれば制約が少ないユーザー空間でトレーシングツールを作りたい。もしくは、gVisor のようなサンドボックスを作りたいけれど、ptrace による性能劣化が大きいので、他の高速なシステムコールフックの仕組みが使いたい、というよう

    ptrace より 100 倍速いシステムコールフック作った - かーねるさんとか
  • 仮想 I/O 高速化手法まとめ - かーねるさんとか

    仮想 I/O の高速化手法についてまとめました。特にネットワーク I/O の高速化について調べました。 デバイスの仮想化 仮想マシンが利用するネットワークカードは多くの場合、QEMU のようなエミュレータによってエミュレーションされており、物理的なネットワークカードとのやりとりはホスト上で動作する仮想スイッチを介して行われます。*1以下に構成を図示します。 エミュレートされるデバイスは Intel の 1Gbps NIC 等、実際に存在するネットワークカードと、virtio-net のような、物理的なハードウェアが存在しないインターフェースがあります。 仮想化技術は大きく「完全仮想化」と「準仮想化」に分類されます。*2 完全仮想化によってゲストへ提供される環境は、ゲストからは、現実に存在する物理ハードウェアと全く同じように見えるようエミュレートされます。結果として、ゲスト OS は、仮想化

    仮想 I/O 高速化手法まとめ - かーねるさんとか
  • netmap でわかる Linux カーネルハック入門 - かーねるさんとか

    以前のエントリー*1で、netmap API を使ったアプリケーションを作成する方法やデータ構造についてとりあげました。今回は少しレイヤーを下げて、カーネルのどのような機能を使って、netmap API が作られているのかについてまとめました。 Linux カーネルハックを始めてみたいけれど、何から手をつければよいかわからないという方にとって、netmap で使われているカーネルハックの方法について知ることは、とても良い導入の一つだと思います。 Linux カーネルハック netmap は、キャラクタデバイスのカーネルモジュールとして実装されています。今回はキャラクタデバイスのカーネルモジュールで何ができるのか、ということと、netmap がそれらをどのように使っているかについて説明します。 カーネルハックで、Linux カーネルに新しい機能を追加する場合に、カーネルのソースコードを直接変

    netmap でわかる Linux カーネルハック入門 - かーねるさんとか
  • 1