zram: swap comprimida en RAM por delante de la del disco

zramen con zstd, hasta la mitad de la RAM (máximo 8 GB) y la prioridad
más alta; la swap del NVMe queda de reserva. swappiness 180 y
page-cluster 0, lo normal con zram.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C5v1qWDwgkaVM5kjVHGGh8
This commit is contained in:
Alejandro Guerrero 2026-09-28 16:25:39 +02:00
parent 0e90f6029e
commit bea3bdbb62
Signed by: alejandrogs73
GPG key ID: 1CFF10953BEE333C
5 changed files with 35 additions and 17 deletions

View file

@ -55,14 +55,14 @@ for example) and repeated safely:
6. `sistema` (system): copies `sistema/` into `/`, sets up 6. `sistema` (system): copies `sistema/` into `/`, sets up
`wpa_supplicant.conf` so wheel users can use `wpa_cli` without root and `wpa_supplicant.conf` so wheel users can use `wpa_cli` without root and
save networks, enables the runit services (dbus, turnstiled, save networks, enables the runit services (dbus, turnstiled,
wpa_supplicant, dhcpcd, bluetoothd, acpid, openntpd, tlp, automontaje, wpa_supplicant, dhcpcd, bluetoothd, acpid, openntpd, tlp, zramen,
cupsd), removes NetworkManager, elogind, chronyd, avahi-daemon (the printer automontaje, cupsd), removes NetworkManager, elogind, chronyd, avahi-daemon
has a fixed IP), sshd (nobody SSHes into the laptop), nix-daemon and (the printer has a fixed IP), sshd (nobody SSHes into the laptop),
polkitd (if something asks for polkit, like libvirt, D-Bus starts it on its nix-daemon and polkitd (if something asks for polkit, like libvirt, D-Bus
own) and adds the user to the audio, video, input, network, bluetooth, starts it on its own) and adds the user to the audio, video, input,
lpadmin (printer management) and `_pipewire` (realtime priority for audio network, bluetooth, lpadmin (printer management) and `_pipewire` (realtime
without rtkit) groups. `doas.conf` is checked with `doas -C` before it is priority for audio without rtkit) groups. `doas.conf` is checked with `doas
installed with mode 400. -C` before it is installed with mode 400.
7. `quitar` (remove): uninstalls what the repo no longer uses because 7. `quitar` (remove): uninstalls what the repo no longer uses because
something else replaces it: sudo (doas), feh (xwallpaper and nsxiv), something else replaces it: sudo (doas), feh (xwallpaper and nsxiv),
gammastep (sct), autorandr (`pantallas`), blueman and pavucontrol (the gammastep (sct), autorandr (`pantallas`), blueman and pavucontrol (the
@ -190,6 +190,9 @@ preserveonrestart patches).
(the laptop one on the left and as primary) at startup and whenever one is (the laptop one on the left and as primary) at startup and whenever one is
plugged or unplugged (udev rule in `sistema/`), then repaints the plugged or unplugged (udev rule in `sistema/`), then repaints the
wallpaper with `xwallpaper`. wallpaper with `xwallpaper`.
- Memory: compressed swap in RAM with zram (`zramen` service, up to half the
RAM, with zstd) ahead of the disk swap, which stays as a fallback
(`sistema/etc/sv/zramen/conf` and `sistema/etc/sysctl.d/99-zram.conf`).
- Audio: `.xinitrc` runs pipewire, wireplumber and pipewire-pulse in a loop, - Audio: `.xinitrc` runs pipewire, wireplumber and pipewire-pulse in a loop,
so if one of them dies it comes back a second later (without wireplumber so if one of them dies it comes back a second later (without wireplumber
everything goes to "Dummy Output"). everything goes to "Dummy Output").

View file

@ -52,13 +52,13 @@ Hace siete pasos, que también se pueden lanzar por separado
6. `sistema`: copia `sistema/` en `/`, prepara `wpa_supplicant.conf` para que 6. `sistema`: copia `sistema/` en `/`, prepara `wpa_supplicant.conf` para que
los de wheel usen `wpa_cli` sin root y guarden redes, activa los servicios los de wheel usen `wpa_cli` sin root y guarden redes, activa los servicios
de runit (dbus, turnstiled, wpa_supplicant, dhcpcd, bluetoothd, acpid, de runit (dbus, turnstiled, wpa_supplicant, dhcpcd, bluetoothd, acpid,
openntpd, tlp, automontaje, cupsd), quita NetworkManager, elogind, chronyd, openntpd, tlp, zramen, automontaje, cupsd), quita NetworkManager, elogind,
avahi-daemon (la impresora va por IP fija), sshd (al portátil no se entra chronyd, avahi-daemon (la impresora va por IP fija), sshd (al portátil no
por SSH), nix-daemon y polkitd (si algo pide polkit, como libvirt, D-Bus lo se entra por SSH), nix-daemon y polkitd (si algo pide polkit, como libvirt,
arranca solo) y añade el usuario a los grupos audio, video, input, network, D-Bus lo arranca solo) y añade el usuario a los grupos audio, video, input,
bluetooth, lpadmin (para gestionar impresoras) y `_pipewire` (prioridad de network, bluetooth, lpadmin (para gestionar impresoras) y `_pipewire`
tiempo real para el audio sin rtkit). `doas.conf` se valida con `doas -C` (prioridad de tiempo real para el audio sin rtkit). `doas.conf` se valida
antes de instalarlo con modo 400. con `doas -C` antes de instalarlo con modo 400.
7. `quitar`: desinstala lo que el repo ya no usa porque lo sustituye otra 7. `quitar`: desinstala lo que el repo ya no usa porque lo sustituye otra
cosa: sudo (doas), feh (xwallpaper y nsxiv), gammastep (sct), autorandr cosa: sudo (doas), feh (xwallpaper y nsxiv), gammastep (sct), autorandr
(`pantallas`), blueman y pavucontrol (scripts `bluetooth` y `volumen`), (`pantallas`), blueman y pavucontrol (scripts `bluetooth` y `volumen`),
@ -188,6 +188,9 @@ ventanas (parches restartsig y preserveonrestart).
`xrandr` (la del portátil a la izquierda y como principal) al arrancar y `xrandr` (la del portátil a la izquierda y como principal) al arrancar y
cada vez que se conecta o desconecta una (regla de udev en `sistema/`), y cada vez que se conecta o desconecta una (regla de udev en `sistema/`), y
vuelve a pintar el fondo con `xwallpaper`. vuelve a pintar el fondo con `xwallpaper`.
- Memoria: swap comprimida en RAM con zram (servicio `zramen`, hasta la mitad
de la RAM, con zstd) por delante de la del disco, que queda de reserva
(`sistema/etc/sv/zramen/conf` y `sistema/etc/sysctl.d/99-zram.conf`).
- Audio: `.xinitrc` lanza pipewire, wireplumber y pipewire-pulse en un bucle, - Audio: `.xinitrc` lanza pipewire, wireplumber y pipewire-pulse en un bucle,
así que si alguno se cae vuelve solo al segundo (sin wireplumber todo sale así que si alguno se cae vuelve solo al segundo (sin wireplumber todo sale
por "Dummy Output"). por "Dummy Output").

View file

@ -20,7 +20,7 @@ PAQUETES="
xorg xinit setxkbmap xrandr dbus turnstile xorg xinit setxkbmap xrandr dbus turnstile
picom dunst libnotify xwallpaper nsxiv maim xclip sct xssstate picom dunst libnotify xwallpaper nsxiv maim xclip sct xssstate
pipewire wireplumber libspa-bluetooth alsa-pipewire pipewire wireplumber libspa-bluetooth alsa-pipewire
wpa_supplicant dhcpcd bluez acpid openntpd tlp wpa_supplicant dhcpcd bluez acpid openntpd tlp zramen
cups cups-filters hplip cups cups-filters hplip
font-firacode nerd-fonts-symbols-ttf papirus-icon-theme papirus-folders font-firacode nerd-fonts-symbols-ttf papirus-icon-theme papirus-folders
sassc gnome-themes-extra qt5ct sassc gnome-themes-extra qt5ct
@ -34,7 +34,7 @@ SUCKLESS="dwm st dmenu slstatus slock scroll clipmenu"
# Tema GTK Everforest, en una versión fija para que siempre salga igual # Tema GTK Everforest, en una versión fija para que siempre salga igual
GTK_TEMA_REPO=https://github.com/Fausto-Korpsvart/Everforest-GTK-Theme GTK_TEMA_REPO=https://github.com/Fausto-Korpsvart/Everforest-GTK-Theme
GTK_TEMA_COMMIT=9b8be4d6648ae9eaae3dd550105081f8c9054825 GTK_TEMA_COMMIT=9b8be4d6648ae9eaae3dd550105081f8c9054825
SERVICIOS="dbus turnstiled wpa_supplicant dhcpcd bluetoothd acpid openntpd tlp automontaje cupsd" SERVICIOS="dbus turnstiled wpa_supplicant dhcpcd bluetoothd acpid openntpd tlp zramen automontaje cupsd"
# La red la llevan wpa_supplicant y dhcpcd. polkitd no hace falta como # La red la llevan wpa_supplicant y dhcpcd. polkitd no hace falta como
# servicio: si algo lo pide (libvirt), D-Bus lo arranca. turnstiled sustituye # servicio: si algo lo pide (libvirt), D-Bus lo arranca. turnstiled sustituye
# a elogind y openntpd a chronyd. avahi-daemon (mDNS) no hace falta: la # a elogind y openntpd a chronyd. avahi-daemon (mDNS) no hace falta: la

View file

@ -0,0 +1,7 @@
# Swap comprimida en RAM (zram), antes que la del disco. Con 11 GB de RAM se
# llega a usar la swap del NVMe; en zram cabe más y va mucho más rápido.
# Hasta la mitad de la RAM (máximo 8 GB) y zstd, que comprime más que lz4. La
# prioridad por defecto (32767) la pone por delante de la swap del disco.
export ZRAM_COMP_ALGORITHM=zstd
export ZRAM_SIZE=50
export ZRAM_MAX_SIZE=8192

View file

@ -0,0 +1,5 @@
# Con zram (sistema/etc/sv/zramen) sale más a cuenta mandar páginas a la swap
# comprimida que soltar la caché de disco, y no hace falta leerlas de 8 en 8
# como en un disco.
vm.swappiness = 180
vm.page-cluster = 0