AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 406925
Accepted
Tom Hale
Tom Hale
Asked: 2017-11-25 22:37:21 +0800 CST2017-11-25 22:37:21 +0800 CST 2017-11-25 22:37:21 +0800 CST

Evite a inversão zram LRU com zswap e max_pool_percent = 100

  • 772

A principal desvantagem de usar o zram é a inversão LRU :

as páginas mais antigas entram no zram de prioridade mais alta e o preenchem rapidamente, enquanto as páginas mais novas são trocadas dentro e fora do swap [...]

A documentação do zswap diz que o zswap não sofre com isso:

O Zswap recebe páginas para compactação por meio da API do Frontswap e é capaz de remover páginas de seu próprio pool compactado em uma base LRU e escrevê-las de volta no dispositivo de troca de suporte caso o pool compactado esteja cheio.

Eu poderia ter todos os benefícios do zram e uma RAM completamente compactada configurando max_pool_percentpara 100?

Zswap seeks to be simple in its policies.  Sysfs attributes allow for one user
controlled policy:
* max_pool_percent - The maximum percentage of memory that the compressed
    pool can occupy.

Nenhum padrão max_pool_percenté especificado aqui, mas a página Arch Wiki diz que é 20.

Além das implicações de desempenho da descompactação, existe algum perigo/desvantagem em definir max_pool_percentpara 100?

Ele funcionaria como um zram aprimorado com suporte de swap?

linux swap
  • 1 1 respostas
  • 4167 Views

