目录
一、数据包缓冲管理
二、数据包缓冲池 Packet buffer pool
1. 静态缓冲池 vs 动态缓冲池
2. 公共池 vs 私有池
Buffers-toc" name="tableOfContents" style="margin-left:40px">三、系统缓冲 System Buffers
Buffer%20elements%C2%A0-toc" name="tableOfContents" style="margin-left:80px">1. Buffer elements
2. Public buffer pools
1. Show buffers
2. Show interface
五、思科路由器缓冲区调整
1. 低端平台(Cisco 1600、2500 和 4000 系列路由器)
2. 高端平台(RP、SP、Silicon SP、RSP)
3. Particle-based Platforms 基于粒子的平台
4. 缓冲区调整
六、Index
一、数据包缓冲管理
存储转发过程中,IOS 系统内必须有个地方来存储数据,即 buffer 缓冲区。
IOS 有一个专门用于管理此类缓冲区的特殊组件 - buffer pool manager 缓冲池管理器。数据包缓冲池管理器向内核的内存池管理器请求一块内存,并将其划分为多个缓冲区。然后,构建一个包含所有空闲缓冲区的列表,并监控这些缓冲区的分配和释放。
二、数据包缓冲池 Packet buffer pool
1. 静态缓冲池 vs 动态缓冲池
-
动态缓冲池- 动态缓冲池基于最小缓冲区数量(permanent buffers)创建,但可以根据需求添加或移除额外的缓冲区。对于动态缓冲池,如果缓冲池管理器在池为空时收到 buffer 请求,它会尝试扩展缓冲池来立即满足请求。如果在请求 buffer 时无法扩展池,管理器会拒绝请求,并在池管理器的后台进程中稍后扩展池。
2. 公共池 vs 私有池
公共池可以被任何系统进程使用,而私有池则是为特定一组进程创建的,并且仅为这些进程所知。
Buffers" name="%E4%B8%89%E3%80%81%E7%B3%BB%E7%BB%9F%E7%BC%93%E5%86%B2%20System%20Buffers">三、系统缓冲 System Buffers
Buffer%20elements%C2%A0" name="1.%20Buffer%20elements%C2%A0">1. Buffer elements
小型数据结构,用于操作系统的内部队列,或者当一个缓冲区需要与多个队列关联时使用。
router# show buffers
Buffer elements:
471 in free list (500 max allowed)
870696495 hits, 0 misses, 0 created
2. Public buffer pools
公共缓冲池定义了 6 个不同的池子应对不同大小数据包的处理。
Small—104 bytes buffers
Middle—600 byte buffers
Big—1524 byte buffers
VeryBig—4520 byte buffers
Large—5024 byte buffers
Huge—18024 byte buffers
如果接口处理器需要向 RP(路由处理器)传递一个20字节的数据包,它会“请求”一个 small 缓冲区。如果接口处理器需要传递一个500字节的数据包,它会请求一个 middle 冲区,依此类推。
接口处理器向 RP 请求数据包会有以下几种结果:
如果请求的缓冲池中存在空闲缓冲区,则会直接分配该缓冲区。否则,请求将触发一次“未命中”(miss),缓冲区算法会尝试为该池“创建”更多的缓冲区。
当 IOS 无法获取小型缓冲区时,它不会立即丢弃数据包,而是增加失败计数器,并继续请求下一级别的缓冲区,即中型缓冲区。如果中型缓冲区也无法获取,它会请求下一个级别的大型缓冲区。这个过程会一直持续,直到尝试获取超大型缓冲区(Huge buffer)。如果最终仍然无法获取超大型缓冲区,数据包才会被丢弃。
缓冲区分配失败是数据包丢弃最常见的原因之一。当由于缓冲区分配失败导致数据包丢弃时,情况可能愈演愈劣:
-
由于系统内存限制,即便 RP 收到 buffer 请求,也可能无法创建额外的缓冲区,。
-
这可能导致 RP 以极快的速度开始丢弃数据包,进而导致性能下降和会话丢失。
3. Interface buffer pools
接口缓冲池由接口用于输入/输出 (I/O)。当接口缓冲区可用列表中没有更多缓冲区时,路由器将回退至公共缓冲区池。回退不会影响性能。(基于设备)
#show interface tengi1/1/3
TenGigabitEthernet1/1/3 is up, line protocol is up (connected)
Hardware is Ten Gigabit Ethernet, address is 547c.6966.ae9f (bia 547c.6966.ae9f)
MTU 1500 bytes, BW 10000000 Kbit/sec, DLY 10 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation ARPA, loopback not set
Keepalive not set
Full-duplex, 10Gb/s, link type is auto, media type is SFP-10GBase-CX1
input flow-control is off, output flow-control is unsupported
ARP type: ARPA, ARP Timeout 04:00:00
Last input 00:00:01, output never, output hang never
Last clearing of "show interface" counters