目錄

簡介

必要條件

需求

採用元件

慣例

緩衝區丟失和故障

緩衝池

緩衝區配置命令

其他show命令

相關資訊

簡介

本文討論路由處理器(RP)上的緩衝區遺漏和故障。

必要條件

需求

本文件沒有特定需求。

採用元件

本文件所述內容不限於特定軟體和硬體版本。

本文中的資訊是根據特定實驗室環境內的裝置所建立。文中使用到的所有裝置皆從已清除（預設）的組態來啟動。如果您的網路正在作用，請確保您已瞭解任何指令可能造成的影響。

慣例

如需文件慣例的詳細資訊，請參閱思科技術提示慣例。

緩衝區丟失和故障

RP將其處理器記憶體分為多個池。每個池包含大小相等的多個記憶體塊。這些記憶體塊稱為緩衝區。

緩衝池

有六個緩衝池：

- Small - 104位元組緩衝區

- 中間 — 600位元組緩衝區

- Big - 1524位元組緩衝區

- VeryBig - 4520位元組緩衝區

- 大 — 5024位元組緩衝區

- Giant（大） — 18024位元組緩衝區

例如，如果介面處理器需要將20位元組的資料包傳遞到RP，則「要求」一個小型緩衝區。如果介面處理器需要將500位元組的資料包傳遞到RP，它會請求中間緩衝區，以此類推。

注意：介面處理器必須請求一定大小的緩衝區。

當介面處理器要求緩衝區時，會發生以下情況：

- 如果請求的池中存在可用緩衝區，則會授予該緩衝區。否則，請求會生成「miss」，緩衝區演算法會嘗試「建立」該池的更多緩衝區。

- 當IOS無法獲得小型緩衝區時，它不會丟棄資料包。它會遞增失敗計數器並進入下一個級別緩衝區，即中間緩衝區，並在那裡請求緩衝區。如果無法獲得中間緩衝區，則請求下一個級別的緩衝區，即Big緩衝區。此過程將一直持續，直到它到達超大緩衝池。如果未能獲得巨大的緩衝區，則會丟棄資料包。

- 使用IBM功能集時，缺失幾乎總是會生成故障。

- 儘管IBM功能可能採用進程交換，但獲取緩衝區以將資料包從介面傳遞到RP的代碼仍將在中斷級別執行。

- 無法在中斷級別建立緩衝區；因此，未命中將其對更多緩衝區的請求排隊到RP。

- 由於無法在該點上建立額外的緩衝區，緩衝區請求將失敗，資料包將被丟棄。

緩衝區故障是丟包最常見的原因之一。當由於緩衝區故障而發生封包捨棄時，會發生以下情況：

- 緩衝區故障後，RP有一個未完成的請求，要為特定池建立更多大小適當的緩衝區。

- 當RP為建立緩衝區請求提供服務時，池中可能存在其他故障。

- RP甚至可能無法建立更多緩衝區，因為當需要額外的緩衝區時，系統中存在記憶體限制。

- 實質上，建立緩衝區操作可能需要幾微秒，在此期間，由於緩衝區不足，資料包會被持續丟棄。

- 此外，如果緩衝區的使用速度與建立速度一樣快，RP可能會被迫花費更多時間建立緩衝區，而不是處理資料包。

- 這可能會導致RP開始快速丟棄資料包，導致效能下降和會話丟失。

幸運的是，如本文所述，緩衝故障問題不難識別和解決。以下show buffers命令輸出會顯示路由器緩衝區池的當前狀態：

dspu-7k#show buffers

Buffer elements:

500 in free list (500 max allowed)

2370 hits, 0 misses, 0 created

Public buffer pools:

Small buffers, 104 bytes (total 16, permanent 10):

11 in free list (0 min, 10 max allowed)

1770 hits, 33 misses, 22 trims, 28 created

9 failures (0 no memory)

Middle buffers, 600 bytes (total 90, permanent 90):

89 in free list (10 min, 200 max allowed)

590 hits, 0 misses, 0 trims, 0 created

0 failures (0 no memory)

Big buffers, 1524 bytes (total 90, permanent 90):

90 in free list (5 min, 300 max allowed)

126 hits, 0 misses, 0 trims, 0 created

0 failures (0 no memory)

VeryBig buffers, 4520 bytes (total 10, permanent 10):

