Understanding PCQ and Queue Tree

Hi guys!
I’m having some problems with a QoS setting I’m trying to accomplish and I need your help.
In my Lab I have two machines connected through a router. In the server laptop I have four iperf server instances, each one running in a different TCP port (1111, 2222, 3333 and 4444).
Loop at this gloriuos graph:

      
      Client -------------------- Router ---------------------- Server
      172.31.2.20/24          .1          .1                    172.31.1.10/24

From my client machine I’m connecting to those four servers simultaneously and I’m launching a transfer from the servers to the client in order to simulate a download transfer.
The string I’m launching from the client laptop is this:

iperf-3.0.11-win64>iperf3.exe -c 172.31.1.10 -p 1111 -R -t 600 -P 10

The mangle rules for QoS are this:

/ip firewall mangle
add action=mark-connection chain=prerouting dst-address=172.31.2.0/24 log-prefix=q1 new-connection-mark=QoS-1 passthrough=yes protocol=tcp src-address=172.31.1.10 src-port=1111
add action=mark-packet chain=prerouting connection-mark=QoS-1 in-interface=ether1 log-prefix=down new-packet-mark=QoS-1-down passthrough=no
add action=mark-packet chain=prerouting connection-mark=QoS-1 log-prefix=up new-packet-mark=QoS-1-up passthrough=no
add action=mark-connection chain=prerouting dst-address=172.31.2.0/24 new-connection-mark=QoS-2 passthrough=yes protocol=tcp src-address=172.31.1.10 src-port=2222
add action=mark-packet chain=prerouting connection-mark=QoS-2 in-interface=ether1 log-prefix=down new-packet-mark=QoS-2-down passthrough=no
add action=mark-packet chain=prerouting connection-mark=QoS-2 log-prefix=up new-packet-mark=QoS-2-up passthrough=no
add action=mark-connection chain=prerouting dst-address=172.31.2.0/24 new-connection-mark=QoS-3 passthrough=yes protocol=tcp src-address=172.31.1.10 src-port=3333
add action=mark-packet chain=prerouting connection-mark=QoS-3 in-interface=ether1 log-prefix=down new-packet-mark=QoS-3-down passthrough=no
add action=mark-packet chain=prerouting connection-mark=QoS-3 log-prefix=up new-packet-mark=QoS-3-up passthrough=no
add action=mark-connection chain=prerouting dst-address=172.31.2.0/24 log-prefix=qos4 new-connection-mark=QoS-4 passthrough=yes protocol=tcp src-address=172.31.1.10 src-port=4444
add action=mark-packet chain=prerouting connection-mark=QoS-4 in-interface=ether1 log-prefix=down new-packet-mark=QoS-4-down passthrough=no
add action=mark-packet chain=prerouting connection-mark=QoS-4 log-prefix=up new-packet-mark=QoS-4-up passthrough=no

I’ve tested all the rules with the log option and it matches what I suppose it need to be marked.

All I want to do is to have four QoS categories for a 4 Mbps MPLS link. I want the QoS-1 category to be prioritized above all the others. QoS-4 has to be the worst.
I also want that when there is no QoS-1 connections, all the other connections be able to use the 4 Mbps of the link. It’s my understanding that you achieve this with Limit-at and Priority in the Queue Tree section.

My problem is that I’m not seeing any prioritization. All the transfers I’m launching are setup with NO bandwidth limit. I think that I should have the greater Average Rate and the greater Bytes value in QoS-1, but it does not happend. Look at this:

Since the four servers are in the same IP address, I needed to create a new Queue Type to match against DST Ports as well.

/queue type
add kind=pcq name=pcq-download-custom pcq-classifier=dst-address,dst-port pcq-limit=5KiB pcq-total-limit=40KiB
add kind=pcq name=pcq-upload-custom pcq-classifier=src-address pcq-limit=10KiB pcq-total-limit=400KiB

I don’t know why it isn’t working. Please help me!
Thanks!