Systemd-swap: Lo sentimos, las prioridades de intercambio menores que -1 solo pueden ser asignadas por el propio kernel

Creado en 14 jun. 2020  ·  31Comentarios  ·  Fuente: Nefelim4ag/systemd-swap

Parece ser causado por 52a468aeea9e00f3f1763e96a05adbe48b0a644d pero no me dividí en dos. ¿Podría ser causado por cambios de seguridad recientes?

/run/systemd/system/var-lib-systemd\x2dswap-swapfc-1.swap:11: Sorry, swap priorities smaller than -1 may only be assigned by the kernel itself, ignoring: -2

Comentario más útil

Ahhh, no importa. Puedo reproducir esto, simplemente no está registrado por systemd-swap sino por systemd

Todos 31 comentarios

¿Puedes decir tu versión de Linux (si es arch, ya sea zen o normal), distribución y sistema de archivos?

(esto no me pasa ejecutando arch zen 5.7 y f2fs)

ArchLinux 5.7.2 con modificaciones zen y ext4.

¿Se creó el archivo de intercambio? (es decir, ¿es solo una advertencia?)

Reinicié: / ¿Hay alguna manera de llenar rápidamente la RAM a un porcentaje específico para activar el intercambio?

Puede usar stress-ng stress-ng --vm-bytes $(awk '/MemAvailable/{printf "%d\n", $2 * 0.90;}' < /proc/meminfo)k --vm-keep -m 1 (asigna hasta el 90% de la memoria).

Otra forma de solucionar este problema es establecer swapfc_priority=100 o algo en /etc/systemd/swap.conf.d/overrides.conf

Ok sí, todavía se puede reproducir.
El archivo de intercambio aún se crea.
Aunque supongo que puedo solucionarlo asignando> -1, ¿esta advertencia es normal? Si es el caso, entonces no tiene sentido usar este valor predeterminado y en su lugar usar 0, supongo.

Algo extraño que noto mientras pruebo con stress-ng es que cuando uso * 0.50 el fragmento de intercambio de 1GB que configuré se crea, pero cuando lo cambio a * 0.90 no se agrega más intercambio a pesar de tener 700 MB de memoria libre.

mi configuración:

swapfc_enabled=1
swapfc_force_use_loop=0          # Force usage of swapfile + loop
swapfc_frequency=1               # How often to check free swap space in seconds
swapfc_chunk_size=1G           # Size of swap chunk
swapfc_max_count=32              # Note: 32 is a kernel maximum
swapfc_min_count=0               # Minimum amount of chunks to preallocate
swapfc_free_swap_perc=25         # Add new chunk if free < 15%
swapfc_remove_free_swap_perc=55  # Remove chunk if free > 55% && chunk count > 2

zswap_enabled=1
zswap_compressor=zstd     # lzo lz4 zstd lzo-rle lz4hc
zswap_max_pool_percent=25 # 1-99
zswap_zpool=z3fold        # zbud z3fold (note z3fold requires kernel 4.8+)

El segundo archivo de intercambio solo se crea cuando el primero se está quedando sin memoria

Ah, vale. ¿Y por qué no se cambia entonces? Solo veo 32 MB usados.

Tendrá que preguntarle a Linus Torvalds sobre ese ^^, en resumen, el intercambio solo se usa cuando se solicita más memoria, por lo que si ninguna aplicación solicita más memoria, no verá que se esté usando el intercambio.
Puede ajustar los parámetros de intercambio usted mismo (swappiness, etcétera), pero tenga en cuenta que los valores predeterminados de systemd-swap están ajustados a la configuración predeterminada.

Ah, veo gracias por la linda explicación: +1:
¿Qué hacemos con el 'problema' inicial?

Veré cómo reproducirlo yo mismo en una máquina virtual y si podemos silenciar la advertencia (usando 2>/dev/null en nuestro comando swapon). Dado que esto solo produce una advertencia, no lo pondré en cola para una nueva versión de inmediato, pero lo incluiré con otras correcciones / actualizaciones.

Entonces, ¿la advertencia es incorrecta y podemos crear un intercambio con -2?

Hice cat /proc/swaps y parece decir que de hecho tiene una prioridad -2:

Filename                Type        Size    Used    Priority
/var/lib/systemd-swap/swapfc/1          file        1048572 33024   -2

Entonces, ¿tal vez sea un error ascendente y deba informarse?

Ehh, el kernel dice que solo puede crear prioridades inferiores a -1 y eso parece ser cierto (según la documentación que he leído), es más un error con f2fs o algo que hace que no pueda mira esa advertencia ...
El razonamiento para systemd-swap por defecto a -2 es que esa es la forma en que siempre se ha configurado y no deseo romper las configuraciones de las personas.

Muy bien, ya veo, gracias. Dejaré que esto se abra hasta que puedas reproducirlo y silenciarlo, supongo.

