1. はじめに 2. BPFとは 3. BPFで実現できること 4. BPFの仕組み 4.1 BPFプログラムを開発しClang/LLVMでコンパイルしてバイトコードにする 4.2 bpftoolでバイトコードからスケルトンヘッダを作成し、BPFアプリケーションで読み込む 4.3 BPFプログラムの結果を保存するmapを作成 4.4 BPFプログラムをカーネルにロード 4.5 イベントが発生したらBPFプログラムが実行され結果をmapに保存 5. BCCとは 5.1 BCC-Tools 5.2 BCCを使った開発 6. CO-RE 6.1 BPFプログラムをCO-RE対応する場合 6.2 CO…
この記事は、分散アプリケーションを構成するネットワークサービス間の依存関係マップを構築するための基礎技術の改善提案をまとめたものである。第8回WebSystemArchitecture研究会での発表と同等の内容であり、そのときのスライドを以下に掲載しておく。 また、本手法のプロトタイプと評価実験のためのコードを次のGitHubリポジトリに公開している。 1. はじめに クラウドの普及により、サービス事業者は機能追加やアクセス増加への対応が容易となっている。その一方で、クラウド上に展開される分散アプリケーション内の構成要素の個数と種類が増加しているため、構成要素の依存関係が複雑化している。そのた…
主に9月に開かれる某Kaigiの関係とか、色々があり、C言語以外の言語でBPFバイナリを作ることができないか模索しています*1。某Slackなどで相談させてもらっていますが、こんな感じ(資料後半)。 docs.google.com その予備調査として、BPFバイナリとしてlibbpfが取り扱えるELF形式のバイナリがどのようなものか調べています。 これ、なんかドキュメントがあるような気もせんでもないですが、まあぼく自身ELF形式に詳しくないこともあり実際のファイルを眺めながら調べた結果*2を残しとこうと思います。 *1:Rustならredbpfというものがあります、サンプル見るとクソかっこいい…
RubyKaigiも近付いたしeBPFの機運を高めようとしている。 タイトルですが、そういうことができます。 www.kernel.org このドキュメントにも「どうすればできる」と言うところが書いておらず、最終的にカーネルのサンプルを眺めることになる。 elixir.bootlin.com elixir.bootlin.com
メモ程度に。 追記 @ 2021/04/20 12:41 inode番号と同じになるようになっているらしい。なので、 cgpath = ARGV[0] puts File::Stat.new(cgpath).ino これだけでいいです... 以下は、構造体キャストの例として残す。 github.com この実装によると name_to_handle_at をつかってcgroupを表すディレクトリ のファイルハンドルを取る ファイルハンドルを以下の構造体にキャストする struct cgid_file_handle { unsigned int handle_bytes; int handle_…
そろそろBPFのことを思い出そうと思って記事を書く。 シリーズです: udzura.hatenablog.jp udzura.hatenablog.jp
こんにちは、ティアフォーでパートタイムエンジニアをしている石川です。 本記事では、楽に「動的ライブラリ(及び実行バイナリ)の特定の関数をフックして何かしらの処理をする」手法について紹介していきます。 この記事は、同じくパートタイムエンジニアの西村さんによる作業の成果を元にして、石川が執筆したものです。ソースコードや図のいくつかも西村さんによる貢献です。 また、ティアフォーでは「自動運転の民主化」をともに実現していく、学生パートタイムエンジニアを常時募集しています。自動運転を実現するためには、Softwareに関してはOSからMiddlewareそしてApplicationに至るまで、Hardw…
Rubyで利用できるUSDTは probes.d というファイルに定義されている。 USDTとは: udzura.hatenablog.jp 以下の記事はbpftraceとUSDTを理解している前提で書いていきます。
前回の続きです。 udzura.hatenablog.jp 今回はlibbpf-toolsにあるexecsnoopのコマンドライン部分をRustに移植する。まず、Rustのworkspaceを使って以下のように execsnoop クレートを作成した。 bpf/ ディレクトリにBPFのプログラムを置く。
BCCのRubyバインディングを開発しています。 udzura.hatenablog.jp で、RbBCCを omnibus を使ってOSパッケージに固めて、配布することにしました(TODO: 今度ちゃんとGitHub Packagesにする)。 github.com このパッケージはlibbccとそれが依存するライブラリを同梱した形で配布しているので、インストールしたらいきなり動かせると思います。 Ubuntu Focalであれば...。 Fedora 向けrpmはそのうち追加します。 なお、もしかしたら libgcc-s1 を追加でインストールしないと動かないかも。
Google Cloud の GKE (Google Kubernetes Engine) では、Calico と Dataplane V2 という 2 つのネットワーク制御の仕組みが提供されています。 どちらも Kubernetes NetworkPolicy を利用できるようになっていますが、Calico は iptables を利用してルーティングを制御する一方、Dataplane V2 は Cilium をベースとして eBPF によってルーティングを制御します。 今回は、Calico から GKE Dataplane V2 への移行を考えるにあたって、NetworkPolicy 関連…
平日は仕事,土日は図書館で読書をくりかえしている 読んでいる本 - トゥー多様体 - 多様体の向き付あたりを読んでいる - ベーシック圏論 - トゥー多様体で圏論由来の言葉がちらほら出てくるので気になって読んでいる。随伴の章読んで,あと引き戻しと押し出しについてまとめたら撤退する予定 - learning ebpf - linuxの監視技術に興味があって読み始めた(監視以外にも用途はあるが...)
はじめに お盆はTCP/IPプロトコルスタックを自作し、夜は配信され始めたコワすぎ!シリーズを見て過ごしていたらお盆が終わりました、Gunziです。 今年はお盆休み中にKLabExpartCampのTCP/IPプロトコルスタックの実装にチャレンジしたので、その備忘録をまとめます。完成したものはこちら。 github.com 資料はこちらから見られます。 KLab Expert Camp(資料公開) - Google Drive 経緯 決して「詳解TCP/IP vol.2 実装」を完走すると貰えるからやったわけではありません!!!!ものにつられるわけないじゃないですか!!!! 大人も貰えるよ h…
8月7日から8月11日まで開催されたセキュリティ・キャンプの Bクラス(Webセキュリティ)に参加してきたので、やってきたことや感想について、体験記として書き残そうと思う。 セキュリティ・キャンプについては、以下のホームページを参照してほしい。今年が20回目の開催で、4年ぶりに対面で行われた。 www.ipa.go.jp 応募課題 まず、セキュリティ・キャンプに参加するには、応募課題を解かなければならない。 これに関しては、また別のブログとして、私の答案については出そうと思うが、今までのプログラミング言語やコンテナ技術の利用経験を問われたり、Webにおける脆弱性の検証と調査、Webの標準や実装…
最近2ヶ月で取り組んでいること。 自社ネットワークの設計と検証 IP-CLOSネットワークの導入。SONiCを使っていることくらいしか書けない NETCONFやYANGがまるでわからん状況だが、なんとかなる BGPは難しいの一言。でも、このルーティングプロトコルで経路の冗長化などができるのは嬉しい 社内ハッカソンの開催準備 なぜか、参加者として手を上げたが、なぜか開催者側になってフロントエンドとバックエンド(認証やプロジェクトテンプレートの準備の自動化)を担当することに フロントエンドは何もわからん。Vue.js(Nuxt.js)+Vuetifyを使っている。Vueは理論的な本を少し読んで、概…
Bob Kahn on the Birth of “Inter-networking” - IEEE Spectrum https://spectrum.ieee.org/bob-kahn Bob Kahnは、最初のノードがパケットスイッチングネットワークに接続された場にいて、Vint Cerfと一緒に働きました。彼は、インターネットの基礎が接続された1960年代と70年代のいくつかの思い出を共有しています。 「パケット」という言葉がまだ導入されていなかったとき、彼らは「discrete addressed message blocks」という言葉を使用していたらしい。 Vint Cerfはホ…
HotStorage 2023 の発表を要約してみた。(ChatGPTが) HotStorage 2023 : https://www.hotstorage.org/2023/index.html ChatGPTプロンプト: これから、論文を1つずつ要約し、論文タイトル、著者と所属、概要を1000字程度でまとめていただきます。こちらから「次へ」と言ったら、最初の論文から1つずつ順番に、要約してください。 対象の論文は以下の通りです。 ・・・・ 論文タイトル: When F2FS Meets Compression-Based SSD! 著者と所属: Yunpeng Song, Yiyang H…
forkwell.connpass.com こちらのイベントに参加してきたので、会の様子と感想を書いていこうと思います。 会の概要 会の様子 基調講演「コンテナセキュリティ」 コンテナセキュリティ本の概要 書籍構成(全体) 書籍構成(章ごと) コンテナセキュリティの理解を深めるために おすすめ書籍 Q&A 実際の運用でコンテナセキュリティを継続して対処していくのはかなり手間だが、コンテナセキュリティ製品はあるのか? 実行中のコンテナセキュリティのベストプラクティスは何だと思うか? 脆弱性/セキュリティの最新情報やトレンドをどのように集めるのか? Fargateのラインタイム暴防御のおすすめはあ…
概要 参考情報 概要 以下、自分用のメモです。忘れないうちにメモメモ。。。 OracleがBPFを利用して、カーネルパラメータを継続的に自動でチューニングするためのツールを公開してくれてます。 www.publickey1.jp リポジトリは以下。 github.com BPF (Berkeley Packet Filter) を利用してフックを作って処理するイメージですかね。 いずれ試してみたいところ。 参考情報 https://blogs.oracle.com/linux/post/introducing-bpftune パケットフィルターでトレーシング? Linuxで活用が進む「Berk…
GKE において、FQDN に基づく Network Policy が定義できるようになりました。 この記事では、FQDN Network Policy の概要と、実際に使ってみた様子をご紹介したいと思います。 リリースノートはこちら。 cloud.google.com FQDN Network Policy 登場の背景と概要 GKE では現在 2 つのネットワーキングの実装(Calico と Dataplane V2 (cillium))1 が提供されており、iptable に基づく制御か、eBPF に基づく制御か、といった違いはあるものの、いずれも Kubernetes Network P…
参考:https://www.youtube.com/watch?v=8YGNg38-6jM カーネルが無いシステムとは カーネルが無いシステムとは、次のようなシステムをイメージすると良い。 ハードウェアの上に、直接アプリが一つあるとき。 アプリからハードウェアにアクセスする構造だが、以下の点で不便 アプリがバグっていたらシステム終了 最悪デバイスが二度と動かなくなる アプリを作るたびに直接ハードウェアを操作するプログラムを書かなければならない。 複数アプリで一つのデバイスをコントロールできない。 (仮想記憶):複数のアプリを動かすときに隣のアプリを覗ける つまり もしOSが存在せず、ハードウ…
eBPFを使った、Kuberneteクラスタの可視化ツール。キモは"No Instrumentation"を謳っている。これはeBPFの機能を使って実現されている。 ひとまずアーキテクチャのページを覗いている。 docs.pixielabs.ai
JJUG CCC 2023 Spring に参加しました! 今回、なんとJJUG CCC 参加9年目にして初登壇してきました。色んな人から「えっ、初?」って言われましたw1 セッションは、javap を使ってクラスファイルを読んでみよう という、ややマニアックな内容です。頑張って調べた内容を色々詰めたので、javap を使ったことがある人にも使ったことがない人にもなにか得られるものがあったとしたら、幸いです。 ちなみに、このセッションではバイトコードについては時間の関係もあって簡単に触れただけだったのですが、ちょうど David Buck さんの "Java Bytecode Crash Co…
forkwell.connpass.com こちらのイベントに参加してきたので、会の様子と感想を書いていこうと思います。 会の概要 会の様子 入門 モダンLinuxとはどんな本なのか? 本の見どころ 本書の前に読むとよい本 本書の後に読むとよい本 翻訳しようと思ったきっかけ 翻訳の中で気をつけたこと/苦労したこと 読者のコメント Q&A 今と昔でLinuxで大きく変わったことは?キャッチアップは何をしているか? 普段使っているディストリビューションは? 翻訳には専用ツールを使ったのか? システムの監視について本書は触れられているのか? POSIXにないモダンな機能は書いてあるか? system…
クリティカルな部分が間違っていたら非常にやさしく教えてください。 意訳が多分に含まれるので参考にしないでください。 今回読むもの github.com これ。