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 нищо не намери по въпроса…

Tags: ,

9 Responses to “2010-07-31 кажете не на ip redirects”

  1. Георги Тодоров Says:

    мда, знаех си че това е проблема, исках само да проверя, че и ти знаеш и ще си го намериш…. ;-)

  2. Vasil Kolev Says:

    @Георги Тодоров, това случайно да са се сетили да го оправят в следващите версии? Щото си е бъг, както и да го погледнем.

  3. Никола Says:

    Слуховете говорят, че веднъж Румен Свободников казал: “Хм, какъв е тоя рутер, дето не може да му се пусне tcpdump!?”. Тъй като съм преживял борби с IOS, подобни на тая, а понякога и по-странни, напълно го подкрепям.

  4. Vasil Kolev Says:

    @Никола, абеее… може да му се пусне нещо tcpdump (има debug режим, в който плюе всеки пакет), а можеш и да mirror-ваш порт към някой друг или даже към VLAN и после от другата страна да слушаш – аз така правя и няма проблем да закачиш 10gbps порт към 1gbps, например.

    Ама да, криво си е.

  5. Никола Says:

    Мен лично ме е страх да ги пускам тия железа в debug режим. Не съм “cisco guy” (както му казват ония хора), обаче в спомените ми са останали толкова изключения, че…

  6. Боян Says:

    Какви рутери “търкаляте” в този router проект, Василе (ако не е тайна) и какви са целите му ?

  7. Vasil Kolev Says:

    @Боян, за момента не искам да го публикувам, може би по-нататъка. Не че е особено сложно да се открие :)

  8. Георги Чорбаджийски Says:

    maniax-е не ти е правилно заглавието, трябва да е “кажете не на cisco”.

  9. Vasil Kolev Says:

    @Чорбаджийски, ами не мога :) В тоя клас, за който си говорим другото решение е Juniper, а те са доста по-дебели. Останалите производители просто нямат подходящ хардуер…

Leave a Reply