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 を追加でインストールしないと動かないかも。
この記事では、2023年9月29日に開催されたSRE NEXT 2023 IN TOKYOでの講演の概要に加えて、講演では触れられなかった部分の補足と、発表を終えての後記、最後にSRE NEXT全体の感想を書きました。 SRE NEXT 2020の基調講演に招いていただいたところから始まり、昨年のSRE NEXT 2022の公募セッションでも発表し、今回で3回目の発表になりました。今回の講演は、SRE NEXTの「NEXT」と価値観の一つである「Diversity」を踏まえて、自身のエンジニアと研究者の両方の経験を活かして、SREを深く実践する上で、技術論文を探して読むアプローチを提示するもの…
登壇&参加記事です 今までのあらすじ(ずっとアラートの話してる気がする) 今回の発表まわりの蛇足 セッション ギークがイオンに飛び込んだ結果がやばい〜Reliabilityと経営〜 LINEスタンプのSREing事例集:大量のスパイクアクセスを捌くためのSREing エンジニアのためのSRE論文への招待 【コミュニティコラボ企画】パネルディスカッション 〜信頼性に関わる、ご近所さんが集まりました〜 ブルームバーグのセントラル・テレメトリー・システムが業務にもたらす価値 開発者とともに作る Site Reliability Engineering 信頼性目標とシステムアーキテクチャー セッション…
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…