No se puede reproducir en fedora y arch. ¿Puede proporcionar información adicional?

Todavía puede reproducirse con sus últimas confirmaciones.
¿Qué otro tipo de información necesita?

No lo sé, pero realmente no puedo diagnosticar sin poder reproducirme. Y dado que esto solo lo informa usted, tengo la sensación de que podría haber algo de su parte causando esto.

  • Mi ruta swapfc es /var/lib/systemd-swap/swapfc/
  • Opciones de montaje de la unidad: rw,noatime,lazytime
  • Systemd 245.6

Mi configuración actual de systemd-swap:

################################################################################
# Defaults are optimized for general usage
################################################################################

################################################################################
# You can override any settings with files in:
# /etc/systemd/swap.conf.d/*.conf
################################################################################

################################################################################
# Zswap
#
# Kernel >= 3.11
# Zswap create compress cache between swap and memory to reduce IO
# https://www.kernel.org/doc/Documentation/vm/zswap.txt

zswap_enabled=1
zswap_compressor=zstd     # lzo lz4 zstd lzo-rle lz4hc
zswap_max_pool_percent=25 # 1-99
zswap_zpool=z3fold        # zbud z3fold (note z3fold requires kernel 4.8+)

################################################################################
# ZRam
#
# Kernel >= 3.15
# Zram compression streams count for additional information see:
# https://www.kernel.org/doc/Documentation/blockdev/zram.txt

zram_enabled=0
zram_size=$(( RAM_SIZE / 4 ))    # This is 1/4 of ram size by default.
zram_count=${NCPU}               # Device count
zram_streams=${NCPU}             # Compress streams
zram_alg=zstd                    # See $zswap_compressor
zram_prio=32767                  # 1 - 32767

################################################################################
# Swap File Chunked
# Allocate swap files dynamically
# For btrfs fallback to swapfile + loop will be used
# ex. Min swap size 256M, Max 32*256M
swapfc_enabled=1
swapfc_force_use_loop=0          # Force usage of swapfile + loop
swapfc_frequency=1               # How often to check free swap space in seconds
swapfc_chunk_size=1G           # Size of swap chunk
swapfc_max_count=32              # Note: 32 is a kernel maximum
swapfc_min_count=0               # Minimum amount of chunks to preallocate
swapfc_free_swap_perc=25         # Add new chunk if free < 15%
swapfc_remove_free_swap_perc=55  # Remove chunk if free > 55% && chunk count > 2
swapfc_priority=0               # Priority of swapfiles (decreasing by one for each swapfile). Jumps from 0 to -2.
swapfc_path=/var/lib/systemd-swap/swapfc/
# Only for swapfile + loop
swapfc_nocow=1              # Disable CoW on swapfile
swapfc_directio=1           # Use directio for loop dev
swapfc_force_preallocated=0 # Will preallocate created files

################################################################################
# Swap devices
# Find and auto swapon all available swap devices
swapd_auto_swapon=1
swapd_prio=1024

Ahhh, no importa. Puedo reproducir esto, simplemente no está registrado por systemd-swap sino por systemd

¿Existe una solución? - obtén esto en la rama de prueba de Manjaro
25 de junio 10:20:55 Estación de trabajo systemd [1]: / run / systemd / system / var-lib-systemd \ x2dswap-swapfc-1. swap: 11 : Lo sentimos, las prioridades de swap menores que -1 solo pueden ser asignadas por el propio kernel, ignorando: -2
25 de junio 10:20:56 Estación de trabajo systemd [1]: No se pudo activar el archivo de intercambio.

en systemd 245.6-3 sin problema

¿Existe una solución? - obtén esto en la rama de prueba de Manjaro
25 de junio 10:20:55 Estación de trabajo systemd [1]: / run / systemd / system / var-lib-systemd \ x2dswap-swapfc-1. swap: 11 : Lo sentimos, las prioridades de swap menores que -1 solo pueden ser asignadas por el propio kernel, ignorando: -2
25 de junio 10:20:56 Estación de trabajo systemd [1]: No se pudo activar el archivo de intercambio.

en systemd 245.6-3 sin problema

Sí, puede establecer la prioridad en algo así como 100

¿Existe una solución? - obtén esto en la rama de prueba de Manjaro
25 de junio 10:20:55 Estación de trabajo systemd [1]: / run / systemd / system / var-lib-systemd \ x2dswap-swapfc-1. swap: 11 : Lo sentimos, las prioridades de swap menores que -1 solo pueden ser asignadas por el propio kernel, ignorando: -2
25 de junio 10:20:56 Estación de trabajo systemd [1]: No se pudo activar el archivo de intercambio.
en systemd 245.6-3 sin problema

Sí, puede establecer la prioridad en algo así como 100

