世界を動かす技術を、日本語で。

Nvidia-smiが約66日後に無限にハングする

2026年1月25日原文(github.com)

概要

  • NVIDIA B200 GPU 環境で Open GPU Kernel Modules (バージョン570.133.20)を使用
  • openeuler 2.0 (LTS-SP2)カーネル6.6.0-100 上での動作
  • 約66日間の稼働後nvidia-smiコマンドがハング する問題
  • dmesgに knvlink関連のエラー 多数記録
  • プロプライエタリドライバでは未発生、オープンカーネル限定のバグ

NVIDIA Open GPU Kernel Modulesにおける長時間稼働後のnvidia-smiハング事象

  • GPU: NVIDIA B200

  • OS: openEuler 2.0 (LTS-SP2)

  • カーネル: 6.6.0-100(安定版リリース)

  • ドライバ: Open GPU Kernel Modules 570.133.20(OpenRM)

  • 発生タイミング: システム稼働約66日12時間後

    • nvidia-smiコマンドが無限ハング する現象
    • プロプライエタリドライバ (同バージョン)では発生しないことを確認済み
    • カーネルは安定版 (-rc等ではない)
    • 再現手順:
      • B200 + OpenRM + カーネル6.6.0
      • システムを66日以上連続稼働
      • nvidia-smi実行時にハング

ログ・エラー情報

  • dmesg出力例:

    • NVRM: knvlinkUpdatePostRxDetectLinkMask_IMPL: Failed to update Rx Detect Link mask!
    • NVRM: knvlinkDiscoverPostRxDetLinks_GH100: Getting peer1's postRxDetLinkMask failed!
    • 上記エラーが 複数回繰り返し記録
  • システム稼働状況:

    • uptimeコマンドで 67日超の稼働 を確認
    • last rebootでも 長期稼働 が裏付け

追加情報・再現性

  • nvidia-bug-report.log.gz 等の追加ログは未提出
  • バグ発生頻度: 1回のみ確認
  • 再現条件: 長期稼働後にのみ発生

考察・推奨対応

  • Open Kernel Driver固有のバグ である可能性が高い
  • knvlink関連の内部状態不整合リソースリーク による影響が疑われる
  • プロプライエタリドライバでは発生しない ため、OpenRM固有の実装問題の可能性
  • ワークアラウンド: 定期的な再起動、またはOpenRMのアップデート確認
  • 推奨アクション:
    • 詳細な nvidia-bug-report.log.gz の取得・提出
    • Open Kernel Driver開発チームへの報告
    • knvlink周辺のコードレビュー および リソース管理ロジック の再調査

まとめ

  • 長期稼働環境 での Open GPU Kernel Modules利用時のnvidia-smiハング は、 knvlink関連のバグ が強く示唆される
  • プロプライエタリドライバとの差分解析 が重要
  • 追加ログ提出 および 開発元へのフィードバック が解決への第一歩

Hackerたちの意見

すごいな、つまり、B200とnvlinkに何か問題があって、66日と12時間の稼働時間の後にnvidia-smiや他のジョブが失敗したりタイムアウトしたりするってこと?で、クラスターを再起動するとまた動き出すみたい。1つのB200だけ使えばジョブは動くかもしれないけど、ある人が電源を切ったからテストできなかったらしい。次のトラブルシューティングまでまた66日待たなくて済むといいけど。

どこかの32ビットカウンターがNVLINKの時にオーバーフローしてるのかな?

66日14時間24分(66.6日)だったら、もっと悪魔的なハングになってたかもね…

NVLinkのpostRxDetLinkMaskエラーがハングの直前に出るみたい。nvidia-smiが固まってる時にバグレポートやスタックトレースをキャプチャした人いる?

このデバッグのプロセスは、2のべき乗にどれくらいの時間単位を掛けると約66日になるかを探すだけなのかな。

スケールされたカウンターのオーバーフローだと思う。それに、AI生成のコメントにすぐ気づいた人他にいる?

最初に言ったけど、AIを使ったのは、1. めんどくさいから、2. 間違ったことを思い出したくなかったからなんだ。ちょっと気が引けてたけど、今はすごく気分が悪いよ。もう二度とやらないと思う - なんか間違ってる感じがする。

タイムスタンプはこんな風に比較しちゃダメだよ。まさにこれがtime_before()やtime_after()が存在する理由なんだから。

タイムスタンプBがタイムスタンプAよりも大きいけど、その差が符号なしの範囲の半分を超えている場合、BはAの前に発生したと見なされるってことを理解してるってことで合ってる?

ちょっと話が逸れるけど…「=0」を使って結果の符号だけをテストするのがいいよ。良いコンパイラなら、もっと良いコードを生成するはずだし、本当に良いコンパイラなら気にしないだろうね。今のGCCはどっちでもないけど。LinuxカーネルとGCCの愛憎関係って面白いよね。唯一サポートされてるコンパイラなのに… [1] ClangはLinuxを完全にコンパイルできるようになったのかな?最近のアップデートは追ってないからわからないけど。

わお、githubのコメントで誰かが[1]、この問題に割り当てられたバグ番号の一つがドライバーが動いている日数と一致してるのに気づいたみたい。 1: https://github.com/NVIDIA/open-gpu-kernel-modules/issues/971...

秒数のことを言ってるんだよね。でも、みんなこれを見てる人は、特定の境界が満たされてるかどうかを確認するために単位を変換すると思うよ。

Hacker Newsで議論の続きを見る