10 in free list (0 min, 300 max allowed)

50 hits, 0 misses, 0 trims, 0 created

0 failures (0 no memory)

Large buffers, 5024 bytes (total 10, permanent 10):

10 in free list (0 min, 30 max allowed)

0 hits, 0 misses, 0 trims, 0 created

0 failures (0 no memory)

Huge buffers, 18024 bytes (total 2, permanent 0):

0 in free list (0 min, 13 max allowed)

2 hits, 2 misses, 0 trims, 2 created

0 failures (0 no memory)

在show buffers輸出中：

- Total標識池中的緩衝區總數，包括已使用和未使用的緩衝區。

- Permanent標識池中已分配緩衝區的永久數量。這些緩衝區始終位於池中，不能被修剪掉。

- 在可用列表中標識池中當前可供使用的緩衝區數。

- Min標識RP應嘗試保留在可用清單中的最小緩衝區數：

- min引數用於預測在任何給定時間對池中緩衝區的需求。

- 如果可用清單中的緩衝區數低於min值，RP會嘗試為該池建立更多緩衝區。

- Max-allowed標識可用清單中允許的最大緩衝區數：

- max-allowed引數防止池獨佔其不再需要的緩衝區。它還會釋放該記憶體回系統以供進一步使用。

- 如果可用清單中的緩衝區數大於max-allowed值，RP應嘗試從池中修整緩衝區。

- Hits標識已從池中請求的緩衝區數。hits計數器提供了一種機制，用於確定哪個池必須滿足緩衝區的最高需求。

- Misses標識請求緩衝區的次數，以及檢測到RP需要池附加緩衝區的次數。換句話說，自由清單中的緩衝區數已下降到低於min級別。misses計數器表示RP被迫建立其他緩衝區的次數。

- Trims標識RP在可用清單中的緩衝區數超過最大允許緩衝區數時從池中修整的緩衝區數量。

- Created標識已在池中建立的緩衝區數。RP會在以下情況下建立緩衝區：

- 當對緩衝區的需求增加時，直到空閒清單中的緩衝區數量小於min緩衝區。

- 由於可用清單中沒有緩衝區，因此發生miss。

- 剛才的情況。

- Failures標識IOS在未能獲得小緩衝區時不會丟棄資料包。它會遞增失敗計數器並進入下一個級別緩衝區，即中間緩衝區，並在那裡請求緩衝區。如果無法獲得中間緩衝區，則請求下一個級別的緩衝區，即Big緩衝區。此過程將一直持續，直到它到達超大緩衝池。如果未能獲得巨大的緩衝區，則會丟棄資料包。

- 無記憶體標識因記憶體不足導致建立其他緩衝區而導致的故障數。

您可以檢查每個池的特徵，以確定哪些池（如果有）遇到了問題。可以調整池的引數，使路由器能夠更好地處理負載（如果池似乎顯示以下特性）：

- 未命中次數和建立增量的速率（以命中百分比表示）。

- 可用清單中的緩衝區數始終較低。

- 失敗次數或無記憶體增量。

緩衝區配置命令

使用buffers配置命令，可以調整每個緩衝池的這些引數：

- initial — 系統重新載入時分配的臨時緩衝區。

- max-free -最大可用緩衝區數。

- min-free -最小可用緩衝區數。

- permanent — 永久緩衝區數。

初始緩衝區

調整初始緩衝區，以適應路由器重新載入後建立作業階段流量的突發量。

buffers small initial 250

這些緩衝區最終「修剪」並返回系統。

初始緩衝區設計用於處理會話建立，該會話始終是進程交換的。

建立會話期間，填充快速交換快取（由其他路由協定使用）；不再需要進程交換緩衝區，可以將其返回系統。

要調整IBM功能集的初始緩衝可能不是正確的解決方案，因為幾乎所有資料包（建立會話後）都是進程交換的，而且仍然需要額外的緩衝。

注意：對於IBM進程交換功能，應調整永久緩衝區，而不是調整臨時初始緩衝區。

最大可用緩衝區

調整max-free緩衝區，使值等於或大於永久緩衝區。如果所有永久緩衝區都在可用清單中，則RP不應嘗試調整永久緩衝區。Max-free可用於確保在非規則突發期間建立的未使用緩衝區返回到系統記憶體。

