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 / 556441
Accepted
Philip Couling
Philip Couling
Asked: 2019-12-10 17:13:11 +0800 CST2019-12-10 17:13:11 +0800 CST 2019-12-10 17:13:11 +0800 CST

O que especificamente o swap pode fazer que a RAM não pode?

  • 772

O que especificamente o Linux pode fazer quando tem swap que não pode sem swap?

Para esta pergunta, quero focar na diferença entre, por exemplo, um PC Linux com 32 GB de RAM e sem swap versus um PC Linux quase idêntico com 16 GB de RAM com 16 GB de swap. Observe que não estou interessado no "sim, mas você pode ver uma melhoria no X se adicionar swap ao PC de 32 GB" . Isso é off-topic para esta pergunta.


Eu encontrei pela primeira vez a opinião de que adicionar swap pode ser melhor do que adicionar RAM em comentários para um problema anterior .

É claro que li isso: Preciso de espaço de troca se tiver uma quantidade de RAM mais do que suficiente? e...

  • As respostas são principalmente focadas na adição de swap, por exemplo, discutindo o cache de disco, onde a adição de RAM também estenderia o cache de disco.
  • Há alguma menção de que a desfragmentação só é possível com troca, mas não consigo encontrar evidências para fazer backup disso.
  • Eu vejo alguma referência a MAP_NORESERVE para mmap, mas isso parece um risco muito específico e obscuro associado apenas a situações OOM e possivelmente apenas mmap privado .

A troca é frequentemente vista como uma maneira barata de estender a memória ou melhorar o desempenho. Mas quando a produção em massa de dispositivos Linux embutidos, isso é virado de cabeça para baixo ...

... Nesse caso, a troca irá desgastar a memória flash, fazendo com que ela falhe anos antes do final da garantia. Onde dobrar a RAM é um par de dólares extras no dispositivo.

Observe que é flash eMMC NÃO é um SSD! . Normalmente, o flash eMMC não possui tecnologia de nivelamento de desgaste, o que significa que ele se desgasta MUITO mais rápido que os SSDs


Parece haver muita opinião contestada sobre este assunto . Estou realmente procurando por fatos secos sobre capacidades, não por opiniões do tipo "você deveria / não deveria".

O que pode ser feito com o swap que também não seria feito adicionando RAM?

linux swap
  • 14 14 respostas
  • 11820 Views

