# {{ ansible_managed }} # Fedora's /usr/lib/udev/rules.d/60-block-scheduler.rules picks bfq for every # rotational=0 SATA disk. bfq is a fairness scheduler built for spinning disks # and desktop interactivity: it costs real CPU per request and, with 26 # containers plus two CI runners all writing at once, it lets reads queue # behind write bursts. That is the shape of the stalls seen here -- I/O # pressure spiking to 76% while the CPU sat nearly idle. # # mq-deadline instead of none: this is a SATA SSD with a 32-deep NCBQ queue, # not an NVMe device with its own deep queues, so the request merging and the # read-expiry deadline are both worth having. The deadline is what stops reads # starving behind a QLC write burst. # # bfq also hard-caps nr_requests at 64; mq-deadline allows a deeper queue, # which is what lets concurrent container and CI I/O actually overlap. ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="0", \ ATTR{queue/scheduler}="{{ ssd_io_scheduler }}", \ ATTR{queue/nr_requests}="{{ ssd_nr_requests }}"