Systemd-swap: Desculpe, as prioridades de swap menores que -1 só podem ser atribuídas pelo próprio kernel

Criado em 14 jun. 2020  ·  31Comentários  ·  Fonte: Nefelim4ag/systemd-swap

Parece ser causado por 52a468aeea9e00f3f1763e96a05adbe48b0a644d, mas não dividi ao meio. Isso pode ser causado por mudanças de segurança recentes?

/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

Comentários muito úteis

Ahhh, deixa pra lá. Posso reproduzir isso, não é apenas registrado pelo systemd-swap, mas pelo systemd

Todos 31 comentários

Você pode dizer sua versão do linux (se arch seja zen ou normal), distro e sistema de arquivos?

(isso não acontece comigo executando o arch zen 5.7 e f2fs)

ArchLinux 5.7.2 com modificações zen e ext4.

O arquivo de troca foi criado? (isto é, isso é apenas um aviso?)

Eu reiniciei: / Existe uma maneira de preencher rapidamente a memória ram até uma porcentagem específica para acionar a troca?

Você pode usar o stress-ng stress-ng --vm-bytes $(awk '/MemAvailable/{printf "%d\n", $2 * 0.90;}' < /proc/meminfo)k --vm-keep -m 1 (aloca até 90% da memória).

Outra maneira de corrigir esse problema é definir swapfc_priority=100 ou algo em /etc/systemd/swap.conf.d/overrides.conf

Ok, sim, ainda consigo reproduzir.
O arquivo de troca ainda é criado.
Embora eu possa consertar atribuindo> -1, esse aviso é normal? Se for o caso, não faz sentido usar esse padrão e, em vez disso, usar 0, eu acho.

Algo estranho que notei ao testar com stress-ng é que quando eu uso * 0.50 o bloco de troca de 1 GB que configurei é de fato criado, mas quando eu mudo para * 0.90 nenhuma troca é adicionada apesar de ter 700 MB de memória livre.

minha configuração:

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+)

O segundo arquivo de troca só é criado quando o primeiro está com pouca memória

Ah ok. E por que não está trocando então? Vejo apenas 32 MB usados.

Você terá que perguntar a Linus Torvalds sobre aquele ^^, resumindo, o swap é usado apenas quando mais memória é solicitada, então se nenhum aplicativo estiver pedindo mais memória, você não verá o swap sendo usado.
Você pode ajustar os parâmetros de troca você mesmo (troca, etc.), mas observe que os padrões do systemd-swap são ajustados para as configurações padrão.

Ah, entendo, obrigado pela bela explicação: +1:
O que fazemos sobre o 'problema' inicial?

Vou ver como reproduzi-lo sozinho em uma VM e se podemos silenciar o aviso (usando 2>/dev/null em nosso comando swapon). Como isso só produz um aviso, não vou colocá-lo na fila para um novo lançamento imediatamente, mas vou agrupá-lo com outras correções / atualizações.

Portanto, o aviso está errado e podemos criar uma troca com -2?

Eu fiz cat /proc/swaps e parece dizer que realmente tem uma prioridade -2:

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

Então, talvez seja um bug do upstream e precise ser relatado?

Ehh, o kernel diz que só ele pode criar prioridades menores que -1 e isso parece ser verdade (de acordo com a documentação que li), é mais um bug com f2fs ou algo que faz com que eu não possa veja aquele aviso ....
O raciocínio para o default do systemd-swap para -2 é que é assim que ele sempre foi configurado e eu não desejo quebrar as configurações das pessoas.

Tudo bem, entendo, obrigado. Vou deixar isso aberto até que você possa reproduzir e silenciá-lo, eu acho.

Incapaz de reproduzir no fedora & arch. Você pode fornecer informações adicionais?

Ainda pode reproduzir com seus últimos commits.
Que tipo de outras informações você precisa?

Não sei, mas não consigo diagnosticar sem ser capaz de reproduzir. E como isso só é relatado por você, tenho a sensação de que pode haver algo do seu lado causando isso.

  • Meu caminho swapfc é /var/lib/systemd-swap/swapfc/
  • Opções de montagem da unidade: rw,noatime,lazytime
  • Systemd 245.6

Minha configuração atual do 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, deixa pra lá. Posso reproduzir isso, não é apenas registrado pelo systemd-swap, mas pelo systemd

Há uma solução? - pegue no Manjaro testing Branch
25 de junho 10:20:55 Estação de trabalho systemd [1]: / run / systemd / system / var-lib-systemd \ x2dswap-swapfc-1. swap: 11 : Desculpe, prioridades de swap menores que -1 só podem ser atribuídas pelo próprio kernel, ignorando: -2
25 de junho 10:20:56 Estação de trabalho systemd [1]: Falha ao ativar o arquivo de permuta de troca.

no systemd 245.6-3 sem problemas

Há uma solução? - pegue no Manjaro testing Branch
25 de junho 10:20:55 Estação de trabalho systemd [1]: / run / systemd / system / var-lib-systemd \ x2dswap-swapfc-1. swap: 11 : Desculpe, prioridades de swap menores que -1 só podem ser atribuídas pelo próprio kernel, ignorando: -2
25 de junho 10:20:56 Estação de trabalho systemd [1]: Falha ao ativar o arquivo de permuta de troca.

no systemd 245.6-3 sem problemas

Sim, você pode definir a prioridade para algo como 100

Há uma solução? - pegue no Manjaro testing Branch
25 de junho 10:20:55 Estação de trabalho systemd [1]: / run / systemd / system / var-lib-systemd \ x2dswap-swapfc-1. swap: 11 : Desculpe, prioridades de swap menores que -1 só podem ser atribuídas pelo próprio kernel, ignorando: -2
25 de junho 10:20:56 Estação de trabalho systemd [1]: Falha ao ativar o arquivo de permuta de troca.
no systemd 245.6-3 sem problemas

Sim, você pode definir a prioridade para algo como 100

Não resolve meu problema:
grafik

Oh, eu interpretei mal o seu comentário. A prioridade nunca faz com que um arquivo de troca falhe, ela apenas avisa, então o seu problema não está relacionado.
Por favor, abra um novo problema para este

Não sei quando começou a acontecer novamente, mas estou no último master, arch kernel with zen modifs (linux-tkg) em 5.9.7 e ainda reproduzo esse problema, exceto que é ainda pior porque continua aumentando a prioridade:

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

Aqui está meu free -hm atual:

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

E aqui está a configuração que eu uso (sem alteração para /etc/systemd/swap.conf , usando um arquivo drop-in:

################################################################################
# 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

Aqui está o registro do diário de troca do systemd (sem os erros de prioridade de troca do systemd)
systemd-swap-log.txt

@vilgotf

Este é um erro de configuração de sua parte (embora devam ser feitas verificações para isso).

O problema com sua configuração é que um novo arquivo de troca é criado, já que você usa mais de 50% de sua troca. Isso funciona bem em alguns arquivos de troca, mas quando o próximo arquivo de troca é alocado, a quantidade de troca livre agora é maior que 55%, então ele tenta remover instantaneamente o arquivo de troca, então (porque removemos o arquivo de troca), o quantidade de troca livre é inferior a 50%, então ele tenta criar um novo arquivo de troca (ad infinitum)

Diminua o swapfc_free_swap_perc (recomendado, 15 é o padrão por um motivo) ou aumente o swapfc_remove_free_swap_perc .

É isso, obrigado! Sim, eu estava tentando brincar com os valores porque o novo arquivo de troca não estava chegando em breve e o assassino de memória estava sendo acionado.

Esta página foi útil?
0 / 5 - 0 avaliações