1 respostas

  • Voted
  1. Best Answer
    Jake F
    2017-11-27T09:04:32+08:002017-11-27T09:04:32+08:00

    Para responder à sua pergunta, primeiro fiz uma série de experimentos. As respostas finais estão em negrito no final.

    Experimentos realizados:

    1) swap file, zswap disabled
    2) swap file, zswap enabled, max_pool_percent = 20
    3) swap file, zswap enabled, max_pool_percent = 70
    4) swap file, zswap enabled, max_pool_percent = 100
    5) zram swap, zswap disabled
    6) zram swap, zswap enabled, max_pool_percent = 20
    7) no swap
    8) swap file, zswap enabled, max_pool_percent = 1
    9) swap file (300 M), zswap enabled, max_pool_percent = 100
    

    Configuração antes do experimento:

    • VirtualBox 5.1.30
    • Fedora 27, rotação do xfce
    • 512 MB de RAM, 16 MB de RAM de vídeo, 2 CPUs
    • kernel linux 4.13.13-300.fc27.x86_64
    • valor padrão swappiness(60)
    • criou um arquivo de troca vazio de 512 MB (300 MB no experimento 9) para possível uso durante alguns dos experimentos (usando dd), mas swaponainda não
    • desativou todos os serviços dnf* systemd, correu watch "killall -9 dnf"para ter mais certeza de que o dnf não tentará atualizar automaticamente durante o experimento ou algo assim e jogará os resultados longe demais

    Estado antes do experimento:

    [root@user-vm user]# free -m ; vmstat ; vmstat -d 
                  total        used        free      shared  buff/cache   available
    Mem:            485         280          72           8         132         153
    Swap:           511           0         511
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     0  0      0  74624   8648 127180    0    0  1377   526  275  428  3  2 94  1  0
    disk- ------------reads------------ ------------writes----------- -----IO------
           total merged sectors      ms  total merged sectors      ms    cur    sec
    sda   102430    688 3593850   67603   3351   8000 1373336   17275      0     26
    sr0        0      0       0       0      0      0       0       0      0      0
    

    As operações de swapon subsequentes, etc., levando a configurações diferentes durante os experimentos, resultaram em variações de cerca de 2% desses valores.

    A operação do experimento consistiu em:

    • Execute o Firefox pela primeira vez
    • Aguarde cerca de 40 segundos ou até que a atividade da rede e do disco cesse (o que for mais longo)
    • Registre o seguinte estado após o experimento (o firefox saiu em execução, exceto para os experimentos 7 e 9 em que o firefox travou)

    Declare após o experimento:

    1) arquivo de troca, zswap desabilitado

    [root@user-vm user]# free -m ; vmstat ; vmstat -d 
                  total        used        free      shared  buff/cache   available
    Mem:            485         287           5          63         192          97
    Swap:           511         249         262
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     1  0 255488   5904   1892 195428   63  237  1729   743  335  492  3  2 93  2  0
    disk- ------------reads------------ ------------writes----------- -----IO------
           total merged sectors      ms  total merged sectors      ms    cur    sec
    sda   134680  10706 4848594   95687   5127  91447 2084176   26205      0     38
    sr0        0      0       0       0      0      0       0       0      0      0
    

    2) arquivo de troca, zswap ativado, max_pool_percent = 20

    [root@user-vm user]# free -m ; vmstat ; vmstat -d 
                  total        used        free      shared  buff/cache   available
    Mem:            485         330           6          33         148          73
    Swap:           511         317         194
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     0  0 325376   7436    756 151144    3  110  1793   609  344  477  3  2 93  2  0
    disk- ------------reads------------ ------------writes----------- -----IO------
           total merged sectors      ms  total merged sectors      ms    cur    sec
    sda   136046   1320 5150874  117469  10024  41988 1749440   53395      0     40
    sr0        0      0       0       0      0      0       0       0      0      0
    

    3) arquivo de troca, zswap ativado, max_pool_percent = 70

    [root@user-vm user]# free -m ; vmstat ; vmstat -d 
                  total        used        free      shared  buff/cache   available
    Mem:            485         342           8          32         134          58
    Swap:           511         393         118
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     0  0 403208   8116   1088 137180    4    8  3538   474  467  538  3  3 91  3  0
    disk- ------------reads------------ ------------writes----------- -----IO------
           total merged sectors      ms  total merged sectors      ms    cur    sec
    sda   224321   1414 10910442  220138   7535   9571 1461088   42931      0     60
    sr0        0      0       0       0      0      0       0       0      0      0
    

    4) arquivo de troca, zswap ativado, max_pool_percent = 100

    [root@user-vm user]# free -m ; vmstat ; vmstat -d 
                  total        used        free      shared  buff/cache   available
    Mem:            485         345          10          32         129          56
    Swap:           511         410         101
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     1  0 420712  10916   2316 130520    1   11  3660   492  478  549  3  4 91  2  0
    disk- ------------reads------------ ------------writes----------- -----IO------
           total merged sectors      ms  total merged sectors      ms    cur    sec
    sda   221920   1214 10922082  169369   8445   9570 1468552   28488      0     56
    sr0        0      0       0       0      0      0       0       0      0      0
    

    5) troca zram, zswap desabilitado

    [root@user-vm user]# free -m ; vmstat ; vmstat -d 
                  total        used        free      shared  buff/cache   available
    Mem:            485         333           4          34         147          72
    Swap:           499         314         185
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     5  0 324128   7256   1192 149444  153  365  1658   471  326  457  3  2 93  2  0
    disk- ------------reads------------ ------------writes----------- -----IO------
           total merged sectors      ms  total merged sectors      ms    cur    sec
    sda   130703    884 5047298  112889   4197   9517 1433832   21037      0     37
    sr0        0      0       0       0      0      0       0       0      0      0
    zram0  58673      0  469384     271 138745      0 1109960     927      0      1
    

    6) zram swap, zswap ativado, max_pool_percent = 20

    [root@user-vm user]# free -m ; vmstat ; vmstat -d 
                  total        used        free      shared  buff/cache   available
    Mem:            485         338           5          32         141          65
    Swap:           499         355         144
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     1  0 364984   7584    904 143572   33  166  2052   437  354  457  3  3 93  2  0
    disk- ------------reads------------ ------------writes----------- -----IO------
           total merged sectors      ms  total merged sectors      ms    cur    sec
    sda   166168    998 6751610  120911   4383   9543 1436080   18916      0     42
    sr0        0      0       0       0      0      0       0       0      0      0
    zram0  13819      0  110552      78  68164      0  545312     398      0      0
    

    7) sem troca

    Observe que o firefox não está sendo executado neste experimento no momento do registro dessas estatísticas.

    [root@user-vm user]# free -m ; vmstat ; vmstat -d 
                  total        used        free      shared  buff/cache   available
    Mem:            485         289          68           8         127         143
    Swap:             0           0           0
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     2  0      0  70108  10660 119976    0    0 13503   286  607  618  2  5 88  5  0
    disk- ------------reads------------ ------------writes----------- -----IO------
           total merged sectors      ms  total merged sectors      ms    cur    sec
    sda   748978   3511 66775042  595064   4263   9334 1413728   23421      0    164
    sr0        0      0       0       0      0      0       0       0      0      0
    

    8) arquivo de troca, zswap ativado, max_pool_percent = 1

    [root@user-vm user]# free -m ; vmstat ; vmstat -d 
                  total        used        free      shared  buff/cache   available
    Mem:            485         292           7          63         186          90
    Swap:           511         249         262
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     1  0 255488   7088   2156 188688   43  182  1417   606  298  432  3  2 94  2  0
    disk- ------------reads------------ ------------writes----------- -----IO------
           total merged sectors      ms  total merged sectors      ms    cur    sec
    sda   132222   9573 4796802  114450  10171  77607 2050032  137961      0     41
    sr0        0      0       0       0      0      0       0       0      0      0
    

    9) arquivo de troca (300 M), zswap ativado, max_pool_percent = 100

    O Firefox estava travado e o sistema ainda lia o disco furiosamente. A linha de base para este experimento é diferente, pois um novo arquivo de troca foi gravado:

                  total        used        free      shared  buff/cache   available
    Mem:            485         280           8           8         196         153
    Swap:           299           0         299
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     0  0      0   8948   3400 198064    0    0  1186   653  249  388  2  2 95  1  0
    disk- ------------reads------------ ------------writes----------- -----IO------
           total merged sectors      ms  total merged sectors      ms    cur    sec
    sda   103099    688 3610794   68253   3837   8084 1988936   20306      0     27
    sr0        0      0       0       0      0      0       0       0      0      0
    

    Especificamente, 649384 setores extras foram gravados como resultado dessa alteração.

    Declare após o experimento:

    [root@user-vm user]# free -m ; vmstat ; vmstat -d 
                  total        used        free      shared  buff/cache   available
    Mem:            485         335          32          47         118          53
    Swap:           299         277          22
    procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
     r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
     7  1 283540  22912   2712 129132    0    0 83166   414 2387 1951  2 23 62 13  0
    disk- ------------reads------------ ------------writes----------- -----IO------
           total merged sectors      ms  total merged sectors      ms    cur    sec
    sda   3416602  26605 406297938 4710584   4670   9025 2022272   33805      0    521
    sr0        0      0       0       0      0      0       0       0      0      0
    

    Subtrair os 649384 setores escritos extras de 2022272 resulta em 1372888. Isso é menor que 1433000 (veja mais adiante), provavelmente porque o firefox não está carregando totalmente.

    Também fiz alguns experimentos com swappinessvalores baixos (10 e 1) e todos eles travaram em um estado congelado com leituras de disco excessivas, impedindo-me de registrar as estatísticas finais da memória.

    Observações:

    • Subjetivamente, max_pool_percentvalores altos resultaram em lentidão.
    • Subjetivamente, o sistema no experimento 9 era tão lento que era inutilizável.
    • Valores altos max_pool_percentresultam na menor quantidade de gravações, enquanto valores muito baixos max_pool_percentresultam no maior número de gravações.
    • Os experimentos 5 e 6 (zram swap) sugerem que o firefox gravou dados que resultaram em cerca de 62.000 setores gravados no disco. Qualquer coisa acima de 1433000 são setores gravados devido à troca. Consulte a tabela a seguir.
    • Se assumirmos que o menor número de setores de leitura entre os experimentos é a linha de base, podemos comparar os experimentos com base na quantidade de setores de leitura extras devido à troca que eles causaram.

    Setores escritos como consequência direta da troca (aprox.):

    650000   1) swap file, zswap disabled
    320000   2) swap file, zswap enabled, max_pool_percent = 20
     30000   3) swap file, zswap enabled, max_pool_percent = 70
     40000   4) swap file, zswap enabled, max_pool_percent = 100
     0       5) zram swap, zswap disabled
     0       6) zram swap, zswap enabled, max_pool_percent = 20
    -20000   7) no swap (firefox crashed)
    620000   8) swap file, zswap enabled, max_pool_percent = 1
    -60000   9) swap file (300 M), zswap enabled, max_pool_percent = 100 (firefox crashed)
    

    Setores extras lidos como consequência direta da troca (aprox.):

        51792             1) swap file, zswap disabled
       354072             2) swap file, zswap enabled, max_pool_percent = 20
      6113640             3) swap file, zswap enabled, max_pool_percent = 70
      6125280             4) swap file, zswap enabled, max_pool_percent = 100
       250496             5) zram swap, zswap disabled
      1954808             6) zram swap, zswap enabled, max_pool_percent = 20
     61978240             7) no swap
            0 (baseline)  8) swap file, zswap enabled, max_pool_percent = 1
    401501136             9) swap file (300 M), zswap enabled, max_pool_percent = 100
    

    Interpretação de resultados:

    • Isso é subjetivo e também específico para o caso de uso em questão; o comportamento irá variar em outros casos de uso.
    • O pool de páginas do Zswap ocupa espaço na RAM que pode ser usado pelo cache de página do sistema (para páginas com backup de arquivo), o que significa que o sistema descarta repetidamente as páginas com backup de arquivo e as lê novamente quando necessário, resultando em leituras excessivas.
    • O alto número de leituras no experimento 7 é causado pelo mesmo problema - as páginas anônimas do sistema ocupavam a maior parte da RAM e as páginas com backup em arquivo precisavam ser lidas repetidamente do disco.
    • Pode ser possível, sob certas circunstâncias, minimizar a quantidade de dados gravados no disco de troca perto de zero zswap, mas evidentemente não é adequado para esta tarefa.
    • Não é possível ter " RAM completamente compactada ", pois o sistema precisa de uma certa quantidade de páginas não-swap para residir na RAM para operação.

    Opiniões pessoais e anedotas:

    • A principal melhoria do zswap em termos de gravação de disco não é o fato de ele comprimir as páginas, mas o fato de ter seu próprio sistema de buffer e cache que reduz o cache da página e mantém efetivamente mais páginas anônimas (em formato compactado) na RAM. (No entanto, com base na minha experiência subjetiva como eu uso o Linux diariamente, um sistema com swap e zswapcom os valores padrão de swappinesse max_pool_percentsempre se comporta melhor do que qualquer swappinessvalor e nenhum zswapou zswapcom valores altos de max_pool_percent.)
    • Valores baixos swappinessparecem fazer o sistema se comportar melhor até que a quantidade de cache de página restante seja tão pequena que torne o sistema inutilizável devido a leituras excessivas de disco. Semelhante com muito alto max_pool_percent.
    • Use apenas zrama troca e limite a quantidade de páginas anônimas que você precisa manter na memória ou use a troca com suporte de disco com zswapvalores aproximadamente padrão para swappinesse max_pool_percent.

    EDIT: Possível trabalho futuro para responder aos pontos mais delicados da sua pergunta seria descobrir para o seu caso de uso específico como o zsmallocalocador usado em zramcompara a compactação com o zbudalocador usado em zswap. Não vou fazer isso, apenas apontar coisas para pesquisar em documentos/na internet.

    EDIT 2: echo "zsmalloc" > /sys/module/zswap/parameters/zpoolmuda o alocador de zswap de zbudpara zsmalloc. Continuando com meu dispositivo de teste para os experimentos acima e comparando zramcom zswap+ zsmalloc, parece que, desde que a memória de troca necessária seja a mesma que uma zramtroca ou como zswap, max_pool_percenta quantidade de leituras e gravações no disco é muito semelhante entre os dois . Em minha opinião pessoal com base nos fatos, desde que a quantidade de zramswap de que preciso seja menor do que a quantidade de zramswap que posso realmente manter na RAM, é melhor usar apenas zram; e quando eu precisar de mais swap do que realmente posso manter na memória, é melhor alterar minha carga de trabalho para evitá-lo ou desabilitar o zramswap e usar zswapcom zsmalloce definirmax_pool_percentpara o equivalente ao que o zram anteriormente ocupava na memória (tamanho da zram* taxa de compactação). Atualmente, não tenho tempo para escrever adequadamente esses testes adicionais.

    • 12

