Buffers and Queues
System buffers are memory allocated from main system memory (also referred to as shared memory) to hold packets while they are process-switched. There are parameters regarding these buffers that can be tuned, but that is not often recommended, and tuning them has no effect on any route caching methods you may have (fast, autonomous, silicon, or optimum switching, for instance). To enhance the (packet) processing power of your router, you are usually encouraged to take advantage of your router's route caching capabilities. Because the buffers that hold packets while they are being process switched are memory borrowed from the main system (RAM) memory, the memory available is not too limited. One can conjecture that this is an advantage of process switching.There are six buffer sizes, each of which is appropriate for a specific range of packet sizes:
Small Buffers: 104 Bytes
Middle Buffers: 600 Bytes
Big Buffers: 1524 Bytes
Very Big Buffers: 4520 Bytes
Large Buffers: 5024 Bytes
Huge Buffers: 18024 Bytes
You must keep in mind that a buffer must be allocated and free at the time a packet arrives, or the packet will be dropped and the number of misses (shown in the output of the show buffers command, discussed later) is incremented. Furthermore, the router cannot afford to have too many buffers allocated and free (to avoid potential drops and misses), as that will reduce the available memory (from the shared pool) needed for other purposes. This challenge is addressed by having a minimum number of buffers (for each size) allocated at all times, and dynamically allocated and de-allocated buffers based on the traffic rate (process-switched packets sent and received). The parameters that are used for managing buffers follow and apply to each buffer size:
PermanentThe minimum number of buffers allocated. Buffers are de-allocated (trimmed) at times, but the number of allocated buffers will not go below this.
Max-FreeWhen the number of buffers that are allocated but not used (free) exceeds this value, a trim (de-allocation) is triggered. The memory is returned to the shared pool, and can be used for other purposes.
Min-FreeAs the allocated (free) buffers are used up, the number of free buffers is reduced. When the number of free buffers reduces to be equal to the Min-Free parameter, buffer allocation (create) is triggered. This attempts to always have a minimum number of allocated and unused buffers available for each packet size.
InitialThis parameter indicates how many buffers should be allocated (for a particular packet size) at the router initialization time. This value is usually larger than Permanent.
When faced with performance degradation support scenarios, the show buffers command is very useful. If you see a large number of misses reported for a particular buffer size, you may have to adjust the Permanent or Min-Free parameters for that particular buffer size.
The number of failures indicates how many times the allocation of more buffers has been unsuccessful. Please consult your technical support representative before adjusting any buffer parameters. Example 4-7 shows the syntax for adjusting buffer parameters.
Example 4-7 Adjusting Buffer Parameters
A_StubR(config)#buffers ? |
Ethernet IEEE 802.3 |
Serial Serial |
big Big buffers |
huge Huge buffers |
large Large buffers |
middle Middle buffers |
small Small buffers |
verybig Very Big buffers |
|
A_StubR(config)#buffers big ? |
initial Temporary buffers allocated at system reload |
max-free Maximum number of free buffers |
min-free Minimum number of free buffers |
permanent Number of permanent buffers |
|
A_StubR(config)#buffers big min-free ? |
<0-20480> Number of buffers |
Buffers and Queues (Cisco 7000/7010)
In the Cisco 7000, routers' packets are held in interface hardware buffers, SP or SSP buffers, and RP buffers. Figure 4-6 displays those Cisco 7000 router components along with the error conditions associated with each of them.
Figure 4-6 Cisco 7000 Buffers and Error Conditions
Interface input and output queues on the RP are linked lists of processor buffers used for each interface. An interface queue can hence be composed of different-sized buffers. The queue associated with an interface can grow (to a configured limit) and shrink (down to zero). When a packet must be held in the input queue or output queue of an interface (on the RP), a buffer is taken away from the appropriate allocated and free list (based on size). However, if the input or output queue of an interface reaches its maximum size, the queue cannot grow larger. In other words, after a queue reaches its maximum size, it will likely start dropping subsequent packets. When you look at the show interface command output, pay attention to the number of drops reported for input and output queues. The default size of the input queue (hold queue) and output queue (hold queue) are 75 (packets) and 40 (packets) correspondingly.
The SP or SSP has 512 KB of memory. This memory is partially used for route caching (autonomous switching) and partially used for buffering the packets copied in from different interface processors. Use the show controllers cxbus command to find the allocation of interface buffers on the SP.
There are hardware buffers that are used to hold packets on the interface hardware itself. If an interface buffer gets full, an ignore is registered. In other words, every time an interface cannot accept a frame due to an input buffer being full, the ignore counter is incremented by one. Ignore is the result of either a high-speed interface accepting frames close to wire speed and SP not being able to put the data out of the interface hardware buffer fast enough, or a CxBus that is so busy that the interface hardware does not get enough chances to unload data from its buffers to the SP.
Buffers and Queues (Cisco 4000/3000/2500)
In Cisco 4000/3000/2500 routers, because there is no SP, SSP, or RSP, buffers reside on the shared memory. Packets enter into an interface (hardware buffer), and they are sent directly to the shared memory.
In shared memory, a packet is kept in the input queue corresponding to the ingress interface. Next, an output interface for the packet is possibly selected (perhaps after the process switching or fast switching task completes). Then the packet is held in the output queue of the egress interface, until it is finally sent to the output interface hardware.
show buffers Command
The show buffers command displays information (statistics) on buffer elements, public buffer pools, and interface buffer pools. Buffer elements are small data structures that are used for internal operating system queues or when a buffer must be associated with more than one queue. The public buffer pools are presented in the second section of the show buffers output and each buffer size (small, middle, and so on) is presented with its own statistics. The last section of the show buffers command output displays the buffer statistics for each of the router's interfaces. Example 4-8 presents a sample output (partial) from the show buffers exec command.
Example 4-8 A Sample Output of the show buffers Exec Command
A_StubR#show buffers |
Buffer elements: |
500 in free list (500 max allowed) |
3846 hits, 0 misses, 0 created |
|
Public buffer pools: |
Small buffers, 104 bytes (total 50, permanent 50): |
49 in free list (20 min, 150 max allowed) |
1440 hits, 0 misses, 0 trims, 0 created |
0 failures (0 no memory) |
Middle buffers, 600 bytes (total 25, permanent 25): |
25 in free list (10 min, 150 max allowed) |
703 hits, 0 misses, 0 trims, 0 created |
0 failures (0 no memory) |
Big buffers, 1524 bytes (total 50, permanent 50): |
50 in free list (5 min, 150 max allowed) |
150 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, 100 max allowed) |
0 hits, 0 misses, 0 trims, 0 created |
0 failures (0 no memory) |
Large buffers, 5024 bytes (total 0, permanent 0): |
0 in free list (0 min, 10 max allowed) |
0 hits, 0 misses, 0 trims, 0 created |
0 failures (0 no memory) |
Huge buffers, 18024 bytes (total 0, permanent 0): |
0 in free list (0 min, 4 max allowed) |
0 hits, 0 misses, 0 trims, 0 created |
0 failures (0 no memory) |
|
Interface buffer pools: |
Ethernet0 buffers, 1524 bytes (total 32, permanent 32): |
8 in free list (0 min, 32 max allowed) |
24 hits, 0 fallbacks |
8 max cache size, 8 in cache |