The distinction between per-packet CPU cost and queueing delay is important because optimizing one can leave the actual bottleneck untouched. I’d add one more dimension to the benchmarking: measure tail latency under load, not just average RTT or peak throughput. For example, an XDP rule might reduce processing overhead while a saturated uplink still creates bufferbloat. Similarly, kernel bypass can improve packet handling but introduce operational blind spots when standard observability tools no longer see the traffic. The best design is usually the least complex option that meets the latency target with enough visibility to debug it in production.