Рутерът RB3011на MikroTik понякога има проблеми с прекъсване на Ethernet портовете, което се получава от използването на различни скорости на връзката на един чип на комутатора (switch). RB3011 съдържа два чипа за свързване (switch, комутатор), като и двата са QCA8337. Първият комутатор е съставен от Ethernet портове 1-5, а вторият е съставен от Ethernet портове 6-10.
Всеки чип на комутатор има 1 Gb/s връзка към всяко от двете ядра на процесора (2Gb/s агрегирано. Вижте блоковата диаграма по-долу). Ако имате flap на портове и забележите, чe сa различни скорости на връзката на едни и същи чип на комутатора (1-5 или 6-10), тази статия ще ви помогне да разрешите този проблем.
Блоковата диаграма по-горе показва двата чипа за комутиране, етернет портовете и как се свързват обратно към основните ядра на процесора.
Причина
Основната причина на проблема изглежда е необходимостта за изчистване на буфера на комутатора (switch), преди да пренасочи трафика към другия порт с различни скорости на връзката (пример 100Mbits и 1Gbits).
Заобиколно решение
Очевидното просто решение за този проблем е да се уверите, че всички Ethernet портове, свързани към един и същ чип на комутатор, работят със същата скорост на връзката. Това може да изисква изключване на автоматичното договаряне и ръчно намаляване на скоростта на връзката. Ethernet портове 1-5 са свързани към един от чиповете на комутатора, а портове 6-10 са свързани към другия.
Частично решение
Това може да не разреши проблема напълно но flap-а ще намалее значително чрез деактивиране на опцията за flow control на процесора, която беше въведена във версия на RouterOS v6.47.
...
*) switch - correctly enable and disable CPU Flow Control on RB3011UiAS;
...
За съжаление тези опции не са налични от WinBox GUI и трябва да се правят с помощта на CLI. Можете да определите дали в момента имате активиран или деактивиран flow control, като изпълните следната команда:
/interface ethernet switch export verbose
Трябва да видите нещо подобно:
/interface ethernet switch
set 0 cpu-flow-control=yes mirror-source=none mirror-target=none name=switch1
set 1 cpu-flow-control=yes mirror-source=none mirror-target=none name=switch2
За да деактивирате опцията CPU-flow-control, използвайте следните команди:
/interface ethernet switch set switch1 cpu-flow-control=no
/interface ethernet switch set switch2 cpu-flow-control=no
Допълнително решение
В моя случай забелязах голям брой отпадане на опашката (/interface print stats, колона “tx-queue-drops”) което си е ясен знак за проблем. Него ще го решим по този начин:
/queue type set ethernet-default pfifo-limit=300
/queue interface set [find where queue!=no-queue] queue=ethernet-default
Четири дни след тази конфигурация нямам флапнат порт а преди това – средно на два три часа имах отпадане по на 10-15 поредни пакета в ICMP.