コンテンツにスキップ

Runbook: SAI table full (route / nexthop / FDB 上限到達)

実行前提

table full は data plane で「新規 route が programming されない」状態を生む。直接的に新規通信が黒落ちする可能性がある。CRM threshold 越えと同時に発生していることが多く crm-threshold-exceeded.md と併読のこと。config reload は問題を悪化させうる(再 program 中の race)ので、まずは投入 prefix を絞る方向で対処する。

症状

  • syslog に SAI_STATUS_TABLE_FULL / SAI_STATUS_INSUFFICIENT_RESOURCES
  • 新規 BGP route が Inactive のまま
  • crm show resourcesused / available 比が 95%+

想定原因(優先度順)

  1. route prefix の過剰投入: peer から default + specific の二重広告
  2. next-hop group の枯渇: ECMP メンバー組み合わせが爆発
  3. FDB age out 不足: aging 0 で MAC が滞留
  4. ACL TCAM 競合: 同 stage の table が ACL リソースを奪い合う

切り分け手順

flowchart TD
    A[SAI table 満杯エラー] --> B{どの table?}
    B -- ROUTE/NH --> B1[BGP 経路数 / ECMP group を削減]
    B -- ACL --> B2[ACL_TABLE 数 / entry を整理]
    B -- FDB --> B3[VLAN aging / mac 学習量を見直し]
    B1 --> C[platform のリソース上限を確認]
    B2 --> C
    B3 --> C

確認コマンド

1. CRM

crm show resources all
  • 期待: 80% 以下
  • 異常: ipv4_route / ipv4_nexthop / fdb_entry が 95%+

2. syncd ログ

docker logs syncd 2>&1 | grep -iE "TABLE_FULL|INSUFFICIENT" | tail

3. RIB のサイズ

show ip route summary
docker exec bgp vtysh -c "show ip bgp summary" | tail

4. FDB

show mac | wc -l

対処方法

  • BGP inbound filter で prefix を絞る: neighbor <peer> prefix-list PL_IN in
  • ECMP grouping を縮小: crm config polling interval 60 で観測しつつ調整
  • FDB aging を有効化: sudo config mac aging-time 600
  • 不要 ACL table 削除

関連ページ

引用元

本ページの根拠は引用元 12 を参照。


  1. sonic-net/sonic-swss @ 4305596 — orchagent/crmorch.cpp 

  2. sonic-net/sonic-sairedis @ 4305596 — syncd/Syncd.cpp