DPDK workers hold VPC counters until their next packet

オープン
#2,047 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
56/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
rust

調査の方向性

Start by tracing how the DPDK driver collects and reports VPC and peering counters to GatewayAgent status and the vpc_* metrics; compare that path with the kernel driver. The report includes a reproduction using the fabricator Gateway Peering Counters release test, which you can run against a two gateway DPDK VLAB. Done means counters reach status within one collection after traffic stops on both drivers.

索引モデルが issue の本文から書いたものです。

説明

area/dpdk bug

On the DPDK driver, the VPC and peering counters a worker collects are not reported while that worker receives no traffic. They reach the GatewayAgent status and the vpc_* metrics only when the next packet arrives on the same worker, which can be minutes later.

A new fabricator release test that compares the status counters with a known number of pings caught it (https://github.com/githedgehog/fabricator/pull/2238). On a VLAB with two gateways on dataplane v0.38.1, an iperf run between vpc-01 and vpc-02 ended at 09:50:58. The counters summed over both gateways then stayed the same over four status collections, and grew by 682 packets on vpc-01->vpc-02 when 50 pings were sent:

09:50:58 INF Test connectivity (matrix) passed took=7.537440707s
09:51:18 DBG Gateway counters counters="map[peering vpc-01->vpc-02:{P:4929 B:4603303 D:0} peering vpc-02->vpc-01:{P:5538 B:4805461 D:0} vpc vpc-01:{P:4929 B:4603303 D:0} vpc vpc-02:{P:5538 B:4805461 D:0}]" collected="map[gateway-1:2026-11-04 09:51:15.344927766 +0000 UTC gateway-2:2026-11-04 09:51:14.696337172 +0000 UTC]"
09:51:38 DBG Gateway counters counters="map[peering vpc-01->vpc-02:{P:4929 B:4603303 D:0} peering vpc-02->vpc-01:{P:5538 B:4805461 D:0} vpc vpc-01:{P:4929 B:4603303 D:0} vpc vpc-02:{P:5538 B:4805461 D:0}]" collected="map[gateway-1:2026-11-04 09:51:30.354347198 +0000 UTC gateway-2:2026-11-04 09:51:29.707730508 +0000 UTC]"
09:51:58 DBG Gateway counters counters="map[peering vpc-01->vpc-02:{P:4929 B:4603303 D:0} peering vpc-02->vpc-01:{P:5538 B:4805461 D:0} vpc vpc-01:{P:4929 B:4603303 D:0} vpc vpc-02:{P:5538 B:4805461 D:0}]" collected="map[gateway-1:2026-11-04 09:51:45.367914574 +0000 UTC gateway-2:2026-11-04 09:51:44.719421263 +0000 UTC]"
09:52:18 DBG Gateway counters counters="map[peering vpc-01->vpc-02:{P:4929 B:4603303 D:0} peering vpc-02->vpc-01:{P:5538 B:4805461 D:0} vpc vpc-01:{P:4929 B:4603303 D:0} vpc vpc-02:{P:5538 B:4805461 D:0}]" collected="map[gateway-1:2026-11-04 09:52:15.388130213 +0000 UTC gateway-2:2026-11-04 09:52:14.742660164 +0000 UTC]"
09:52:18 INF Sending pings through the gateway peering from=server-01 to=server-02 cmd="ping -c 50 -s 1000 -i 0.2 -W 1 10.0.2.2"
09:52:33 DBG Gateway counters counters="map[peering vpc-01->vpc-02:{P:5611 B:4962583 D:0} peering vpc-02->vpc-01:{P:5673 B:4861159 D:0} vpc vpc-01:{P:5611 B:4962583 D:0} vpc vpc-02:{P:5673 B:4861159 D:0}]" collected="map[gateway-1:2026-11-04 09:52:30.399755995 +0000 UTC gateway-2:2026-11-04 09:52:29.752398856 +0000 UTC]"

https://github.com/githedgehog/fabricator/actions/runs/41801012403/job/126480062630

The test failed this way in 2 of 5 runs on the DPDK driver and in none of 6 on the kernel driver.

Expected

Counters reach the status within one collection after traffic stops, on both drivers.

How to reproduce

  1. Check out the fabricator branch dev/pau/gw-peering-counters and build hhfab with just hhfab-build.
  2. Create a VLAB with two gateways on the DPDK driver:
bin/hhfab init -v --dev --gateways=2
bin/hhfab vlab gen -v --gateway-driver=dpdk
  1. Bring the VLAB up and leave it running:
bin/hhfab vlab up -v
  1. In a second terminal, run the counters test, and run it again until it fails:
bin/hhfab vlab release-test -v --regex '^Gateway Peering Counters$'

A failure starts with forwarded pings: gateway counters grew by and shows more than 50 packets on one direction.

主要言語
Rust
スター
21
フォーク
9
平均マージ
2日 8時間
マージ済み PR(30日)
99

環境構築

  • Dockerfile または Docker Compose ファイルあり
  • プルリクエストのテンプレートなし
  • コントリビューションガイドなし

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

githedgehog/dataplane のほかの issue

githedgehog/dataplane の issue をすべて見る

似ている issue

Rust の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。