trocar partição vs arquivo por desempenho?

62

O que é melhor para o desempenho? Uma partição mais próxima da parte interna do disco terá tempos de acesso mais lentos, e devemos esperar que a unidade alterne entre o SO e as partições de swap.

Por outro lado, uma partição swap ignora todo o sistema de arquivos, permitindo gravações no disco diretamente, o que pode ser mais rápido que um arquivo.

Qual é a troca de desempenho?

Quanto é que ter um arquivo de troca de tamanho fixo faz diferença?

É possível que demore mais para mudar para a partição de troca, mas o desempenho será melhor enquanto estiver na partição de troca que, se tivesse sido um arquivo de troca?

Bill Gray
fonte
Apenas por curiosidade. Você pode fornecer detalhes do sistema, como versão do kernel, RAM, partição e esquema do sistema de arquivos?
Viky
Em qual sistema operacional você está procurando?
Mathieu Chateau
4
Para informações sobre Linux, consulte lkml.org/lkml/2005/7/7/326
Adam Monsen
Alguma atualização para as respostas da pergunta?
Kokbira

Respostas:

29
  1. Nos discos rígidos, a taxa de transferência e a busca geralmente são mais rápidas no início do disco, porque esses dados são armazenados mais perto da área externa do disco, que possui mais setores por cilindro. Assim, a criação da troca no início do disco pode melhorar o desempenho.

  2. Para um kernel Linux 2.6, não há diferença de desempenho entre uma partição de troca e um arquivo de troca não fragmentado . Quando uma partição / arquivo de troca é ativada pelo swapon, o kernel 2.6 encontra em quais blocos de disco o arquivo de troca está armazenado , de modo que quando chega a hora de trocar, ele não precisa lidar com o sistema de arquivos.

Portanto, se o arquivo de troca não estiver fragmentado, é exatamente como se houvesse uma partição de troca no mesmo local. Em outras palavras, você obteria desempenho idêntico se usasse uma partição de swap bruta ou a formatasse com um sistema de arquivos e, em seguida, criasse um arquivo de swap que ocupasse todo o espaço, pois de qualquer maneira nesse disco há uma região contígua usada para a troca, qual o kernel usa diretamente.

Portanto, se alguém criar o arquivo de troca quando o sistema de arquivos estiver atualizado (garantindo assim que não seja fragmentado e no início do volume), o desempenho deverá ser idêntico a ter uma partição de troca imediatamente antes do volume. Além disso, se alguém criar o swapfile, digamos no meio do volume, com arquivos de ambos os lados, poderá obter um desempenho melhor, pois há menos procura de troca.

No Linux, se o arquivo de troca for criado sem fragmentação e nunca expandido, ele não poderá se fragmentar, pelo menos com sistemas de arquivos normais como ext3 / 4. Ele sempre usará os mesmos blocos de disco, que são contíguos.

Concluo que o único benefício de uma partição de troca dedicada é a desfragmentação garantida quando você precisar expandi-la; se sua troca nunca for expandida, um arquivo criado em um sistema de arquivos novo não precisará de uma partição extra.

Shay
fonte
5
A única coisa a acrescentar aqui é que, se sua máquina estiver configurada para "suspender no disco", o que realmente está acontecendo é que as coisas na memória são gravadas para troca. Para que isso funcione, o swap deve estar em sua própria partição, pois o swap não pode estar em um sistema de arquivos ativo para que isso ocorra. Portanto, se você tiver um servidor, provavelmente não usará esse recurso e poderá usar felizmente um arquivo de troca. Se você possui um laptop, provavelmente deseja uma partição de swap para poder "suspender no arquivo" para hibernação.
Nathan S. Watson-Haigh
@ NathanS.Watson-Haigh O que acontece com os dados que já estão em troca? Não pode ser jogado fora.
XTF
3
@ NathanS.Watson-Haigh Você pode vincular uma fonte? O Ubuntu 17.04 usa um arquivo de troca por padrão. Seria surpreendente se não pudesse "suspender para o disco".
Matthias Weiler
22

Na verdade, não faz muita diferença, desde que você não use arquivos esparsos .

A criação de um arquivo "normal" com o dd alocará o arquivo (se possível) em uma única execução, enquanto a criação de um arquivo esparso informará que você tem um arquivo de 10 GB por aí, mas não está usando todo o espaço. Não tenho certeza se o mkswap não alocará o espaço de qualquer maneira, mas normalmente um arquivo de troca aumentará com o tempo e, portanto, não alocará um setor contínuo (como parte do disco), mas alocará os blocos necessários, o que leva a fragmentação ao longo do tempo (é claro, dependendo do uso do disco)

Internamente, o kernel do Linux acessa os blocos subjacentes de um arquivo de swap mais ou menos diretamente - não consigo encontrar o link no momento, o que acontece nos bastidores, você precisa confiar em mim, a menos que alguém ache algo mais oficial. Tudo o que posso apresentar agora é:

isso tudo se aplica apenas à linha 2.6 dos kernels do Linux.

Se você deseja um desempenho ideal (e o que é isso, realmente? ... a troca é lenta, ponto final. Aumente a RAM para não trocar pelo melhor desempenho), você deseja usar uma partição.

serverhorror
fonte
18
As versões modernas do swapon se recusam a trabalhar com arquivos esparsos formatados como swap, alegando que o arquivo possui falhas.
Tim Post
3

Esta é uma pergunta interessante e tenho lido muito sobre o mesmo. Geralmente, uma partição de troca é melhor que um arquivo devido ao sistema de arquivos subjacente. Mas se você sempre precisa aumentar o tamanho da sua troca, o arquivo é uma opção melhor. Até o kernel 2.4, considerou-se que uma partição swap é mais rápida que um arquivo, mas agora com as melhorias do kernel 2.6, os desempenhos são quase os mesmos.

