36 lines
1.5 KiB
Nix
36 lines
1.5 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
pkgs,
|
|
service_configs,
|
|
...
|
|
}:
|
|
{
|
|
boot.initrd.availableKernelModules = [
|
|
"xhci_pci"
|
|
"ahci"
|
|
"usb_storage"
|
|
"usbhid"
|
|
"sd_mod"
|
|
];
|
|
boot.initrd.kernelModules = [ "dm-snapshot" ];
|
|
boot.kernelModules = [ "kvm-amd" ];
|
|
boot.extraModulePackages = [ ];
|
|
|
|
swapDevices = [ ];
|
|
|
|
hardware.cpu.amd.updateMicrocode = true;
|
|
hardware.enableRedistributableFirmware = true;
|
|
|
|
# HDD I/O tuning for torrent seeding workload (high-concurrency random reads).
|
|
# mq-deadline sorts requests into elevator sweeps, reducing seek distance.
|
|
# Aggressive deadlines (15s) let the scheduler accumulate more ops before dispatching,
|
|
# maximizing coalescence — latency is irrelevant since torrent peers tolerate 30-60s.
|
|
# fifo_batch=128 keeps sweeps long; writes_starved=16 heavily favors reads.
|
|
# 4 MiB readahead matches libtorrent piece extent affinity for sequential prefetch.
|
|
services.udev.extraRules = ''
|
|
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ATTR{queue/scheduler}="mq-deadline", ATTR{queue/read_ahead_kb}="4096", ATTR{queue/nr_requests}="512"
|
|
ACTION=="add|change", KERNEL=="sd[a-z]", ATTR{queue/rotational}=="1", ENV{ID_ATA_ROTATION_RATE_RPM}!="0", RUN+="${pkgs.bash}/bin/bash -c 'echo 15000 > /sys$devpath/queue/iosched/read_expire; echo 15000 > /sys$devpath/queue/iosched/write_expire; echo 128 > /sys$devpath/queue/iosched/fifo_batch; echo 16 > /sys$devpath/queue/iosched/writes_starved; echo 4096 > /sys$devpath/queue/max_sectors_kb 2>/dev/null || true'"
|
|
'';
|
|
}
|