  Programmable packet scheduling allows the deployment of scheduling algorithms
into existing switches without need for hardware redesign. Scheduling
algorithms are programmed by tagging packets with ranks, indicating their
desired priority. Programmable schedulers then execute these algorithms by
serving packets in the order described in their ranks.
  The ideal programmable scheduler is a Push-In First-Out (PIFO) queue, which
achieves perfect packet sorting by pushing packets into arbitrary positions in
the queue, while only draining packets from the head. Unfortunately,
implementing PIFO queues in hardware is challenging due to the need to
arbitrarily sort packets at line rate based on their ranks.
  In the last years, various techniques have been proposed, approximating PIFO
behaviors using the available resources of existing data planes. While
promising, approaches to date only approximate one of the characteristic
behaviors of PIFO queues (i.e., its scheduling behavior, or its admission
control).
  We propose PACKS, the first programmable scheduler that fully approximates
PIFO queues on all their behaviors. PACKS does so by smartly using a set of
strict-priority queues. It uses packet-rank information and queue-occupancy
levels at enqueue to decide: whether to admit packets to the scheduler, and how
to map admitted packets to the different queues.
  We fully implement PACKS in P4 and evaluate it on real workloads. We show
that PACKS: better-approximates PIFO than state-of-the-art approaches and
scales. We also show that PACKS runs at line rate on existing hardware (Intel
Tofino).
