2010-07-31 кажете не на ip redirects
by Vasil Kolev(някой се беше оплакал, че не пиша по работа)
Днес около рутинно оглеждане на разни графики забелязах на втория ни router в проекта (първия вече се напълни) как процесора стои на около 60%. Видя ми се адски странно, понеже другия router е далеч по-пълен, търкаля 15тина BGP сесии и един-два порядъка повече трафик и стои на 8-10%. Реших, че не трябва да стои така и седнах да дебъгвам…
Като за начало, в списъка процеси проблем нямаше, но за сметка на това повечето CPU отиваше в interrupt-ове. Отне ми малко време да го разбера, поради веселия начин, по който това се вижда в sh processes cpu, след което се зачетох как точно мога да разбера какво става. Четенето доведе до извода, че трябва да пусна един profile и да видя какво става, понеже нищо друго не звучеше подходящо.
Цялата процедура по профилирането ме върна почти във времената на DOS и на debug.com … В общи линии процедурата е се видят началния и краен адрес на main:text (т.е. самия изпълняващ се код на IOS-а), да се подадат на една команда, на която единия параметър изисква внимателно прочитане на документацията и чакане 5 минути. После по документация – спираме профилирането и казваме sh profile terse.
Аз го направих и при вида на изхода така изпсувах, че вероятно са ме чули в съседния блок.
r2#sh profile terse PROF 8000000 BFFFFFF 2 PROFSKIP 806AA40 0 0 0 0 2 0 0 0 PROFSKIP 806AED0 0 0 0 0 0 0 1 0 ...
(и така прилично количество екрани)
Другият вариант на изхода беше почти толкова полезен. Стигнах до извода, че ми трябва начин да направя map между тоя адрес в паметта и функцията на ios-а, която се вика (имаше на няколко места по-големи стойности), след като не намерих документация по въпроса (човек открива “show profile” командите в списъците с недокументирани IOS команди и толкова, доста възможно е да греша какво извежда). Не го намерих (логично) в show memory и реших, че така няма да стане и ми липсват няколкото месеца ровене в кода на IOS-а, за да мога в някакво нормално време да намеря проблема.
Почнах да събирам допълнително информация и се оказа, че натоварването е започнало да расте заедно с трафика. Последва сравняване на всякакви възможни параметри на двата router-а и в крайна сметка се оказа, че на интерфейса, който гледа навътре (един VLAN с много портове в него) на единия router понеже съм сложил два адреса (имах един в 10/8 за разни тестове), автоматично се слага и no ip redirects. Пробвах го на другия и магически 60% от натоварването изчезнаха.
(нямам никакъв трафик, който реално да изисква пращането на redirect-и, проверих. Да припомня, icmp redirect се праща ако router-а трябва да върне някакъв пакет през същия интерфейс, от който го е получил.)
Вероятно съм се набил в някакъв бъг я на IOS-а (12.2SRC), или на някоя от картите, които търкалят пакети и твърде много пакети се качват до layer3 частта, вместо директно да се switch-нат. Google нищо не намери по въпроса…
July 31st, 2010 at 22:06
мда, знаех си че това е проблема, исках само да проверя, че и ти знаеш и ще си го намериш…. ;-)
July 31st, 2010 at 22:35
@Георги Тодоров, това случайно да са се сетили да го оправят в следващите версии? Щото си е бъг, както и да го погледнем.
July 31st, 2010 at 23:12
Слуховете говорят, че веднъж Румен Свободников казал: “Хм, какъв е тоя рутер, дето не може да му се пусне tcpdump!?”. Тъй като съм преживял борби с IOS, подобни на тая, а понякога и по-странни, напълно го подкрепям.
July 31st, 2010 at 23:19
@Никола, абеее… може да му се пусне нещо tcpdump (има debug режим, в който плюе всеки пакет), а можеш и да mirror-ваш порт към някой друг или даже към VLAN и после от другата страна да слушаш – аз така правя и няма проблем да закачиш 10gbps порт към 1gbps, например.
Ама да, криво си е.
July 31st, 2010 at 23:49
Мен лично ме е страх да ги пускам тия железа в debug режим. Не съм “cisco guy” (както му казват ония хора), обаче в спомените ми са останали толкова изключения, че…
August 2nd, 2010 at 01:07
Какви рутери “търкаляте” в този router проект, Василе (ако не е тайна) и какви са целите му ?
August 2nd, 2010 at 10:59
@Боян, за момента не искам да го публикувам, може би по-нататъка. Не че е особено сложно да се открие :)
August 4th, 2010 at 12:26
maniax-е не ти е правилно заглавието, трябва да е “кажете не на cisco”.
August 4th, 2010 at 12:32
@Чорбаджийски, ами не мога :) В тоя клас, за който си говорим другото решение е Juniper, а те са доста по-дебели. Останалите производители просто нямат подходящ хардуер…