I’ve been experimenting with Arch Linux on older hardware for quite a while, and these are the tweaks that have consistently given me the best balance between responsiveness, memory efficiency, and overall system usability.
Memory Management
Enable zram
The single biggest improvement for low-RAM systems.
ArchWiki suggests starting with a zram device equal to approximately 50% of physical RAM using the zstd compression algorithm. However, many Linux users running older hardware choose larger zram sizes, especially on systems with 1–4 GB RAM.
Common starting points used by Linux users:
| RAM | Common ZRAM Size |
|---|---|
| 1 GB | 1 GB |
| 2 GB | 2 GB |
| 4 GB | 2–4 GB |
| 8 GB | 4 GB |
| 16 GB | 8 GB |
| 32 GB | 8–16 GB |
Example:
[zram0]
zram-size = ram / 2
compression-algorithm = zstd
Compression Algorithm
The compression algorithm you choose can make a noticeable difference, especially on older hardware.
The two most common choices are zstd and lz4.
| Algorithm | Compression Speed | Compression Ratio | CPU Usage |
|---|---|---|---|
| lz4 | Very Fast | Lower | Very Low |
| zstd | Fast | Higher | Slightly Higher |
In general:
- zstd provides better compression ratios, allowing more data to remain in compressed RAM before the system needs to use disk-based swap.
- lz4 provides lower CPU overhead and extremely fast compression and decompression speeds.
For older systems with weak CPUs, I generally recommend:
compression-algorithm = lz4
Examples:
- Old Intel Atom
- Intel Pentium 4
- Intel Core Solo / Duo
- Early Core 2 Duo systems
- Older AMD Athlon systems
These processors often benefit more from lower CPU overhead than from the additional compression provided by zstd.
For newer systems, I generally recommend:
compression-algorithm = zstd
Examples:
- Intel Core i-series
- AMD Ryzen
- Modern Xeon systems
- Modern laptop CPUs
These processors usually have more than enough CPU performance to handle zstd efficiently while benefiting from its improved compression ratio.
Keep a swap file
Even with zram enabled, I still recommend having a disk-based swap file as a fallback.
These are community-tested values rather than official recommendations.
| RAM | Swap File |
|---|---|
| 1 GB | 2 GB |
| 2 GB | 2 GB |
| 4 GB | 2 GB |
| 8 GB | 2–4 GB |
| 16 GB | 4–6 GB |
| 32 GB+ | Optional |
A swap file is especially useful as an emergency buffer when RAM and zram become full.
vm.swappiness
A lot of users still use values like 10 or 20.
However, when zram is being used, higher values can be beneficial because compressed RAM swap is significantly faster than disk-based swap.
ArchWiki currently provides tuning examples that use a swappiness value of 180 for zram-based systems.
| Setup | Typical vm.swappiness |
|---|---|
| HDD + swapfile | 10-20 |
| SSD + swapfile | 20-60 |
| ZRAM enabled | 100-180 |
The Linux kernel default is 60.
For systems using zram, values above 100 are often beneficial because compressed RAM swap is significantly faster than disk-based swap. ArchWiki currently includes an example using vm.swappiness=180 for zram-based systems.
Example:
sudo sysctl vm.swappiness=180
Permanent:
echo "vm.swappiness=180" | sudo tee /etc/sysctl.d/99-swappiness.conf
vm.vfs_cache_pressure
Default:
100
Personally, I prefer:
50
Example:
echo "vm.vfs_cache_pressure=50" | sudo tee /etc/sysctl.d/99-cache-pressure.conf
This allows the kernel to retain filesystem cache longer and can improve responsiveness on slower storage devices.
Disable zswap when using zram
If zram is your primary memory optimization method, disabling zswap can avoid unnecessary overhead and simplify the memory path.
Check whether zswap is enabled:
cat /sys/module/zswap/parameters/enabled
Output:
Y
means zswap is enabled.
N
To disable zswap permanently, add the following kernel parameter:
zswap.enabled=0
For GRUB users:
Edit:
/etc/default/grub
Find:
GRUB_CMDLINE_LINUX_DEFAULT="..."
Add:
zswap.enabled=0
Example:
GRUB_CMDLINE_LINUX_DEFAULT="quiet zswap.enabled=0"
Regenerate the GRUB configuration:
sudo grub-mkconfig -o /boot/grub/grub.cfg
Then reboot the system.
After rebooting, verify:
cat /sys/module/zswap/parameters/enabled
Expected output:
N
Storage Optimization
HDD users: try mq-deadline
Check current scheduler:
cat /sys/block/sda/queue/scheduler
I usually prefer:
mq-deadline
on traditional spinning disks because it often provides smoother responsiveness.
HDD read-ahead tuning
Check current value:
blockdev --getra /dev/sda
Some HDD users may benefit from increasing read-ahead values.
Example:
sudo blockdev --setra 2048 /dev/sda
Results vary depending on workload and storage hardware.
Keep free disk space available
Older HDDs become noticeably slower when nearly full.
I try to keep at least 15–20% free space whenever possible.
SSD users
Enable periodic TRIM:
sudo systemctl enable --now fstrim.timer
Pacman Optimization
Enable parallel downloads.
Edit:
/etc/pacman.conf
Set:
ParallelDownloads = 5
For faster internet connections:
ParallelDownloads = 10
Also keep mirrors updated regularly.
Boot Optimization
Find slow services:
systemd-analyze blame
View total boot time:
systemd-analyze
Review enabled services:
systemctl list-unit-files --state=enabled
Common services that some users may not need:
- bluetooth.service
- cups.service
- ModemManager.service
- Desktop-environment-specific services you do not use
Only disable services that are genuinely unnecessary for your setup.
Desktop Environment Choices
For older hardware, desktop choice matters more than many kernel tweaks.
Good options:
- LXQt
- XFCE
- MATE
- IceWM
- Openbox
In my experience, XFCE provides the best balance between features and resource usage.
Browser Optimization
Modern browsers are often the biggest performance bottleneck on older hardware.
Whether you use Firefox, Brave, Chromium, or another browser, these practices usually help:
- Use an ad blocker (uBlock Origin is highly recommended where available)
- Limit unnecessary extensions
- Avoid dozens of open tabs
- Use one browser instead of multiple simultaneously
- Verify that hardware acceleration is working
- Disable background applications you do not need
Many performance issues blamed on Linux are actually browser-related rather than operating-system-related.
Monitoring Tools
Useful commands:
htop
btop
free -h
iotop
journalctl -p 3 -xb
journalctl -xe
These tools make troubleshooting significantly easier.
My Preferred Configuration for a Old CPU, 2 GB RAM, and HDD System
RAM: 2 GB
ZRAM: 2 GB
Compression: lz4
Swapfile: 2 GB
vm.swappiness: 180
vm.vfs_cache_pressure: 50
Scheduler: mq-deadline
Desktop: XFCE
ParallelDownloads: 5
TRIM: N/A (HDD)
This setup has provided the best balance between responsiveness and memory efficiency for me on older hardware.
What tweaks have made the biggest difference on your older Arch Linux systems?