buffers small max-free 175

buffers small permanent 125

最小可用緩衝區

調整min-free緩衝區，使值表示任何時候所需的估計最小緩衝區數。Min-free可用於預測緩衝區不足情況，並確保始終有最小數量的緩衝區可用。

buffers small min-free 50

永久緩衝區

調整permanent緩衝區，使值表示正常處理所需的估計緩衝區數。

buffers small permanent 125

永久緩衝區用於滿足路由器的正常緩衝區要求（包括頻繁猝發）。確定正常的緩衝區要求是一個互動過程，其中show buffer輸出應顯示池在給定時間使用的緩衝區總數。永久緩衝區應針對所需的一致「總」緩衝區進行調整。在調整永久緩衝區時，應注重減少建立，消除丟失和故障。

其他show命令

還有兩個show命令可用於確定緩衝區分配問題：

- show interfaces interface-identifier

- show source-bridge

此show interfacesinterface-identifier 示例命令輸出包括無緩衝區的計數器：

dspu-7k#show interfaces channel 4/2

Channel4/2 is up, line protocol is up

Hardware is cxBus IBM Channel

MTU 4472 bytes, BW 98304 Kbit, DLY 100 usec, rely 255/255, load 1/255

Encapsulation CHANNEL, loopback not set, keepalive not set

Virtual interface

Last input 0:00:04, output 0:00:04, output hang never

Last clearing of "show interface" counters never

Output queue 0/40, 0 drops; input queue 0/75, 8 drops

5 minute input rate 0 bits/sec, 0 packets/sec

5 minute output rate 0 bits/sec, 0 packets/sec

646 packets input, 27760 bytes, 8 no buffer

Received 0 broadcasts, 0 runts, 0 giants

0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort

328 packets output, 16959 bytes, 0 underruns

0 output errors, 0 collisions, 0 interface resets, 0 restarts

0 output buffer failures, 0 output buffers swapped out

在show interfaces interface-identifier 命令輸出中：

- 當介面無法為入站資料包獲取緩衝區時，no buffer計數器會增加。

- 當介面無法獲取傳入封包的緩衝區時，no buffer和drops（輸入佇列）計數器都會增加。

- show interfaces輸出中增加的no buffer計數器與show buffers輸出中增加的misses計數器相關。可以調整適當的緩衝池。

為介面設定來源路由橋接(SRB)時，show source-bridge範例命令輸出包括針對節流器的介面計數器：

dspu-7k#show source-bridge

Local Interfaces:                        receive            transmit

srn bn  trn r p s n  max hops     cnt:bytes          cnt:bytes      drops

Ch4/2  666  1   99 *   f    7  7  7      652:26020            6:266           0

Global RSRB Parameters:

TCP Queue Length maximum: 100

Ring Group 99:

This TCP peer: 150.10.20.2

Maximum output TCP queue length, per peer: 100

Peers:                 state     bg lv  pkts_rx  pkts_tx  expl_gn   drops TCP

TCP 150.10.20.1       open         *3      261      266        0       0   0

TCP 150.10.20.2       -            *3        0        0        0       0   0

Rings:

bn: 1  rn: 888  locvrt ma: 4000.7000.fff1 Buff Ring888          fwd: 0

bn: 1  RN: 666  local  ma: 4000.0c48.2e80 Channel4/2            fwd: 261

bn: 1  RN: 88   remote ma: 4000.4000.fff1 TCP 150.10.20.1       fwd: 322

bn: 1  RN: 250  remote ma: 4000.300f.7c09 TCP 150.10.20.1       fwd: 0

Explorers: ------- input -------             ------- output -------

spanning  all-rings     total      spanning  all-rings     total

Ch4/2           0          0         0             0          1         1

Local: fastswitched 0         flushed 0         max Bps 256000

rings      inputs         bursts         throttles output drops

Ch4/2           0              0                 8            0

在show source-bridge指令輸出中：

- 當介面無法為入站資料包獲取緩衝區時，throttles計數器會遞增。

- show interfaces命令輸出中遞增的throttles計數器與show buffers命令輸出中遞增的misses計數器相關。可以調整適當的緩衝池。

相關資訊

- 適用於所有Cisco路由器的緩衝區調節

- 技術支援與文件 - Cisco Systems