Ottima soluzione. Per alleggerire il carico sulla CPU, anche se credo non sia comunque eccessivo, puoi prima marchiare le connessioni e poi i pacchetti. Prima cioè usi l'azione mark-connection (lascia il passthrough abilitato altrimenti perdi il primo pacchetto) e poi marchi i pacchetti con l'azione mark-packet usando come matcher il connection-mark precedentemente creato.
Altrimenti puoi valutare la possibilità di implementare PCQ come algoritmo di accodamento.