タグ

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

  • dlmopen を使ってシステムコールのフックをいい感じにプログラミングする - かーねるさんとか

    前回の記事で紹介しました Zpoline というシステムコールフックの仕組みだと、バイナリ書き換え後の関数を、システムコールフックから呼び出してしまうと、デッドロックもしくは無限ループが発生することがあるという問題がありました。 結果として、システムコールフックの実装に標準ライブラリ内の機能、例えば、printf 等が使えなくてプログラミングがしにくくなっていました。 この問題は、dlmopen という機能を使うと解決できると教えて頂いて、実際に大分簡単にフック関数を実装できるようになったので、今回の記事では、具体的な Zpoline での利用方法について説明します。 以下の GitHub 上のリポジトリに置いてあるソースコードは dlmopen を利用できるように変更してありますので、よかったら是非試してみてください。 github.com dlmopen の前に dlopen とは?

    dlmopen を使ってシステムコールのフックをいい感じにプログラミングする - かーねるさんとか
  • 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 高速化手法まとめ - かーねるさんとか
    mapk0y
    mapk0y 2018/04/24
    難しい
  • ネットワークスタック高速化手法まとめ - かーねるさんとか

    ネットワークスタックの高速化手法についてまとめました。 これらの手法が提案された背景には、10Gb NIC 等の高性能なハードウェアの値段が下がり、汎用化が進んだ一方で、汎用 OS のネットワークスタック実装では、それらの性能を十分引き出せないという問題があります。 特に、小さいパケットをやりとりするワークロードや、短い TCP コネクションをたくさん処理するようなワークロードで、10Gb, 40Gb のラインレートを達成するのが難しく、様々な解決策が提案されています。 システムコールバッチング システムコールは、ユーザー空間とカーネル空間のコンテキスト切り替えのための処理を必要とし、Web サーバーやキャッシュサーバー等の高速なメッセージの送受信が必要なシステムにおいて、性能劣化の原因となることが問題として指摘されています。 以下の論文では、システムコールバッチングをこの問題の解決策とし

    ネットワークスタック高速化手法まとめ - かーねるさんとか
  • 1