Буферизация в CISCO IOS, поддержка QoS

Управление памятью в CISCO IOS происходит на 2 уровнях:

1. Уровень пулов памяти – управляется менеджером памяти. Каждый пул – это непрерывная область произвольного размера, выделяемая по запросу модуля ОС.

2. Уровень буферов пакетов – управляется менеджером буферов.

 

Каждый буфер состоит из области памяти для хранения пакетов и указателя на нее. Очереди буферов образуются из указателей. При перемещении пакета между очередями перемещается указатель на его буфер. Поддерживается 3 типа буферов и связанные с ними очереди пакетов:

1. С каждым интерфейсом связаны две очереди Tx-ring и Rx-ring, предназначенные для приема пакетов от контроллера и передаче их в контроллер. К их указателям имеют доступ как процессор, так и контролер интерфейсов. Структура указателей и размеры ячеек Х-очередей зависит от типа интерфейса и выбираются таким образом, чтобы уместился кадр максимального для данного интерфейса размера. Если после приема кадра контроллер интерфейса не может найти в Х-очереди указателя на свободную ячейку, то фиксируется переполнение кольца и кадр теряется.

 

2. Локальные очереди. С каждым интерфейсом связана входная и выходная локальная очередь. Доступна только процессору. Состоит из фиксируемого количества буферов, регулируемого администратором.

 

3. Системные очереди. Используются для хранения пакетов любых интерфейсов. Применяются при перегрузке интерфейса и переполнении локальной очереди. Могут быть организованы двумя способами:

1) Для младших моделей маршрутизаторов используется несколько системных очередей с ячейками определенного размера.

2) В старших моделях маршрутизаторов ячейка системной очереди состоит из нескольких фрагментов, связанных дополнительными указателями.

 

В исходном состоянии все очереди инициализируются указателями на свободные ячейки памяти ввода-вывода. После записи кадров в контроллер он переносится в X-ring очередь, генерируется прерывание, рассматривается входная локальная очередь интерфейса в поиске пустой ячейки, если нет – то системная. Если есть свободная ячейка – ее указатель копируется в очереди X-ring, а адрес ячейки с принятым кадром – в соответствующую локальную (системную) очередь. Если свободных ячеек нет, флаг указателя на ячейку содержащую кадр меняется с «занято» на «свободно». После – непосредственно маршрутизация.