We have been using the Intel X520 series for a couple of years now, and have seen an evolution in the way PFC is handled by the driver and Linux. But with our cards, we are unable to get this working in RHEL 6.4/6.5.
We want to give traffic to different destination IP's different PCP values(from the same application). The oldest implementation we used was based on a multiq qdisc and then steer traffic to different queues with tc filters action skbedit queue_mapping. This only worked in the beginning(2.6.18 kernels), later we had to adjust the 'action queue_mapping' to 'action skbedit'. We still enable PFC(DCB) using DCBtool like we alyways did.
A big difference that I see is the number of enabled queues. First, only 8 queues were activated, but in RHEL 6.4/6.5 71 queues are activated. In some configurations, the switch even sends PFC pause frames, but these are not honored by the card resulting in packet loss.
I have also installed RHEL7, which has the same issues with multiq. But on RHEL 7, I can enable the mqprio qdisc(which exists in RHEL 6.5, but I can't enable it with hardware support so it's useless). Then with mqprio, the tc filtering doesn't work anymore, and the only option I currently have is to set the SO_PRIORITY of the socket in the application(which is not really an option). When this is set, PFC starts to work again and I don't have packet-loss.
Is there any way to have this working again in RHEL 6.4/6.5/(6.6) and configurable in RHEL 7?