diff --git a/wlin003_GamingPC/system/tweaks/32GB-SYSTEM.nix b/wlin003_GamingPC/system/tweaks/32GB-SYSTEM.nix new file mode 100644 index 0000000..0b8d181 --- /dev/null +++ b/wlin003_GamingPC/system/tweaks/32GB-SYSTEM.nix @@ -0,0 +1,40 @@ +{ config, ... }: + +# Control how and when data is written from memory to disk, which can have an impact on system performance and responsiveness. +# useful for optimizing memory usage, disk writeback behavior, network settings, and other low-level kernel behaviors. + +{ + boot.kernelModules = ["tcp_bbr"]; + + boot.kernel.sysctl = { + "net.ipv4.tcp_congestion_control" = "bbr"; + "net.core.default_qdisc" = "fq"; + "net.ipv4.tcp_fastopen" = "3"; + + #--------------------------------------------------------------------- + # Network and memory-related optimizationss for 32GB + #--------------------------------------------------------------------- + "kernel.sysrq" = 1; # Enable SysRQ for rebooting the machine properly if it freezes. [Source](https://oglo.dev/tutorials/sysrq/index.html) + "net.core.netdev_max_backlog" = 30000; # Help prevent packet loss during high traffic periods. + "net.core.rmem_default" = 262144; # Default socket receive buffer size, improve network performance & applications that use sockets. Adjusted for 32GB RAM. + "net.core.rmem_max" = 67108864; # Maximum socket receive buffer size, determine the amount of data that can be buffered in memory for network operations. Adjusted for 32GB RAM. + "net.core.wmem_default" = 262144; # Default socket send buffer size, improve network performance & applications that use sockets. Adjusted for 32GB RAM. + "net.core.wmem_max" = 67108864; # Maximum socket send buffer size, determine the amount of data that can be buffered in memory for network operations. Adjusted for 32GB RAM. + "net.ipv4.ipfrag_high_threshold" = 5242880; # Reduce the chances of fragmentation. Adjusted for SSD. + "net.ipv4.tcp_keepalive_intvl" = 10; # TCP keepalive interval between probes to detect if a connection is still alive. + "net.ipv4.tcp_keepalive_probes" = 5; # TCP keepalive probes to detect if a connection is still alive. + "net.ipv4.tcp_keepalive_time" = 60; # TCP keepalive interval in seconds to detect if a connection is still alive. + "vm.dirty_background_bytes" = 134217728; # 128 MB + "vm.dirty_bytes" = 402653184; # 384 MB + "vm.min_free_kbytes" = 65536; # Minimum free memory for safety (in KB), helping prevent memory exhaustion situations. Adjusted for 32GB RAM. + "vm.swappiness" = 5; # Adjust how aggressively the kernel swaps data from RAM to disk. Lower values prioritize keeping data in RAM. Adjusted for 32GB RAM. + "vm.vfs_cache_pressure" = 90; # Adjust vfs_cache_pressure (0-1000) to manage memory used for caching filesystem objects. Adjusted for 32GB RAM. + + # Nobara Tweaks + "fs.aio-max-nr" = 1000000; # defines the maximum number of asynchronous I/O requests that can be in progress at a given time. 1048576 + "fs.inotify.max_user_watches" = 65536; # sets the maximum number of file system watches, enhancing file system monitoring capabilities. Default: 8192 TWEAKED: 524288 + "kernel.panic" = 5; # Reboot after 5 seconds on kernel panic Default: 0 + "kernel.pid_max" = 131072; # allows a large number of processes and threads to be managed Default: 32768 TWEAKED: 4194304 + + }; +} diff --git a/wlin003_GamingPC/system/tweaks/default.nix b/wlin003_GamingPC/system/tweaks/default.nix new file mode 100644 index 0000000..ec30f71 --- /dev/null +++ b/wlin003_GamingPC/system/tweaks/default.nix @@ -0,0 +1,11 @@ +{ config, pkgs, ... }: + +{ + imports = [ + #./4GB-SYSTEM.nix + #./8GB-SYSTEM.nix + #./16GB-SYSTEM.nix + ./32GB-SYSTEM.nix + ./ssd-tweaks.nix + ]; +} diff --git a/wlin003_GamingPC/system/tweaks/hdd-tweak.nix b/wlin003_GamingPC/system/tweaks/hdd-tweak.nix new file mode 100644 index 0000000..55dcaa3 --- /dev/null +++ b/wlin003_GamingPC/system/tweaks/hdd-tweak.nix @@ -0,0 +1,19 @@ +{ config, ... }: + +# Control how and when data is written from memory to disk, which can have an impact on system performance and responsiveness. +# useful for optimizing memory usage, disk writeback behavior, network settings, and other low-level kernel behaviors. + +{ + boot.kernel.sysctl = { + + #--------------------------------------------------------------------- + # HDD tweaks: Adjust settings for an HDD to optimize performance. + #--------------------------------------------------------------------- + "vm.dirty_background_ratio" = "10"; # Set the ratio of dirty memory at which background writeback starts (10% for HDD). + "vm.dirty_expire_centisecs" = "6000"; # Set the time at which dirty data is old enough to be eligible for writeout (6000 centiseconds for HDD). + "vm.dirty_ratio" = "20"; # Set the ratio of dirty memory at which a process is forced to write out dirty data (20% for HDD). + "vm.dirty_time" = "0"; # Disable dirty time accounting. + "vm.dirty_writeback_centisecs" = "1000"; # Set the interval between two consecutive background writeback passes (1000 centiseconds for HDD). + + }; +} diff --git a/wlin003_GamingPC/system/tweaks/ssd-tweaks.nix b/wlin003_GamingPC/system/tweaks/ssd-tweaks.nix new file mode 100644 index 0000000..e137590 --- /dev/null +++ b/wlin003_GamingPC/system/tweaks/ssd-tweaks.nix @@ -0,0 +1,18 @@ +{ config, ... }: + +{ + + boot.kernel.sysctl = { + #--------------------------------------------------------------------- + # SSD tweaks: Adjust settings for an SSD to optimize performance. + #--------------------------------------------------------------------- + "vm.dirty_background_ratio" = "40"; # Set the ratio of dirty memory at which background writeback starts (5%). Adjusted for SSD. + "vm.dirty_expire_centisecs" = "3000"; # Set the time at which dirty data is old enough to be eligible for writeout (6000 centiseconds). Adjusted for SSD. + "vm.dirty_ratio" = "80"; # Set the ratio of dirty memory at which a process is forced to write out dirty data (10%). Adjusted for SSD. + "vm.dirty_time" = "0"; # Disable dirty time accounting. + "vm.dirty_writeback_centisecs" = "300"; # Set the interval between two consecutive background writeback passes (500 centiseconds) + }; + + services.fstrim.enable = true; + +}