14 respostas

  • Voted
  1. Best Answer
    muru
    2019-12-10T17:39:06+08:002019-12-10T17:39:06+08:00

    Hibernação (ou suspensão no disco). A hibernação real desliga o sistema completamente, então o conteúdo da RAM é perdido e você precisa salvar o estado em algum armazenamento persistente. AKA Troca. Ao contrário do Windows com hiberfil.syse pagefile.sys, o Linux usa espaço de troca para memória supercomprometida e hibernação.

    Por outro lado, a hibernação parece um pouco complicada para funcionar bem no Linux. Se você "pode" realmente hibernar é uma coisa diferente. ¯\_(ツ)_/¯

    • 64
  2. user373503
    2019-12-10T23:22:47+08:002019-12-10T23:22:47+08:00

    32 GB de RAM e sem troca vs. 16 GB de RAM com troca de 16 GB.

    Perguntado assim, o swap geralmente economiza dinheiro, aumentando a relação de desempenho por dólar, talvez também por watt.


    Mas a troca ainda é mais do que "memória tão lenta quanto um disco". É um armazenamento temporário para páginas de memória, que podem ser carregadas diretamente (sujas como são, sem sobrecarga do sistema de arquivos) na RAM quando necessário.

    Claro que depende muito da carga (o tipo de carga), e a ideia de trocar pode até sair pela culatra. É por isso que existe o parâmetro "swappiness", além do próprio swapon/ swapoff, e a discussão sobre o tamanho certo.

    Da wikipedia, recebi esta declaração sobre "swap" no linux (no artigo "paging")

    O kernel Linux suporta um número virtualmente ilimitado de backends de troca (dispositivos ou arquivos ...

    Se vários back-ends de troca forem atribuídos à mesma prioridade, eles serão usados ​​de maneira round-robin (que é um pouco semelhante aos layouts de armazenamento RAID 0),...

    Isso mostra que você pode transformar a troca em algo que faz mais sentido no nível do hardware: uma "unidade de rascunho" dedicada daria a essas páginas trocadas um lar melhor. Idealmente, uma unidade scratch deve ser (muito) pequena, mas rápida e robusta.


    De acordo com a "nova" regra de tamanho ( raiz quadrada de Giga), seu exemplo deve comparar:

    16 GB RAM+0 GB Swap+1000 GB Disk

    16 GB RAM+4 GB Swap+ 996 GB Disk

    Porque o que realmente não faz sentido é:

    16 GB RAM+0 GB Swap+1000 GB Disk

    12 GB RAM+4 GB Swap+1000 GB Disk

    Isso seria uma partição swap em um tmpfs ("ramdisk") - talvez nem muito prejudicial, mas não vejo nenhum benefício aqui. Você não pode nem hibernar.

    (veja abaixo para zram e zswap, no entanto, quando você adiciona compactação a isso)


    Para entender o swap, você deve considerar todo o sistema e a carga média. E porque vm/mm (gerenciamento de memória virtual) é um sistema complexo, é realmente difícil citar uma vantagem clara. Eu gosto da ideia de uma transição "suave" para um sistema sobrecarregado.

    Eu tenho 8 GB de RAM e não há swap. Mas ainda assim defendo o conceito, AFA eu posso entender :-)


    Encontrei esta citação redhat em um dos links do OP. O cenário é uma demanda de memória cada vez maior, em 2 GB RAM + 2 GB Swap, se bem me lembro:

    ... No nosso caso [apenas ilustrado], há bastante swap disponível, então o tempo de desempenho ruim é longo.

    Mas a alternativa é OOMainda mais cedo!

    O "tempo de baixo desempenho" é longo, sim, mas o desempenho só degrada proporcionalmente à carga. Eu não conheço o contexto, talvez eles só queiram alertar contra uma partição swap muito grande . Parece anti-swap, mas na segunda olhada não é .

    Então, novamente, pelo mesmo motivo, não tenho troca. Quero saber quando eu e meus aplicativos atingirmos o teto, e então decidirei se devo diminuir a carga, comprar mais RAM ou ativar uma partição para swap (tenho uma ou duas partições pequenas prontas para isso).


    Eu procurei este zram e então zswap coisa: muito interessante...:

    Em comparação, o zswap atua como um cache baseado em RAM para dispositivos de troca. Isso fornece ao zswap um mecanismo de despejo para páginas trocadas menos usadas, que o zram não possui.

    Por outro lado, zramfunciona sem nenhum dispositivo de troca. Torna possível que o que eu disse não faça sentido, mas não levei em consideração a compactação.

    Meu ponto é esse mecanismo de despejo inerente ao “swap”. Isso pode ser muito útil sob alta carga, seja trocando ou compactando.

    • 17
  3. NetIceGear
    2019-12-10T19:32:00+08:002019-12-10T19:32:00+08:00

    O que pode ser feito com o swap que também não seria feito adicionando RAM?

    Esta questão poderia realmente ser reformulada em O que pode ser feito com RAM não volátil que também não seria feito adicionando RAM mais volátil? . Só porque você dedica uma partição para paginação (uma maneira dedicada de interagir com a RAM volátil), isso não muda o fato de que ainda faz parte de um meio de armazenamento secundário persistente. A partição de troca também não é obrigatória para colocar um sistema em hibernação, um "arquivo de troca" criado em uma partição preexistente também pode ser usado.

    No final, se você estiver usando uma partição de troca ou um arquivo de troca, o que você armazenará são coisas para serem gravadas na memória RAM. Se você puxar o cabo de alimentação de um sistema com uma partição de troca habilitada, essa partição de troca não será apagada magicamente.

    Embora esses dados de troca não sejam lidos na próxima inicialização (porque o arquivo de paginação teria entradas correspondentes a processos que não estão mais em execução), e algumas distribuições podem tomar medidas deliberadas para destruí-lo durante um desligamento adequado ou uma reinicialização adequada , se alguém puxar um fio de um sistema, ele poderá examinar essa partição de troca forense.


    No caso dos dispositivos embarcados que você mencionou, o Flash, sendo um tipo de armazenamento em RAM não volátil (NVRAM ou EEPROM), se desgasta por sua capacidade de receber hits de I/O (Flash Cell Endurance representado em termos de número de programas /erase cycles) empalidece em comparação com a RAM volátil. Você literalmente raspa uma camada de óxido toda vez que executa uma gravação nesse local e, eventualmente, simplesmente não resta óxido para permitir o armazenamento persistente da carga e ela literalmente vaza antes de sua leitura subsequente.

    Por outro lado, a capacidade de sobrevivência da RAM do volátil é praticamente inexistente (da ordem de minutos em condições experimentais ideais) em comparação com o flash, se ou quando você cortar sua fonte de alimentação. No caso de RAM volátil, não há nada que impeça o vazamento da carga e o estado correspondente do flip-flop (entradas, determinando saídas, que então redeterminam as entradas), também conhecidas como travas controladas por feedback.

    • 16
  4. pjc50
    2019-12-11T03:31:58+08:002019-12-11T03:31:58+08:00

    Para um determinado total , é sempre melhor tê-lo como RAM do que trocar.

    Existe uma diferença de comportamento entre um sistema noswap e um sistema de troca, que pode ou não ser útil: thrashing. À medida que o sistema de troca começa a ficar sem memória virtual total disponível, ele fica cada vez mais bloqueado na movimentação de páginas para frente e para trás entre troca e RAM. Isso desacelera o sistema. Em algumas circunstâncias, isso pode permitir a intervenção manual ou automatizada para reduzir a carga e recuperar o sistema.

    Em um sistema noswap, o desempenho permanece relativamente nivelado até o uso de memória muito alto, ponto em que o SO começa a descarregar páginas readonly de executáveis ​​mapeados em memória e também tem muito pouco espaço para cache de disco. É provável que o assassino OOM seja acionado neste momento. Portanto, uma falha repentina em vez de uma degradação lenta.

    Concordo que a troca faz pouco sentido para sistemas embarcados, especialmente em pequenos dispositivos Flash embutidos. O mundo está cheio de pequenos roteadores para consumidores Linux, lâmpadas etc. com uso de memória bastante fixo e sem troca.

    • 16
  5. bishop
    2019-12-11T21:59:00+08:002019-12-11T21:59:00+08:00

    A troca, ao contrário da RAM, pode ser facilmente desabilitada, restrita, desacelerada ou estendida - um recurso útil ao desenvolver a estratégia de alocação de memória de um aplicativo.

    Suponha que seu kernel veja 4G de RAM e 4G de swap, e o SO e os aplicativos de desenvolvimento (navegador, IDE, etc.) consomem 3G. Isso é 5G virtual grátis: 1G de real e 4G de swap.

    Você está desenvolvendo seu novo banco de dados ou jogo, que quer, digamos, 2G para carregar seus recursos quentes. Então, está indo, sbrke mmaprepetidamente, e com swap ativado, obtém seu 2G real pela maravilha da camada de VM do kernel. Hooray, seu código funciona bem. (E seu navegador ou o que quer que tenha sido relegado à página para trocar o inferno.)

    Agora, pare seu programa. swapoffe execute novamente seu programa. Desta vez, enquanto ele faz seu sbrkdiscurso retórico, ele recebe um ENOMEMe seu código tem que lidar com um caminho infeliz. Como reage? Como dança nesse cenário?

    Ou monte um pendrive, mkswape swaponno suporte USB, e aumente vm.min_free_kbytespara forçar o kernel a ir ainda mais para esse pendrive. Execute novamente seu programa. Como seu aplicativo está se comportando agora com a VM de mallocação lenta?

    Que tal fazer todos os itens acima enquanto seu aplicativo está em execução? Como ele se comporta quando está em execução e começa a experimentar condições OOM?

    Não há fim para as maneiras de torturar um sistema com pouca RAM real livre, ajustando seu subsistema de troca ao vivo. E ao contrário de cgroups ou rusage, você não precisa encerrar seu processo para alterar a RAM virtual disponível para ele.

    Você pode testar esses tipos de abusos de memória, usando mocks para simular ENOMEMou desacelerar brk, e isso é apropriado porque é estável. Mas nada supera o exercício ao vivo em ambientes com pouca memória para minerar o ouro de processos estocásticos. Swap permite que um testador ajuste os recursos e características de memória do kernel em tempo real, facilmente, de uma maneira que seja adequadamente semelhante ao mundo real de pouca memória. Adicionar ou remover pentes de RAM não fornece esse valor.

    • 10
  6. Alan
    2019-12-11T15:21:15+08:002019-12-11T15:21:15+08:00

    Este é um caso um pouco de nicho, e é certo que você pode adicionar mais memória RAM, mas ...

    Todo mundo parece estar assumindo que swap significa um armazenamento físico não volátil, como um disco rígido ou unidade flash. A troca é mais um processo do que um local físico.

    Considere as seguintes travessuras estranhas:

    1. Eu tenho um dispositivo com 32 GB de RAM e nenhum outro armazenamento.
    2. Eu preciso processar 42 GB de dados.
    3. Felizmente, esses dados estão em bons pedaços separados e altamente compressíveis (talvez algo como uma série temporal que é principalmente estática), e eu não preciso acessá-los de uma só vez, então ...
    4. Eu uso o zram para configurar uma partição de troca de memória compactada, o que me permite paginar a maior parte dela quando não a estou usando.
    5. Assim, deixando-me encaixar mais dados em minha memória limitada sem modificar meu código de programa.

    Um uso para swap (que está na RAM), que é mais do que apenas o que você obtém da RAM simples (sem uma partição swap).

    Embora, sim, você poderia tecnicamente apenas adicionar mais memória RAM; esse tipo de estranheza significaria que não importa quanta memória RAM você adicionasse, você sempre poderia disputar um pouco mais de espaço (desde que você conheça seus dados / o que for adequado).

    • 7
  7. LawrenceC
    2019-12-12T14:17:07+08:002019-12-12T14:17:07+08:00

    O que pode ser feito com o swap que também não seria feito adicionando RAM?

    A hibernação requer um arquivo de troca, mesmo que a troca não seja usada de outra forma.

    Fora isso, nada. Swap é um bom paliativo se

    • A RAM é muito cara ou limitada em comparação com o espaço em disco

    • O sistema é um sistema de uso geral sob o controle de 1 usuário que pode experimentar software e/ou cargas de trabalho imprevisíveis de tempos em tempos.

    • Se os cenários OOM forem possíveis e a paginação no disco for preferível ao travamento total dos programas.

    O que especificamente pode fazer a troca que a RAM não pode

    Duas coisas:

    A. Esteja lá quando a RAM estiver cheia.

    B. Mantenha as páginas de memória que não estão sendo usadas pelos processos em um determinado momento (porque estão bloqueadas em alguma condição) para permitir que a RAM seja usada para outra coisa.

    Se você tiver RAM suficiente para satisfazer qualquer solicitação de memória de todos os processos que serão executados simultaneamente, ou não se importar com erros OOM, A pode ser ignorado.

    O Linux usa RAM livre para armazenar em cache leituras e gravações de dispositivos de bloco, mas não precisa. A RAM é mais rápida que os dispositivos de bloco. Permitir que o Linux faça a paginação de coisas que os processos não estão usando para trocar permitirá que mais RAM seja usada para armazenar em cache as leituras do dispositivo de bloco. Se você não se importa com a velocidade do seu acesso ao dispositivo de bloco, que pode ser aplicado em ambientes incorporados como roteadores, etc., B pode ser ignorado (e nessas situações você não se importa com a hibernação).

    Swap não é um cache de disco - é possível que as páginas que estão em swap não sejam associadas a um arquivo de disco ou nunca tenham a intenção de serem gravadas em disco.

    • 4
  8. Stilez
    2019-12-13T21:02:34+08:002019-12-13T21:02:34+08:00

    Você já tem a resposta, mas sua pergunta mostra que você ainda não aprecia essa resposta.

    A resposta simples é: "Seja grande e barato (e talvez flexível)". Você já sabe disso, mas também descarta. Você não deveria.

    RAM não é "um par de dólares extras". Gigabyte por gigabyte, por exemplo, RAM ECC no meu servidor custa £ 130 por 32 GB (RDIMM 2400 DDR4), ou cerca de £ 4/GB. O SDD que estou usando para troca custa cerca de £ 100-130 por TERABYTE, ou cerca de £ 0,11/GB (Micron/Intel com proteção contra perda de energia). Os farms de servidores podem ocupar de centenas a milhares (em muitos casos) de GB por servidor, com centenas de servidores.

    A RAM também consome mais energia - um processo ocioso na RAM requer alimentação e atualização da RAM enquanto no SSD o uso de energia é muito menor. Em pequenos dispositivos incorporados, isso pode ser um problema por si só.

    O nivelamento de desgaste também é um problema menor do que você pensa na maioria dos dispositivos. Os SSDs duram mais do que as pessoas pensam, e os dispositivos projetados comercialmente escolherão um SSD para corresponder ao uso esperado, não os extremamente pobres em algumas placas.

    Por último, o Swap é mais flexível. Se sua tarefa normalmente usa 32 GB, mas brevemente e raramente algum aspecto dela precisa de 64 GB, com RAM você deve fornecer 64 independentemente. Com swap funciona no 32 e usa brevemente, depois descarta, troca, para os tempos excepcionais.

    Tl;Dr - você está perdendo completamente o ponto econômico.

    • 3
  9. Johan Myréen
    2019-12-10T22:48:38+08:002019-12-10T22:48:38+08:00

    A troca pode economizar seu dinheiro. A RAM é mais cara do que a quantidade correspondente de disco. O objetivo é otimizar a relação custo-benefício. Claro, RAM é sempre melhor do que swap, mas vai custar mais caro e vai para o lixo se você não usar tudo.

    A utilidade do swap também depende muito do tipo de carga de trabalho. Por exemplo, se você tiver muitos aplicativos abertos, mas usar ativamente apenas um deles, a RAM usada pelos programas inativos poderá ser liberada e usada pelo processo ativo. Por outro lado, usar um único programa com uso intensivo de memória que precisa de mais memória do que a quantidade disponível de RAM é um uso não ideal da troca.

    • 2
  10. juhist
    2019-12-11T09:43:45+08:002019-12-11T09:43:45+08:00
    ... Nesse caso, a troca irá desgastar a memória flash fazendo com que ela falhe anos antes do fim da garantia. Onde dobrar a RAM é um par de dólares extras no dispositivo.

    Acho que você vai descobrir que isso é falso. Em primeiro lugar, alguns dólares extras não dobrarão nenhuma quantidade razoável de RAM. Em segundo lugar, o flash é mais barato que a RAM. Em terceiro lugar, a troca é usada para dados inativos. Se você tiver uma situação em que a partição de troca é continuamente gravada, você tem muito pouca RAM e, sem troca, algum processo importante teria travado.

    Além disso, as gravações aleatórias em um SSD completo (o que faz com que falhem cedo) são lentas. Eles são muito, muito lentos mesmo. Seu SSD não morrerá prematuramente se o seu computador não ficar lento pela troca.

    É muito melhor que seu computador fique muito lento quando estiver ficando sem memória do que algum processo importante travar.

    Agora, o que você pode fazer com a troca que você não pode fazer com a RAM?

    • Hibernação
    • Despejos de memória do kernel
    • Espaço de endereço virtual barato (muito mais barato que RAM)
    • Desativando o overcommit
    • 2

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

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

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

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +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

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