Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

pfc触发段错误

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

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

評価

難易度
3/5
見積もり時間
1〜2日
初心者へのやさしさ
55/100
issue の種類
バグ
明瞭さ
おおむね明確
活発さ
静か
技術スタック
cpp
領域
networking

調査の方向性

QbbNetDevice::Receive() と Resume() から開始し、次に SwitchNode::SendToDev() と SwitchNotifyDequeue() から device->SendPfc() を経由して渡される qIndex を追跡します。PACKET_PAYLOAD_SIZE 1000 と buffer_size 9 で報告されたワークロードを再現し、GetQp(qIndex) における RDMA QP 数を調べ、resume 処理が範囲外アクセスなしに完了することを確認します。

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

説明

Image Image

我将配置文件中的PACKET_PAYLOAD_SIZE 9000 改为1000,将buffer_size从32改为9,其余不变相同的一个workload,执行后者报错如图,AI告诉我是pfc resume的时候输入的队列id不对导致的,存在这个问题吗。

PFC 触发链路是:

SwitchNode::SendToDev()
-> CheckAndSendPfc(inDev, qIndex)
-> device->SendPfc(qIndex, 0) // pause

恢复链路是:

SwitchNode::SwitchNotifyDequeue()
-> CheckAndSendResume(inDev, qIndex)
-> device->SendPfc(qIndex, 1) // resume

GPU/NIC 收到 resume 后:

QbbNetDevice::Receive()
-> Resume(qIndex)

问题就在 Resume():

Ptr lastQp = m_rdmaEQ->GetQp(qIndex);

这里的 qIndex 是 PFC 队列号/优先级号,比如 3,不是 RDMA QP 数组下标。
你这次 gdb 里已经看到:

qIndex = 3
node id = 10
node type = 0
RDMA QP count = 2

也就是只有 2 个 QP,却访问 GetQp(3),直接越界段错误。

为什么 BUFFER_SIZE=9 更容易触发?

PFC 阈值这样算:

(buffer_size - total_hdrm - total_rsrv - shared_used_bytes) >> pfc_a_shift[port]

BUFFER_SIZE 从 32MB 改成 9MB,buffer_size 变小,PFC threshold 明显变低,更容易 pause,也更频繁 resume。于是更容易走到这个错误的 Resume(qIndex)。

主要言語
Python
スター
1.2k
フォーク
190
PR マージ指標
30日以内にマージされた PR はありません

環境構築

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

はじめの一歩

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

aliyun/SimAI のほかの issue

aliyun/SimAI の issue をすべて見る

似ている issue

Python の issue をもっと見る

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

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