Also the PCC matcher is just that, you can use it as many times as you want in different locations, regardless if you are using it to mark connections. If you don't mind me asking, why are you using PCC with connection marks to mark packets for QoS? Unless I'm reading your post wrong.
Because this seems moreefficient. I have a significant number of connection marking rules (25 or so), some based on address lists (traffic to specific hosts is high priority). This way, the per packet analysis only has to go through a number of siple rules to analyse the connection mark.
/ip firewall mangle
/ first the packet marks based on the connection marks
add action=mark-packet chain=postrouting comment="con inf -> packet inf" \
connection-mark=inf disabled=no new-packet-mark=inf passthrough=no
add action=mark-packet chain=postrouting comment="con tmd -> packet tmd" \
connection-mark=tmd disabled=no new-packet-mark=tmd passthrough=no
add action=mark-packet chain=postrouting comment="con int -> packet int" \
connection-mark=int disabled=no new-packet-mark=int passthrough=no
add action=mark-packet chain=postrouting comment="con req -> packet req" \
connection-mark=req disabled=no new-packet-mark=req passthrough=no
add action=mark-packet chain=postrouting comment="con slo -> packet slo" \
connection-mark=slo disabled=no new-packet-mark=slo passthrough=no
add action=mark-packet chain=postrouting comment="con unm -> packet unm" \
connection-mark=unm disabled=no new-packet-mark=unm passthrough=no
add action=return chain=postrouting comment=\
"con no-mark -> no action (count traffic)" connection-mark=no-mark \
disabled=no
// Split traffic to company office to two pptp links
add action=mark-routing chain=prerouting comment="split: fabric-00-01.1 n:1/2" \
disabled=no dst-address=172.20.0.0/16 new-routing-mark=fabric-00-01.1 nth=\
2,1 passthrough=yes
add action=mark-routing chain=prerouting comment="split: fabric-00-01.2 n:2/2" \
disabled=no dst-address=172.20.0.0/16 new-routing-mark=fabric-00-01.2 nth=\
2,2 passthrough=yes
// From here on we mark connections.
// If already marked, we are finished. This is triggered for most packets.
add action=return chain=prerouting comment=\
"con marked -> return (we do not recheck for mark)" connection-mark=\
!no-mark disabled=no
// Now we go and find the first match.
add action=mark-connection chain=prerouting comment="inf: bgp" disabled=no \
new-connection-mark=inf passthrough=no port=179 protocol=tcp
add action=mark-connection chain=prerouting comment="inf: icmp" disabled=no \
new-connection-mark=inf passthrough=no protocol=icmp
add action=mark-connection chain=prerouting comment="inf: dns" disabled=no \
new-connection-mark=inf passthrough=no port=53 protocol=tcp
add action=mark-connection chain=prerouting comment="inf: dns" disabled=no \
new-connection-mark=inf passthrough=no port=53 protocol=udp
add action=mark-connection chain=prerouting comment="inf: ntp" disabled=no \
new-connection-mark=inf passthrough=no port=123 protocol=udp
add action=mark-connection chain=prerouting comment="inf: ldp (hello)" \
disabled=no new-connection-mark=inf passthrough=no port=646 protocol=tcp
add action=mark-connection chain=prerouting comment="inf: ldp" disabled=no \
new-connection-mark=inf passthrough=no port=646 protocol=udp
add action=mark-connection chain=prerouting comment="tmd: gre" disabled=no \
new-connection-mark=tmd passthrough=no protocol=gre
add action=mark-connection chain=prerouting comment="tmd: pptp" disabled=no \
new-connection-mark=tmd passthrough=no port=1723 protocol=tcp
add action=mark-connection chain=prerouting comment="tmd: sip" disabled=no \
new-connection-mark=tmd passthrough=no port=5060-5061 protocol=udp
add action=mark-connection chain=prerouting comment=\
"tmd: traffic from the traffic-timed server list" disabled=no \
new-connection-mark=tmd passthrough=no src-address-list=traffic-timed
add action=mark-connection chain=prerouting comment=\
"tmd: traffic to the traffic-timed server list" disabled=no \
dst-address-list=traffic-timed new-connection-mark=tmd passthrough=no
add action=mark-connection chain=prerouting comment="int: rdp" disabled=no \
new-connection-mark=int passthrough=no port=3389 protocol=tcp
add action=mark-connection chain=prerouting comment="req: http" disabled=no \
new-connection-mark=req passthrough=no port=80,8080 protocol=tcp
add action=mark-connection chain=prerouting comment="req: https" disabled=no \
new-connection-mark=req passthrough=no port=443 protocol=tcp
add action=mark-connection chain=prerouting comment="slo: smb" disabled=no \
new-connection-mark=slo passthrough=no port=137-139,445 protocol=tcp
add action=mark-connection chain=prerouting comment="slo: dfs-r" disabled=no \
new-connection-mark=slo passthrough=no port=5722 protocol=tcp
add action=mark-connection chain=prerouting comment="inf: winbox" disabled=no \
new-connection-mark=inf passthrough=no port=8291 protocol=tcp
// Finally: we mark as unm
add action=mark-connection chain=prerouting comment="unm: rest" disabled=no \
new-connection-mark=unm passthrough=no