# 2021年/雨水(後) Transtracerのジャーナル論文執筆,eBPFなど Created: March 1, 2021 7:35 AM Research: transtracer Tags: ebpf Week: March 1, 2021 → March 7, 2021 Mackerelチームで,スクラム開発の2週間単位のスプリント名に,二十四節気を使っていたのを思い出して,○月△週って書くのやめて,節気名にしてみた.季節を感じられてよい.ただし,この日誌は1週単位なので前後半にわけないといけない. > 雨水(うすい)とは、降る雪が雨へと変わり、雪解けが始まる頃のこと。山に積もった雪もゆっくりと解け出し、田畑を潤します。昔から、雨水は農耕を始める時期の目安とされてきました。 [*https://www.543life.com/season/usui*](https://www.543life.com/season/usui) 確かに,雨の日が多かった気がする. # Research ## Transtracerの研究 ジャーナル論文の続きをやっている。実験結果をグラフ化して考察を書けばほぼ終わり。そろそろ英語化をはじめたいところ。別ネタの国際会議の論文がすぐあとに控えてるので、今やってる論文を英文でだすか和文のままでだすか悩ましい。 ### BPF Ringbuf 既存手法の実装(Weave Scopeと同じ方式)のトレーサープロセスのCPU負荷の計測値が不安定な問題にあたった.BPF ring bufferを使っているのだけど,submit時のフラグにポーリング頻度を自動適応モードを設定しているので,それが悪いのかも知れない... ringbuf_reserveに失敗・無視してイベントをロストしているのかとも思ったけど,違った. ちなみに,bpf_ringbuf_outputも内部ではreserve/commitやっている.reserveが失敗したかどうかはEAGAINが返ってきたかどうかでわかる. [elixir.bootlin.com/linux/v5.8.18/…](http://elixir.bootlin.com/linux/v5.8.18/%E2%80%A6) bpf ring bufferのsubmitのオプションをデフォルトにしていると,ユーザランド側のpolling時にイベント数が多くても2,3個のイベントを取得して,busy loopになる.pollしたあとにユーザ側でsleepしてCPU負荷を調整していた. [https://twitter.com/juliusvolz/status/1264930746529132545](https://twitter.com/juliusvolz/status/1264930746529132545) カーネルの中で集約してからデータを取り出すので,固定インターバルでデータをとることになる.実際は1秒間隔でとっていて,それでリアルタイム性が十分なのかを言いたい. PrometheusのUser Survey 2020があることを思い出して,簡単に分析をしていた. ```jsx =QUERY(I2:I211, "select I, count(I) group by I order by count(I) DESC", -1) count 15 70 30 52 60 28 10 23 20 6 5 5 1 1 3 1 45 1 120 1 300 1 15967 1 ``` 15秒間隔を採用している利用者が最大で,次点で30秒.ほとんど5-60秒の間に収まる.15967はよくわからない. ### SysdigのKubernrtesのトポロジマップ [Microservices Monitoring | Sysdig](https://sysdig.com/use-cases/microservices-monitoring/) [Kubernetes and container topology mapping](https://www.youtube.com/watch?v=7BZWkaqQWlc) - システムコールレベルで追跡 - レスポンスタイム、ネットワークトラフィック、リソース利用率などのメトリクスを提供 またOSレベルでのネットワークトレーシングツールを見つけてしまった.sysdig-agentはOSSではなさそうなので,ホスト上でどのようにトレースしているかはわからない. ### Droot + bcc コンテナでエージェントプロセスを動かすのであれば,あまり依存を気にしなくて良いので,llvm/clangに依存するbccでもいいかと思っていたけど,コンテナ以前のVM運用のときには,あまり依存を増やしたくないはず.Drootでchroot環境内にbccのエージェントを閉じ込めて動かすための起動/停止スクリプトでも用意しておけばいいかもしれない.eBPFに対応していない古いカーネルは,Shawkのprocfs+netlinkモードで動かす. ### BPF SOCKHASH [gRPCをeBPFで動かすこの記事](https://medium.com/nttlabs/grpc-in-ebpf-10a930d0d329)で,eBPFのsockhashと呼ばれる機能があることを知った. > eBPFのsockhashという機能を使うことで、TCP/UDPソケットにデータが届いた際に、ユーザコードを実行することができます。ユーザコードは、受信したパケットの中身にアクセスし、必要に応じて変更して、送信することなどができます。 要はソケットバッファに対する送受信メッセージ単位でコードをフックできるらしい.Ciliumでもおそらく使われている.もしかするとトレーシングにも使えるかもしれない. [Introduction - Cilium 1.8.7 documentation](https://docs.cilium.io/en/v1.8/concepts/ebpf/intro/#introduction) ### BPF Performance Tools輪読会 BPF Performance Toolsの輪読会に参加しはじめた.BPF Performance Toolsのカジュアルな輪読会に途中から参加することになったので,追いつくために,序盤からちゃんと読み始めた.Linuxの動的トレーシングの歴史とか,各イベントソースの動作原理が完結にまとめられていて,さっさと読んどけばよかったと思った.2章で各イベントソース(kprobes,uprobes,Tracepoints,Raw Tracepoints,USDT,Dynamic USDTなどの説明はあとで見返す.あとは,BCCをすっとばしていきなりCO-REをやってたので,BCCのtrace(8)とかargdist(8)を知らなかった. 輪読会は,6.1.2 BPF capabilitiesから. CPUトレーシングのオーバヘッド - コンテキストスイッチごととかは大変 秒間数百万回とかになる.最悪ケースで10%のオーバヘッド追加 CPU解析のストラテジ - 解析手順の6番目にいきなりハード割り込みの時間を測定しようとでてきて,ここで登場する理由ははっきりわからなかったが,Gregg先生の経験が反映されていそうだった。 FrameGraphってあんまり使ってないよねって話をした矢先に、GoのpprofでFrameGraphをみるのがわかりやすいケースに遭遇した. ![[ScreenShot_2021-03-04_at_11.00.03.png]] ![[ScreenShot_2021-03-04_at_10.59.54.png]] ## AISREの研究(AIOps) Chaos Engineeringでは,仮説に基づいて,故障を注入し,振る舞いを検証する.今はいかに継続的に故障を注入するかやSteady Stateの設計段階ではないか.故障を注入できるようになってきたら,検証のための分析に注目するようになるはず.故障注入(FIT)をトリガーにして,TSifterにより,直近で動きのあるメトリックを集めたダッシュボードを自動生成する研究を考えている. ### 国際会議候補 6,7月締め切りでクラウドかネットワーク系でCORE rank B相当の国際会議候補を探している.Full paper以外にShort paperがあるとなお良い. [CNSM 2021 - 17th International Conference on Network and Service Management](http://www.cnsm-conf.org/2021/) Izmir, Turkey // 25-29 October 2021 Paper Submission Deadline: 28 May 2021 # Clips ### DCネットワークのBGP [BGP in the Data Centerを読みました (1/6) : Chapter 1 - Introduction to Data Center Networks - baron tech blog](https://foobaron.hatenablog.com/entry/bgp-in-the-data-center-01) OSPFはIPv4, IPv6, MPLS, VPNなどのマルチプロトコルサポートがない ⇒ 実装の成熟度も鑑みてBGPを選択.RFC7938にDC内のBGPルーティングが記載されている.こういうのもRFCに書かれるのか. [RFC 7938 - Use of BGP for Routing in Large-Scale Data Centers](https://tools.ietf.org/html/rfc7938) ### libbpf [[PUBLIC] Libbpf: the road to v1.0](https://docs.google.com/document/d/1UyjTZuPFWiPFyKk1tV5an11_iaRuec6U-ZESZ54nNTY/edit?usp=drivesdk) libbpfのv1.0までのロードマップがでていた. ### uprobeの改善 [https://events.static.linuxfound.org/images/stories/pdf/eeus2012_desnoyers.pdf](https://events.static.linuxfound.org/images/stories/pdf/eeus2012_desnoyers.pdf) ### OpenTelemetry Metrics [OpenTelemetry Metrics Roadmap](https://medium.com/opentelemetry/opentelemetry-metrics-roadmap-f4276fd070cf) penTelemetryのメトリクスのロードマップがでていた.メトリックと,ログ・トレースとの接続,OpenCensusからの移行,既存のインフラであるPrometheusとStatsDのサポートなど. ### Istioのレイテンシオーバヘッド [Best Practices: Benchmarking Service Mesh Performance](https://istio.io/latest/blog/2019/performance-best-practices/) > At 1000 requests per second (RPS), across 16 connections, Istio adds 3 milliseconds per request in the 50th percentile, and 10 milliseconds in the 99th percentile. Istio 1.2ではsidecar proxyのレイテンシオーバヘッドは,16接続,1,000 RPSで,50%tileが3ms,99%tileが10ms.もちろん,リクエスト経路の遷移が深くなるほど,オーバヘッドは積み重なる. [Performance and Scalability](https://istio.io/latest/docs/ops/deployment/performance-and-scalability/) こちらは,1.9.1の話.90%tileが2.65 ms. ### IOT52 研究会 [2020年度第4回(IOT通算第52回)研究会プログラム](https://www.iot.ipsj.or.jp/meeting/52-program/) **マイクロサービス型システムの監視におけるグラフDB採用によるメトリック問い合わせ最適化の検討** 共同研究先の学生さんの発表を聴いていた.グラフDBにメトリックと依存関係データを格納して,同時に取得することで問い合わせ速度を向上させる. ### Productivityの計測 [Pull Requestから社内全チームの開発パフォーマンス指標を可視化し、開発チーム改善に活かそう - Hatena Developer Blog](https://developer.hatenastaff.com/entry/2021/03/04/093000) LeanとDevOpsの科学にかかれている指標のうち、変更のリードタイムとデプロイの頻度をトラッキングする話. ### はてなインターン [https://twitter.com/hitode909/status/1367745459326885890](https://twitter.com/hitode909/status/1367745459326885890) まったく実感がないが,今は学生なので小芝居をした.はてなインターンに参加したのはもう10年前になるなあ.