relate perguntas

  • Existe uma maneira de fazer ls mostrar arquivos ocultos apenas para determinados diretórios?

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Matriz JSON para bash variáveis ​​usando jq

    • 4 respostas
  • Marko Smith

    A data pode formatar a hora atual para o fuso horário GMT? [duplicado]

    • 2 respostas
  • Marko Smith

    bash + lê variáveis ​​e valores do arquivo pelo script bash

    • 4 respostas
  • Marko Smith

    Como posso copiar um diretório e renomeá-lo no mesmo comando?

    • 4 respostas
  • Marko Smith

    conexão ssh. Conexão X11 rejeitada devido a autenticação incorreta

    • 3 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Marko Smith

    comando systemctl não funciona no RHEL 6

    • 3 respostas
  • Marko Smith

    rsync porta 22 e 873 uso

    • 2 respostas
  • Marko Smith

    snap /dev/loop em 100% de utilização -- sem espaço livre

    • 1 respostas
  • Marko Smith

    chave de impressão jq e valor para todos no subobjeto

    • 2 respostas
  • Martin Hope
    EHerman Matriz JSON para bash variáveis ​​usando jq 2017-12-31 14:50:58 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Drux A data pode formatar a hora atual para o fuso horário GMT? [duplicado] 2017-12-26 11:35:07 +0800 CST
  • Martin Hope
    AllisonC Como posso copiar um diretório e renomeá-lo no mesmo comando? 2017-12-22 05:28:06 +0800 CST
  • Martin Hope
    Steve Como as permissões de arquivo funcionam para o usuário "root"? 2017-12-22 02:46:01 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST
  • Martin Hope
    Cbhihe Altere o editor padrão para vim para _ sudo systemctl edit [unit-file] _ 2017-12-03 10:11:38 +0800 CST
  • Martin Hope
    showkey Como baixar o pacote não instalá-lo com o comando apt-get? 2017-12-03 02:15:02 +0800 CST
  • Martin Hope
    youxiao Por que os diretórios /home, /usr, /var, etc. têm o mesmo número de inode (2)? 2017-12-02 05:33:41 +0800 CST
  • Martin Hope
    user223600 gpg — o comando list-keys gera uid [ desconhecido ] depois de importar a chave privada para uma instalação limpa 2017-11-26 18:26:02 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve