深入解析思科 IOS 路由交换设备缓冲区机制

news/2025/2/24 9:55:30

目录

一、数据包缓冲管理

二、数据包缓冲池 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 会请求创建更多适合该池的缓冲区

  • 在 RP 处理创建缓冲区的请求期间,可能造成更多缓冲区分配失败。

  • 由于系统内存限制,即便 RP 收到 buffer 请求,也可能无法创建额外的缓冲区,。

  • 创建缓冲区的操作可能需要几微秒,在此期间,由于缓冲区短缺,数据包会持续被丢弃

  • 如果缓冲区在创建后立即被消耗,RP 花费更多时间来创建缓冲区,而不是处理数据包

  • 这可能导致 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

http://www.niftyadmin.cn/n/5864196.html

相关文章

uni-app集成sqlite

Sqlite SQLite 是一种轻量级的关系型数据库管理系统(RDBMS),广泛应用于各种应用程序中,特别是那些需要嵌入式数据库解决方案的场景。它不需要单独的服务器进程或系统配置,所有数据都存储在一个单一的普通磁盘文件中&am…

goredis常见基础命令

基本操作 //删除键 exists,err: rdb.Exists(ctx,"key").Result() if err!nil{panic(err) } if exists>0{err rdb.Del(ctx,"key").Err()if err!nil{panic(err)} }string类型 //设置一个键值对 //0表示没有过期时间 err:rdb.Set(ctx,"key1",…

Layer2 扩容解决方案详解

Layer2 扩容解决方案详解 🔄 1. Layer2 基础概念 1.1 什么是 Layer2? Layer2 是建立在以太坊主网(Layer1)之上的扩容解决方案,它: 继承以太坊的安全性提供更高的交易吞吐量降低交易费用保持去中心化特性…

hot100_300. 最长递增子序列

hot100_300. 最长递增子序列 思路动态规划 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 […

细说STM32F407单片机2个ADC使用DMA同步采集各自的1个输入通道的方法

目录 一、示例说明 二、工程配置 1、RCC、DEBUG、CodeGenerator 2、USART6 3、TIM3 (1)Mode (2)参数设置 (3) TRGO (4)ADC1_IN0 1)ADCs_Common_Settings 2&a…

nextjs项目搭建——头部导航

Header.tsx 在src/app/component路径下,创建Header.tsx use client;import Link from next/link; import { usePathname } from next/navigation; import Logo from ./Logo;const Header () > {const pathname usePathname();const navItems [{ label: 首页…

本地部署Qwen2.5-VL-7B-Instruct多模态视觉大模型(Windows篇)

本文已首发于 秋码记录 如果你也想搭建一个与秋码记录一样的网站,可以浏览我的这篇 国内 gitee.com Pages 下线了,致使众多站长纷纷改用 github、gitlab Pages 托管平台 秋码记录网站使用的主题是开源的,目前只在github.com开源。 hugo-the…

Windows PyCharm的python项目移动存储位置后需要做的变更

项目使用的venv虚拟环境,因此项目移动存储位置后需要重新配置python解释器的位置,否则无法识别,若非虚拟环境中运行,则直接移动后打开即可,无需任何配置。 PyCharm版本为2021.3.3 (Professional Edition),其…