105 lines
2.4 KiB
Nix
105 lines
2.4 KiB
Nix
{
|
|
config,
|
|
lib,
|
|
service_configs,
|
|
pkgs,
|
|
...
|
|
}:
|
|
let
|
|
# Total RAM in bytes (from /proc/meminfo: 65775836 KiB).
|
|
totalRamBytes = 65775836 * 1024;
|
|
|
|
# Hugepage reservations that the kernel carves out before ZFS can use them.
|
|
hugepages2mBytes = service_configs.hugepages_2m.total_pages * 2 * 1024 * 1024;
|
|
hugepages1gBytes = 3 * 1024 * 1024 * 1024; # 3x 1G pages for RandomX (xmrig.nix)
|
|
totalHugepageBytes = hugepages2mBytes + hugepages1gBytes;
|
|
|
|
# ARC max: 60% of RAM remaining after hugepages. Leaves headroom for
|
|
# application RSS (PostgreSQL, qBittorrent, Jellyfin, Grafana, etc.),
|
|
# kernel slabs, and page cache.
|
|
arcMaxBytes = (totalRamBytes - totalHugepageBytes) * 60 / 100;
|
|
in
|
|
{
|
|
boot.zfs.package = pkgs.zfs_2_4;
|
|
boot.initrd.kernelModules = [ "zfs" ];
|
|
|
|
boot.kernelParams = [
|
|
"zfs.zfs_txg_timeout=30"
|
|
"zfs.zfs_arc_max=${toString arcMaxBytes}"
|
|
];
|
|
|
|
boot.supportedFilesystems = [ "zfs" ];
|
|
boot.zfs.extraPools = [
|
|
service_configs.zpool_ssds
|
|
service_configs.zpool_hdds
|
|
];
|
|
|
|
services.sanoid = {
|
|
enable = true;
|
|
datasets."${service_configs.zpool_ssds}" = {
|
|
recursive = true;
|
|
autoprune = true;
|
|
autosnap = true;
|
|
hourly = 5;
|
|
daily = 7;
|
|
monthly = 3;
|
|
yearly = 0;
|
|
};
|
|
|
|
datasets."${service_configs.zpool_ssds}/services/sql" = {
|
|
recursive = true;
|
|
autoprune = true;
|
|
autosnap = true;
|
|
hourly = 12;
|
|
daily = 2;
|
|
monthly = 0;
|
|
yearly = 0;
|
|
};
|
|
|
|
datasets."${service_configs.zpool_ssds}/services/jellyfin/cache" = {
|
|
recursive = true;
|
|
autoprune = true;
|
|
autosnap = true;
|
|
hourly = 0;
|
|
daily = 0;
|
|
monthly = 0;
|
|
yearly = 0;
|
|
};
|
|
|
|
datasets."${service_configs.zpool_ssds}/services/monero" = {
|
|
recursive = true;
|
|
autoprune = true;
|
|
autosnap = true;
|
|
hourly = 0;
|
|
daily = 0;
|
|
monthly = 0;
|
|
yearly = 0;
|
|
};
|
|
|
|
datasets."${service_configs.zpool_ssds}/services/p2pool" = {
|
|
recursive = true;
|
|
autoprune = true;
|
|
autosnap = true;
|
|
hourly = 0;
|
|
daily = 0;
|
|
monthly = 0;
|
|
yearly = 0;
|
|
};
|
|
|
|
datasets."${service_configs.zpool_hdds}" = {
|
|
recursive = true;
|
|
autoprune = true;
|
|
autosnap = true;
|
|
hourly = 0;
|
|
daily = 0;
|
|
monthly = 0;
|
|
yearly = 0;
|
|
};
|
|
};
|
|
|
|
services.zfs = {
|
|
autoScrub.enable = true;
|
|
trim.enable = true;
|
|
};
|
|
}
|