Algo que eu encontrei na internet também.

http://www.go2linux.org/swap-file-vs-swap-partition

e

http://www.sunmanagers.org/pipermail/summaries/2005-November/006913.html

Viky
fonte
Nenhum desses links realmente explica as razões por trás de suas decisões.
Bill Gray
O raciocínio é que o arquivo terá sua sobrecarga de sistema de arquivos subjacente. Se você criar um arquivo, ele poderá ser fragmentado. e, dependendo do arquivo que está sendo armazenado em cache no swap, as leituras podem ser lentas em comparação com uma partição inteira, que é um sistema de arquivos swap por si só.
Viky
Tentei cavar mais e encontrei artigo relativo no wiki. Apenas para ajudá-lo, existem alguns parâmetros de ajuste de troca que você pode verificar. Verifique também a explicação em implementação para linux. Pode ajudar. en.wikipedia.org/wiki/Paging
Viky 15/06/09
Seguiu uma das citações no link wiki mencionado acima e encontrou um tópico interessante sobre o mesmo problema. Pode querer verificar isso. lkml.org/lkml/2005/6/28/427
Viky
Mencionei a sobrecarga do sistema de arquivos na minha pergunta, mas não é tanto um bloco de desempenho quanto ter uma partição perto do disco interno. Esse atraso seria grande que a sobrecarga do sistema de arquivos.
Bill Gray
2

Acho que no momento em que estamos, a menos que você esteja executando um laptop com uma configuração que grava os dados no swap quando ele suspende / dorme, o swap deve realmente ser considerado "último recurso". Sua melhor aposta é colocar RAM suficiente em uma caixa para que nunca pagine no disco.

Dito isto, uma partição é provavelmente a melhor maneira, em termos de desempenho, embora um arquivo seja mais flexível. Apenas verifique se está em um eixo de 7200 + RPM.

Matt Simmons
fonte
11
Por que uma partição seria melhor em termos de desempenho, quando os tempos de acesso podem ser mais um fator de atraso?
Bill Gray
5
Como o uso de um arquivo pode exigir mais movimentos da cabeça, porque ao encontrar a página para ler / gravar os dados podem estar em qualquer lugar no sistema de arquivos, é necessário pesquisar nas estruturas fs, enquanto que com uma partição de troca, cada página fica em um local conhecido dentro do sistema de arquivos. partição. Isso torna o tempo de acesso (ao contrário da taxa de transferência em massa) um fator diferenciador.
David Spillett
2
"Não configure a troca a menos que você precise hibernar" é uma visão controversa. Às vezes, quando o sistema está com pouca troca de memória real, pode permitir a recuperação do sistema. Não ter swap pode impedi-lo de executar programas que fazem grandes alocações de memória, mas que na verdade não afetam a maioria (por exemplo, certas ferramentas de depuração). Às vezes, uma região de memória ocupada, porém inativa, é melhor usada como cache de disco e essa troca só pode ser feita se houver troca disponível. Consulte unix.stackexchange.com/questions/2658/… para discussão.
Anon
11
O que @Anon disse. O Chrome é um notório porco da memória e, mesmo com menos de 100 guias, meu laptop de 16 GB não responde por vários minutos quando a utilização da memória é de cerca de 90% e não há arquivo de troca. Surpreendentemente, o Ubuntu não possui um mecanismo interno para avisar o usuário que o sistema operacional está ficando sem memória .
Dan Dascalescu
2

O pensamento em nosso trabalho é que, como um arquivo Swap pode se fragmentar e a fragmentação diminui o acesso à troca, uma partição é uma abordagem melhor. Obviamente, definir um arquivo de troca com tamanho estático faz a mesma coisa, mas isso parece subjetivamente mais limpo.

Essa abordagem é a única maneira verdadeira? Provavelmente não, pois a prática foi estabelecida há quase 10 anos. A única grande mudança na tecnologia de drives nos anos seguintes é a complexidade dos controladores RAID que usamos (ainda não somos ricos o suficiente para SSDs). O aumento no tamanho da unidade significa que a partição de troca que criamos está mais próxima do início da unidade do que era quando as unidades de 18 GB eram fornecidas como padrão, portanto, as velocidades de troca são ainda mais rápidas do que nos dias antigos.

Obviamente, em nossos sistemas Windows baseados em ESX, a posição do arquivo de troca é completamente, totalmente discutível. Existem tantas camadas de virtualização entre o arquivo de troca e os pratos físicos de disco que isso simplesmente não importa. Mas mantemos em uma partição separada, porque esse é apenas o padrão.

sysadmin1138
fonte
4
Um arquivo de troca não se fragmenta, pois o kernel usa uma abordagem direta de mmap e nunca aumenta ou diminui o arquivo. +1 no seu comentário sobre virtualização: geralmente não importa.
parasietje
0

O uso de um arquivo de troca pode usar um pouco de memória extra para a conversão de arquivo em memória. Estamos falando de menos de 1 MB de memória por troca de 1 GB. O cache do sistema de arquivos NÃO armazena em cache os dados trocados, apenas os dados organizacionais, que devem ser a maioria dos requisitos de memória extra.

Além disso, duvido que você perderá um desempenho razoável, exceto talvez uma vez em mil vezes uma única busca adicional na cabeça.

Curiosamente, o uso do zswap em conjunto com um arquivo de swap em expansão dinâmica resulta em uma velocidade impressionante nas operações de swap a um custo muito baixo enquanto não é utilizado.

Crass Spektakel
fonte
11
Você pode fornecer algum tipo de justificativa para suas reivindicações? Isso parece bastante anedótico.
de Austin