kswapd geralmente usa 100% da CPU quando a troca está em uso

5

Na maioria das vezes, quando meu computador começa a precisar de swap, vejo um pico enorme no uso da CPU ( kswapd0 está consistentemente usando 99% -100% da CPU). De acordo com top , o tempo gasto em sy (system / kernel) não é wa (IO wait).

Estou executando o Linux 4.0.4-2-ARCH em um C720 com 2 GB de RAM e 6 GB de swap em um SSD.

Parece que tenho este problema com ou sem as páginas de descarte (TRIM) ativadas.

Existe alguma configuração que eu deva inspecionar ou ajustar para ver se consigo consertar isso?

Existe alguma maneira de depurar o problema? Algo como strace para encadeamentos do kernel?

Execução com configurações padrão do Arch Linux:

/proc/sys/vm/swappiness = 60 em /proc/sys/vm/vfs_cache_pressure = 100 em /sys/kernel/mm/transparent_hugepage/enabled = [always] madvise never

    
por Zaz 02.06.2015 / 19:48

4 respostas

7

Parece um relativamente common problema

Quando o problema está acontecendo, você pode verificar se a emissão do seguinte comando o interrompe: echo 1 > /proc/sys/vm/drop_caches

Se funcionar, você pode programá-lo como uma tarefa cron periódica como solução alternativa.

    
por 02.06.2015 / 22:44
1

Eu tenho um C720 executando o Linux Kernel 4.4.0 no Ubuntu 14.04.1 LTS com 2 GB de RAM e 2 GB de swap.

Supondo o uso pesado de Chrome / Chromium, veja algumas maneiras de tornar seu sistema mais eficiente:

  1. Edite /etc/default/grub e adicione os seguintes parâmetros do kernel à linha GRUB_CMDLINE_LINUX_DEFAULT :
    • elevator=noop
    • zswap.enabled=1
    • transparent_hugepage=madvise
  2. Executar sudo update-grub2 .
  3. Edite /etc/sysctl.conf e anexe o seguinte:
  4. Reinicialize.

Você pode verificar as alterações da seguinte forma:

$ dmesg | grep -i noop
[    0.694680] io scheduler noop registered (default)
$ dmesg | grep -i zswap
[    0.724855] zswap: loaded using pool lzo/zbud
$ cat /sys/kernel/mm/transparent_hugepage/enabled
always [madvise] never
$ sysctl vm.swappiness
vm.swappiness = 25
$ sysctl vm.vfs_cache_pressure
vm.vfs_cache_pressure = 1000

Atualizar

O aumento de vm.min_free_kbytes no passo # 3 pode ser benéfico. Tente um valor de 131072 (128 MB). A conclusão final é que o Linux na área de trabalho não funciona muito bem em situações de pouca memória. Alguns sugeriram colocar o Chrome / Chromium em cgroup , mas isso está além do escopo desta resposta.

    
por 24.02.2017 / 23:48
1

O kernel kswap é usado para alocar e liberar páginas do tipo "momery", se o seu swap é usado em você ver este kernel usando muito tempo de cpu, isso significa que os threads do kernel do kswap estão varrendo as páginas da memória para trocar algumas páginas solicitação de alocação de memória.

Acho que soltar o cache neste caso não ajuda, porque o kernel recupera o cache quando o sistema operacional é uma situação de memória apertada automaticamente.

Se você não tiver nenhum problema de memória e usar o comando free , você usará muita memória usada como cache, mas se você tiver um problema de memória, o Linux reduzirá o cache para servir as solicitações de alocação de memória, sem qualquer necessidade de descartar o cache

você pode usar sar -B e procurando majft e pgscank valores, para outros valores man sar

    
por 03.06.2015 / 01:06
0

( Isto é quase-resposta - muito longo para ser um comentário, mas não uma resposta pronta embora )

1) Que tal usar não 6G mas menos, digamos 1 ou 2 GiBs (você pode configurar o tamanho com mkswap sem redimensionar a partição swap) - tentou? Quais resultados?

2) O que é sysctl vm.swappiness , sysctl vm.vfs_cache_pressure ?

3) O que é cat /sys/kernel/mm/transparent_hugepage/enabled ?

N. B. Você percebe que vai desgastar seu SSD significativamente nesse tipo de configuração (não muita memória, troca enorme).

S. Eu poderia recomendar a tentativa de usar o UltraKSM, mas requer a correção de um kernel. Eu tenho algumas criações minhas ( - em tempo real e BFS base), mas eles são para sistemas .deb -based e enquanto isso eles podem ser usados em sistemas diferentes com bastante facilidade (normalmente você precisaria apenas descompactar o .deb s e fazer initrd / initramfs correspondente, pode ser um aborrecimento para pessoas que não são familiares com esse lado do Linux)

(continua)

    
por 02.06.2015 / 20:18