Last week we saw an abnormal pppoe session drops on one of our PPPoE server, a CCR1036. Session count is ~1300 with 500 Mbps traffic.
After a short search, CPU load was at 100 %
daily.gif
and process affected is queuing
435806502_69408.jpg
@Normis
So, doubtlessly, it’s not a case of “IDLE process is eating all my CPUs!1!!” ![]()
The setup is, from a standpoint of the script configuration, simple: for every profile we sell, two firewall mangle rule to mark packets (D/U) from an address list, two queue-type PCQ and two queue tree, with two different parent
/ ip firewall mangle
add chain=forward dst-address-list=$profile action=mark-packet new-packet-mark=($profile."_download") passthrough=no
add chain=forward src-address-list=$profile action=mark-packet new-packet-mark=($profile."_upload") passthrough=no
/ queue type
add name=($profile."_download") kind=pcq pcq-classifier=dst-address pcq-rate=$"download-pcq-rate" pcq-limit=$"limit-pcq" pcq-total-limit=$"limit-total-pcq" pcq-burst-rate=$"download-burst-rate" pcq-burst-threshold=$"download-burst-threshold" pcq-burst-time=$"download-burst-time" pcq-dst-address6-mask=64
add name=($profile."_upload") kind=pcq pcq-classifier=src-address pcq-rate=$"upload-pcq-rate" pcq-limit=$"limit-pcq" pcq-total-limit=$"limit-total-pcq" pcq-dst-address6-mask=64
/ queue tree
add name=($profile."_download") packet-mark=($profile."_download") queue=($profile."_download") parent=Download priority=$prior disabled=no max-limit=$"limit-parent"
add name=($profile."_upload") packet-mark=($profile."_upload") queue=($profile."_upload") parent=Upload priority=$prior disabled=no max-limit=$"limit-parent"
Why using queue tree? Because the main benefit over Simple Queue (at least, for me) is the possibility to change effective profile of every user at midnight or on holiday just with scripts in /system scheduler.
Yes, CoA exists, but is really needed reimplement the wheel so often? ![]()
Searching in the forum, macgaiver says queue tree aren’t very CCR-friendly (because they are multicore) http://forum.mikrotik.com/t/ccr-queue-tree-processor-usage-100/94181/1
I don’t dispute this, but I don’t understand why there are so many queuing processes so cpu hungry (maybe something like IO wait, in which the high load is fictious?).
His suggestion is to have more HTB tree and avoid global as parent http://forum.mikrotik.com/t/ccr-100-on-all-cores-queue-tree-pcq/93835/1
Well, ok
- Tipically there are at least two queue, one for upload and one for download. So, are needed other parents?
And if there is the need to give higher priority, to some type of customer and lower to other, how to do? Because priority works only on leaf queues, but, if all queues are parent, it doesn’t, if I’m not wrong. - So, to avoid blog the upstream link, we should set max-limit to every queue so their sum doesn’t exceed the uplink, but wasting bandwidth if some queue doesn’t have traffic?
- Putting an interface as parent is ok for upload traffic (one WAN link), but if PPPoE sessions come from VPLSs, with MPLS configured on a VLAN interface, what could be the parent interface?
- Why global parent is bad?
- Using Simple Queue with a Parent (which represents the WAN link and preserve the priority) is different from a unique Queue Tree Parent?
So, at the end, the only solution available for CCR are Simple Queue, without any parent queue, but for a setup with Queue Tree+parent, is better x86? Am I missing something?