No soluciona mi problema:
grafik

Oh, leí mal tu comentario. La prioridad nunca hace que falle un archivo de intercambio, solo advierte, por lo que su problema no está relacionado.
Abra una nueva edición para esto.

No sé cuándo comenzó a suceder nuevamente, pero estoy en el último master, arch kernel con zen modifs (linux-tkg) en 5.9.7 y todavía reproduzco este problema, excepto que es aún peor porque sigue aumentando la prioridad:

/var-lib-systemd\x2dswap-swapfc-3.swap:11: Sorry, swap priorities smaller than -1 may only be assigned by the kernel itself, ignoring: -474

Aquí está mi free -hm actual:

              total        used        free      shared  buff/cache   available
Mem:           15Gi       4,2Gi       907Mi       668Mi        10Gi       9,2Gi
Swap:         4,0Gi       2,3Gi       1,7Gi

Y aquí está la configuración que uso (sin cambios a /etc/systemd/swap.conf , usando un archivo desplegable:

################################################################################
# Defaults are optimized for general usage
################################################################################

################################################################################
# You can override any settings with files in:
# /etc/systemd/swap.conf.d/*.conf
################################################################################

################################################################################
# Zswap
#
# Kernel >= 3.11
# Zswap create compress cache between swap and memory to reduce IO
# https://www.kernel.org/doc/Documentation/vm/zswap.txt

zswap_enabled=1
zswap_compressor=zstd     # lzo lz4 zstd lzo-rle lz4hc
zswap_max_pool_percent=25 # 1-99
zswap_zpool=z3fold        # zbud z3fold (note z3fold requires kernel 4.8+)

################################################################################
# ZRam
#
# Kernel >= 3.15
# Zram compression streams count for additional information see:
# https://www.kernel.org/doc/Documentation/blockdev/zram.txt

zram_enabled=0
zram_size=$(( RAM_SIZE / 4 ))    # This is 1/4 of ram size by default.
zram_count=${NCPU}               # Device count
zram_streams=${NCPU}             # Compress streams
zram_alg=zstd                    # See $zswap_compressor
zram_prio=32767                  # 1 - 32767

################################################################################
# Swap File Chunked
# Allocate swap files dynamically
# For btrfs fallback to swapfile + loop will be used
# ex. Min swap size 256M, Max 32*256M
swapfc_enabled=1
swapfc_force_use_loop=0          # Force usage of swapfile + loop
swapfc_frequency=1               # How often to check free swap space in seconds
swapfc_chunk_size=2G           # Size of swap chunk
swapfc_max_count=16              # Note: 32 is a kernel maximum
swapfc_min_count=0               # Minimum amount of chunks to preallocate
swapfc_free_swap_perc=50         # Add new chunk if free < 50%
swapfc_remove_free_swap_perc=55  # Remove chunk if free > 55% && chunk count > 2
#swapfc_priority=0               # Priority of swapfiles (decreasing by one for each swapfile). Jumps from 0 to -2.
swapfc_path=/var/lib/systemd-swap/swapfc/
# Only for swapfile + loop
swapfc_nocow=1              # Disable CoW on swapfile
swapfc_directio=1           # Use directio for loop dev
swapfc_force_preallocated=0 # Will preallocate created files

################################################################################
# Swap devices
# Find and auto swapon all available swap devices
swapd_auto_swapon=1
swapd_prio=1024

Aquí está el registro de diario de systemd-swap (menos los errores de prioridad de intercambio de systemd)
systemd-swap-log.txt

@vilgotf

Se trata de un error de configuración de su parte (aunque se deben realizar comprobaciones).

El problema con su configuración es que se crea un nuevo archivo de intercambio, ya que utiliza más del 50% de su intercambio. Esto funciona bien en pocos archivos de intercambio, pero cuando se asigna el siguiente archivo de intercambio, la cantidad de intercambio libre ahora es mayor al 55%, por lo que instantáneamente intenta eliminar el archivo de intercambio, luego (debido a que hemos eliminado el archivo de intercambio), el la cantidad de intercambio gratuito es inferior al 50%, por lo que intenta crear un nuevo archivo de intercambio (ad infinitum)

Disminuya el swapfc_free_swap_perc (recomendado, 15 es el valor predeterminado por una razón) o aumente el swapfc_remove_free_swap_perc .

¡Eso es todo, gracias! Sí, estaba tratando de jugar con los valores porque el nuevo archivo de intercambio no llegaba lo suficientemente pronto y el asesino de la memoria se estaba activando.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

cerebrux picture cerebrux  ·  4Comentarios

dou4cc picture dou4cc  ·  7Comentarios

Brottweiler picture Brottweiler  ·  6Comentarios

pheiduck picture pheiduck  ·  16Comentarios

adrelanos picture adrelanos  ·  3Comentarios