optimizing traffic control for isp mikrotik routeros 5 pcq
Оптимизиране на трафика контрол за ISP – Mikrotik RouterOS 5 – PCQ/queue tree
Когато стане въпрос за ограничаване на трафика в Микротик всеки предлага simple queue. По принцип да, наистина е много удобно в един ред да ограничаваш един адрес и в двете посоки. Но когато адресите на нашите потребители нараснат положението започва да се усложнява първо в трафик контрола. Главния проблем идва от там, че всеки един пакет линеино преглежда всички правила в simple queue и когато те са 100 всичко е наред но нараснат ли до 1000 или повече, ресурса на процесора е на привършване. Първият сигнал за това са повишени и неравномерни стоиности в отговора на пинг както към машината така и през нея. Вторият и още по ясен сигнал е “дропенето” на пакети. Всъщност проблема не идва от колко потребители имаш и колко трафик ще направят те а от броя на пакети които преминават през правилата на queue. В нашия случай имаме една машина с над 1000 правила в simple queue която видимо има проблемите които споменах по горе. След като сме стигнало до тук имаме два варианта или да купим нов и по мощен хардуер или да се опитаме да оптимизираме трафик контрола. Тръгвайки по по трудния път нека първо да покажа конфигурацията.
Intel® Pentium® Processor T4200 (1M Cache, 2.00 GHz, 800 MHz FSB # DEVICE VENDOR NAME IRQ 0 04:05.0 Intel Corporation 82541GI Gigabit Ethernet Controller (rev: 5) 9 1 04:04.0 ATI Technologies Inc ES1000 (rev: 2) 11 2 03:00.4 Intel Corporation 82573E KCS (Active Management) (rev: 3) 11 3 03:00.3 Intel Corporation Active Management Technology - SOL (rev: 3) 10 4 03:00.0 Intel Corporation 82573E Gigabit Ethernet Controller (Copper) (rev: 3) 9 5 00:1f.3 Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev: 1) 10 6 00:1f.2 Intel Corporation 82801GB/GR/GH (ICH7 Family) SATA IDE Controller (rev: 1) 10 7 00:1f.1 Intel Corporation 82801G (ICH7 Family) IDE Controller (rev: 1) 11 8 00:1f.0 Intel Corporation 82801GB/GR (ICH7 Family) LPC Interface Bridge (rev: 1) 0 9 00:1e.0 Intel Corporation 82801 PCI Bridge (rev: 225) 0 10 00:1d.7 Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev: 1) 11 11 00:1d.3 Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #4 (rev: 1) 11 12 00:1d.2 Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #3 (rev: 1) 11 13 00:1d.1 Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #2 (rev: 1) 10 14 00:1d.0 Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #1 (rev: 1) 11 15 00:1c.5 Intel Corporation 82801GR/GH/GHM (ICH7 Family) PCI Express Port 6 (rev: 1) 255 16 00:1c.4 Intel Corporation 82801GR/GH/GHM (ICH7 Family) PCI Express Port 5 (rev: 1) 255 17 00:1c.0 Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev: 1) 255 18 00:00.0 Intel Corporation E7230/3000/3010 Memory Controller Hub (rev: 0) 0 |
На мен специално ми се вижда слаба но ще трябва да се задоволим с това с което разполагаме.
Първото нещо което ми направи неприятно впечатление е неравномерното натоварване на ядрата на процесора. Едното почти държеше 100% а другото подскачаше здраво. Това е явен знак, че има проблем с прекъсванията от лан картите и затова ги разделих всяка да се обработва само от едно ядро.
system resource irq set numbers=9 cpu=1 system resource irq set numbers=12 cpu=0 |
след което получих следния резултат.
[admin@main] > system resource irq print # IRQ USERS CPU ACTIVE-CPU COUNT 0 1 i8042 auto 0 2 1 4 serial auto 0 4 2 6 floppy auto 0 3 3 9 acpi auto 0 0 4 12 i8042 auto 0 2 5 14 ide0 auto 0 0 6 15 ide1 auto 0 0 7 16 usb5 auto 0 0 8 17 vlans 1 1 71987 9 18 usb4 auto 0 0 10 19 usb3 auto 0 156 ata_piix 11 23 usb2 auto 0 0 usb1 12 43 internet 0 0 79372 |
Лан интерфейса vlans се обработва от 1 ядро а internet от 0, всички останали irq имат стойности auto. Видимо нещата се поуспокоиха но ядрата продължаваха да подскачат много неравномерно от 60% до 100%. Този път изключих и rps на интерфейса internet. rps всъщност е функционалност за балансиране на натоварването на лан картите но в случая на нас ни пречи именно защото имаме високо натоварена система и времето за отговор на ядрата е по голямо когато се прави балансинг отколкото ако отговаря само едно ядро на една карта.
[admin@main] > system resource irq rps disable numbers=internet [admin@main] > system resource irq rps print Flags: X - disabled # NAME 0 X internet 1 vlans |
Само с тази стъпка аз получих доста добър резулат защото виждах как ядрата се товарят равномерно но стоиностите бяха много високи 75-100% дропенето на пакети почти изчезна но пинга си остана много висок навсякъде. Явно беше, че със simple queue трафик контрола на тази машина няма да го бъде и трябва да се помисли сериозно за оптимизация.
Ако съм честен дълго се ровех в google и когато търсех с ключови думи често стигах края на страниците с резултати и въпреки всичко пак се връщах в manual страницата на http://www.mikrotik.com/ докато накрая не намерих решението пак там. Общо взето нека си представим, че имаме 6 различни скорости и това са 40, 20, 10, 4, 2, и 1 mbits. Разполагаме само с два мрежови интерфейса и това са vlans към нашите потребители и internet към Интернет. Основните правила които ще приложим са тези.
ip firewall mangle add chain=forward src-address-list=40M action=mark-connection new-connection-mark=40M passthrough=yes comment="Clients 40Mbits" disabled=no ip firewall mangle add chain=forward connection-mark=40M action=mark-packet new-packet-mark=40M passthrough=no disabled=no queue type add name="PCQ_down_40M" kind=pcq pcq-rate=40M pcq-classifier=dst-address queue type add name="PCQ_up_40M" kind=pcq pcq-rate=40M pcq-classifier=src-address queue tree add name=Download parent=vlans queue=default priority=1 queue tree add name=down_40M parent=Download packet-mark=40M queue=PCQ_down_40M queue tree add name=Upload parent=internet queue=default priority=1 queue tree add name=40M parent=Upload packet-mark=40M queue=PCQ_up_40M ip firewall mangle add chain=forward src-address-list=20M action=mark-connection new-connection-mark=20M passthrough=yes comment="Clients 20Mbits" disabled=no ip firewall mangle add chain=forward connection-mark=20M action=mark-packet new-packet-mark=20M passthrough=no disabled=no queue type add name="PCQ_down_20M" kind=pcq pcq-rate=20M pcq-classifier=dst-address queue type add name="PCQ_up_20M" kind=pcq pcq-rate=20M pcq-classifier=src-address queue tree add name=down_20M parent=Download packet-mark=20M queue=PCQ_down_20M queue tree add name=20M parent=Upload packet-mark=20M queue=PCQ_up_20M ip firewall mangle add chain=forward src-address-list=10M action=mark-connection new-connection-mark=10M passthrough=yes comment="Clients 10Mbits" disabled=no ip firewall mangle add chain=forward connection-mark=10M action=mark-packet new-packet-mark=10M passthrough=no disabled=no queue type add name="PCQ_down_10M" kind=pcq pcq-rate=10M pcq-classifier=dst-address queue type add name="PCQ_up_10M" kind=pcq pcq-rate=10M pcq-classifier=src-address queue tree add name=down_10M parent=Download packet-mark=10M queue=PCQ_down_10M queue tree add name=10M parent=Upload packet-mark=10M queue=PCQ_up_10M ip firewall mangle add chain=forward src-address-list=4M action=mark-connection new-connection-mark=4M passthrough=yes comment="Clients 4Mbits" disabled=no ip firewall mangle add chain=forward connection-mark=4M action=mark-packet new-packet-mark=4M passthrough=no disabled=no queue type add name="PCQ_down_4M" kind=pcq pcq-rate=4M pcq-classifier=dst-address queue type add name="PCQ_up_4M" kind=pcq pcq-rate=4M pcq-classifier=src-address queue tree add name=down_4M parent=Download packet-mark=4M queue=PCQ_down_4M queue tree add name=4M parent=Upload packet-mark=4M queue=PCQ_up_4M ip firewall mangle add chain=forward src-address-list=2M action=mark-connection new-connection-mark=2M passthrough=yes comment="Clients 2Mbits" disabled=no ip firewall mangle add chain=forward connection-mark=2M action=mark-packet new-packet-mark=2M passthrough=no disabled=no queue type add name="PCQ_down_2M" kind=pcq pcq-rate=2M pcq-classifier=dst-address queue type add name="PCQ_up_2M" kind=pcq pcq-rate=2M pcq-classifier=src-address queue tree add name=down_2M parent=Download packet-mark=2M queue=PCQ_down_2M queue tree add name=2M parent=Upload packet-mark=2M queue=PCQ_up_2M ip firewall mangle add chain=forward src-address-list=1M action=mark-connection new-connection-mark=1M passthrough=yes comment="Clients 1Mbits" disabled=no ip firewall mangle add chain=forward connection-mark=1M action=mark-packet new-packet-mark=1M passthrough=no disabled=no queue type add name="PCQ_down_1M" kind=pcq pcq-rate=1M pcq-classifier=dst-address queue type add name="PCQ_up_1M" kind=pcq pcq-rate=1M pcq-classifier=src-address queue tree add name=down_1M parent=Download packet-mark=1M queue=PCQ_down_1M queue tree add name=1M parent=Upload packet-mark=1M queue=PCQ_up_1M |
Потребителите ще ги описваме в адрес листата на firewall като само задаваме ip адреса и тарифата по този начин.
ip firewall address-list add list=40M address=10.19.1.2 ip firewall address-list add list=40M address=10.19.1.3 ip firewall address-list add list=20M address=10.19.1.4 ip firewall address-list add list=20M address=10.19.1.5 ip firewall address-list add list=10M address=10.19.1.6 ip firewall address-list add list=10M address=10.19.1.7 ip firewall address-list add list=4M address=10.19.1.8 ip firewall address-list add list=4M address=10.19.1.9 ip firewall address-list add list=2M address=10.19.1.0 ip firewall address-list add list=2M address=10.19.1.10 ip firewall address-list add list=1M address=10.19.1.11 ip firewall address-list add list=1M address=10.19.1.12 |
Общо взето това е всичко, някак си изглежда много сложно пред simple queue но уверявам ви не е. И след като видите с 30% по малко натоварената си машина определено ще разберете, че си е заслужавало труда. ping влезе в нормални стойности, “дропенето” тотално изчезна, двете ядра се товарят равномерно и видимо рутера се справя със ситуацията и ясно се вижда, че може още правила да поеме.
optimizing traffic control for isp mikrotik routeros 5 pcq