Менеджер пакетного буферу
Маршрутизуючи пакети, система повинна мати деякий простір пам’яті для тимчасового збереження пакетів. Зазвичай для цього створюються буфери пам’яті, в яких зберігаються пакети, що поступають, поки система вирішує, куди їх переправити. Оскільки вся ідея операційної системи IOS заключається в маршрутизації пакетів, для роботи з буфером пакетів існує спеціальний менеджер пакетного буферу (packet buffer manager). Він використовується системою для створення і наступного керування набором пулів буфера пакетів. Буфери в таких пулах мають загальну назву – системні буфери.
Менеджери буферного пулу надають зручний спосіб маніпуляції набором (або пулом) буфера певного розміру. Не дивлячись на те, що менеджер буферного пулу може використовуватись для керування будь-яким видом буферних пулів, переважно він застосовується для маніпуляції з буфером пакетів.
Пули пам’яті для буферизації пакетів створюються шляхом виділення пам’яті з пулу (наприклад, процесорного або пулу вводу – виводу). Для того щоб створити пул, менеджер пакетного буферу вимагає у менеджера пулів виділити блок пам’яті і потім розділяє його на буфери. Менеджер пакетного буферу створює список всіх вільних буферів для іх наступного заповнення і звільнення.
Пули пакетного буфера можуть бути або статистичними, або динамічними. Статистичний пул створюється з фіксованою кількістю буферів, тобто далі по ходу роботи додаткові буфери не виділяються. Динамічні пули створюються з мінімальною кількістю буферів (так звані постійні буфери) з можливістю подальшого створення і видалення додаткових буферів. При необхідності розширення додаткового пулу буферів менеджер пулів старається негайно вдовільнити запит на розширення. Якщо ж негайно розширити пул не вдається, запит на розширення обробляється пізніше фоновим процесом менеджера пулів.
Пули пакетного буфера можуть бути загальними або локальними. Загальні пули, як випливає з їх назви, можуть використовуватися будь-яким системним процесом. Локальні пули використовуються лише процесором, для якого пул був створений.
Системні буфери
В будь-якій IOS-системі існує певний набір загальних буферних пулів – системних буферів. Ці буферні пули використовуються для комутації пакетів, що приходять, або для зберігання пакетів, що генеруються системою (наприклад, тестові пакети мережевих інтерфейсів або пакети оновлення таблиць маршрутизації). Інформація, яка стосується системних і інших буферів, може бути отримана з допомогою команди show buffer (приклад рис.5.15)
Приклад 1.10.
Router#show buffer
Buffer elements:
500 in free list (500 max allowed)
747314 hits, 0 misses, 0 created
Public buffer pools:
Small buffers, 104 bytes (total 50, permanent 50):
46 in free list (20 min, 150 max allowed)
530303 hits, 6 misses, 18 trims, 18 created
0 failures (0 no memory)
Middle buffers, 600 bytes (total 25, permanent 25):
25 in free list (10 min, 150 max allowed)
132918 hits, 3 misses, 9 trims, 9 created
0 failures (0 no memory)
Big buffers, 1524 bytes (total 50, permanent 50):
50 in free list (5 min, 150 max allowed)
47 hits, 0 misses, 0 trims, 0 created
0 failures (0 no memory)
Very big buffers, 4520 bytes (total 10, permanent 10):
10 in free list (0 min, 100 max allowed)
26499 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)
…
Рис.5.15. Використання команди show buffer
Вказані в прикладі загальні буфери являються стандартними для будь-якої системи IOS. У кожного буфера є ім’я (як, наприклад, small buffer, або малий буфер, middle buffer, або середній буфер, і т.д.), яке вказує на певний пул. За назвою пулу слідує розмір буферів, які містяться в даному пулі. В межах одного пулу розмір всіх буферів одинаковий і варіюється від 104 до 18024 байтів, щоб пристосовуватись до настройки параметра разміру блоку, що передається(maximum transmission unit – MTU), зіставлених різним мережевим інтерфейсам. Вміст інших полів виводу містить інформацію, яка описана нижче.
- total – сумарна кількість буферів в пулі (вільних і зайнятих).
- permanent – початкова (базова) кількість буферів в пулі. Для динамічних пулів кількість буферів може змінюватися. Однак вона не може досягати меншого значення, ніж вказано в даній графі.
- min free list – число вільних буферів.
- min– мінімальна кількість вільних буферів в пулі. Якщо кількість вільних буферів стає менше вказаного значення, менеджер буферного пулу робить спробу розширити пул з ціллю додавання додаткових буферів.
- max allowed – максимальна кількість вільних буферів в пулі. Відповідно, коли кількість вільних буферів перевищує вказане значення, менеджер зменшує кількість вільних буферів і звільнює пам’ять. Незалежно від значення max allowed, кількість буферів не може бути менше значення permanent.
- hits – кількість буферів, які були використані в даному пулі.
- misses– кількість запитів по питанню виділення вільного буфера, в той час, як кількість вільних буферів була менше значення min.
- trims– число буферів, видалених з пулу в результаті скорочення його розміру.
- created – число буферів, створених в процесі розширення пулу.
- failures – кількість відмов буферного пулу. Відмови обумовлені наступними причинами:
- запит на виділення буфера отриманий під час відпрацювання переривання, коли розширення пулу неможливе;
- отриманий запит на виділення буфера, в то час як доступних буферів не лишилося, а об’єм вільної пам’яті не дозволяє розширити пул.
- no memory – кількість відмов, пов’язаних з відсутністю вільної пам’яті в пулі (даний показник не використовується в більш пізніх версіях системи IOS).
Щоб змінити роботу менеджера пакетних буферів, розглянемо комутацію пакетів і прослідкуємо зміни у виводі команди show buffers для певного пулу. Почнемо з розгляду списку 16-ти вільних буферів, які приведені в прикладі нижче.
Small buffers, 104 bytes (total 16, permanent 16):
16 in free list (8 min, 16 max allowed)
0hits, 0 misses, 0 trims, 0 created
0 failures (0 no memory)
Рис. 5.16. Пустий буфер пакетів
Припустимо, що система отримала вісім мережевих пакетів, які можуть бути розміщені в 104-байтових буферах. В результаті вісім пакетів розміщуються у восьми буферах, а список вільних буферів скорочується до восьми (рис.5.17.).
Small buffers, 104 bytes (total 16, permanent 16):
16 in free list (8 min, 16 max allowed)
0hits, 0 misses, 0 trims, 0 created
0 failures (0 no memory)
Рис. 5.17. Отримання восьми пакетів с наступним розміщенням в буфери.
Якщо система отримує чотири пакети до того, як були оброблені попередні вісім, то кількість вільних буферів скорочується до чотирьох (рис.5.18):
Small buffers, 104 bytes (total 16, permanent 16):
4 in free list (8 min, 16 max allowed)
12 hits, 4 misses, 0 trims, 0 created
0 failures (0 no memory)
Рис. 518. Отримання додаткових чотирьох пакетів.
Отже, вільних буферів – чотири, використаних – дванадцять. Оскільки мінімальне значення вільних буферів складає вісім (8 min), ми маємо чотири „промахи” (4 misses). Це говорить менеджеру про необхідність розширити пул буферів, щоб число вільних буферів складало мінімально допустиме (тобто вісім в нашому прикладі). На рис. 5.19 показаний процес розширення пулу буферів:
Small buffers, 104 bytes (total 20, permanent 16):
8 in free list (8 min, 16 max allowed)
12 hits, 4 misses, 0 trims, 4 created
0 failures (0 no memory)
Рис. 5.19. Створення додаткових буферів.
З прикладу видно, що менеджер створив чотири додаткових буфери (4 created) для того, щоб число вільних буферів досягало мінімально допустиме значення – 8 (8 min).
Тепер уявимо, по потрібно виділити дев’ять буферів для розміщення пакетів, а вже використані буфери так само не звільнені (дана ситуація
В результаті обробки всіх пакетів операційна система IOS звільняє зайняті буфери, а менеджер пулу скорочує число вільних буферів до максимально допустимого значення, як показано в прикладі нижче.
Драйвери пристроїв
Однією з основних функцій операційної системи є розділення між апаратною і програмною частиною обчислювальної системи. Дане розділення зазвичай здійснюється за допомогою драйверів, що є частиною операційної системи. В цьому відношенні система IOS нічим не відрізняється від інших операційних систем. Система IOS містить драйвери для різних пристроїв, зокрема карти флэш-памяти, пам'яті NVRAM і встановлених в системі мережевих пристроїв.
Драйвери мережевих пристроїв операційної системи IOS надають інтерфейс для роботи з вхідними і витхідними пакетами. Будь-який драйвер складається з двох компонентів: частини, що управляє, і компоненту, пов'язаного із зберіганням і обробкою даних. Частина драйвера, що управляє, служить для контролю за станом пристрою (наприклад, відключення інтерфейсу). Компонент даних відповідає за передачу інформації через пристрій і підтримує операції комутації пакетів. Драйвери мережевих пристроїв дуже тісно пов'язані з механізмом комутації пакетів.
Драйвери пристроїв взаємодіють з іншими частинами системи IOS за допомогою спеціальної структури, що управляє, званої дескриптором інтерфейсу (interface descriptor block - IDB). Дана структура містить список функцій драйвера, що управляють, і інформацію про параметри пристрою і його стан (наприклад, IP-адрес, статистику проходження мережевих пакетів). Операційна система IOS містить дескриптори для кожного інтерфейсу.
Резюме
Процес еволюції операційної системи IOS починався з маленької системи, що перетворилася з часом на дуже потужну мережеву систему. Основні елементи IOS не відрізняються від елементів інших операційних систем. Проте всі компоненти операційної системи IOS оптимізовані для ефективної роботи в умовах обмеженого об'єму пам'яті і необхідності швидкої комутації пакетів.
IOS використовує механізми кооперативної багатозадачності і лінійної адресації пам'яті. Всі програми, буфери і таблиці маршрутизації розміщуються в межах одного адресного простору, відповідно будь-який процес має доступ до пам'яті будь-якого іншого процесу. Процеси в системі IOS еквівалентні потокам в інших операційних системах.
Система ІОS містить маленьке ядро, яке планує виконання процесів процесором. На відміну від інших операційних систем, ядро системи IOS виконується на призначеному для користувача рівні (не використовується механізм захищеного режиму) і розділяє один і той же простір адрес пам'яті зі всіма процесами.
Дата добавления: 2016-05-05; просмотров: 567;