Para Como mover os dados do meu servidor web para um disco RAM (tmpfs)? (experimento) , formulei algumas idéias, notas e outras coisas. Preciso saber se toda a minha ideia é sólida e sólida e se tal experimento é factível .
Automatize a criação de um
tmpfs
disco RAM suficientemente grande ( ) no momento da inicialização.Com o mesmo script, copie os dados www, ajuste a propriedade, quase tudo.
Os registros permaneceriam no meu SSD NVMe do tipo PCIe 3.0 x4:
# nvme list Node SN Model Namespace Usage Format FW Rev --------------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- -------- /dev/nvme0n1 < SN REDACTED > Samsung SSD 970 EVO Plus 2TB 1 360.10 GB / 2.00 TB 512 B + 0 B 2B2QEXM7
O laptop tem 32 GB de RAM (DDR4 2.400 MHz, canal duplo) e sinto que não é usado.
O laptop tem bateria funcional por alguns minutos, mas ainda assim.
O laptop está conectado a um no-break mais antigo, talvez seja necessário trocar a bateria (nota para mim).
Meu uplink é de (quase) 100 Mbits/s. https://www.speedtest.net/result/16116969035
Raramente reinicio este laptop, ele é baseado em Intel de 7ª geração e possui conjunto de instruções AES-NI.
Eu faço um instantâneo semanalmente com o aplicativo Timeshift-GTK. Clones mensais e completos de ambos os SSDs.
O sistema operacional é Linux Mint 21.3 Cinnamon de 64 bits baseado no Ubuntu 22.04. O kernel atual é da versão 6.5.0-27.
Isto é sobre minhas anotações deste experimento, interessante, se você me perguntar.
Acredito que a única parte mais difícil para mim seria escrever esse script de shell para automatizá-lo. Ao mesmo tempo interessante, poderia ser. Não sei por onde começar e o que não esquecer. Obrigado por todas e quaisquer dicas.
sim, isso parece trivial. Abordando as coisas que você mencionou que precisa fazer:
Isso pode ser feito como uma entrada em /etc/fstab, por exemplo,
configura um ramdisk de 4 GB (máximo, não sei por que você deseja especificar isso, mas você pediu). O Tmpfs sempre usa apenas a RAM necessária para armazenar os arquivos nele e você tem um tamanho definido. De qualquer forma, sua escolha!
noauto
é opcional, mas como só precisamos do ramdisk para iniciar o servidor web, podemos esperar a configuração do ram disk até então - um sistema init sensato entenderá as dependências entre montagens e unidades de inicialização se informado sobre isso, e iniciará "da maneira mais ordem conveniente". Em outras palavras, não vamos atrapalhar a inicialização inicial configurando um disco RAM que só precisaremos na inicialização tardia.Claro, você pode ter um script executado na inicialização que faz isso; não há necessidade de ser complicado sobre isso, um
cp -ar /var/www/disk/* /var/www/ramdisk/
serviria. (supondo que você configure as coisas com as permissões corretas em sua fonte). Alternativamente, você pode descompactar um arquivo tar ou squashfs em seu destino. Muitas coisas preservam propriedades e permissões no Linux!Você deseja que seu "script de cópia de dados" faça parte do seu sistema de inicialização, de modo que sempre seja executado antes do início do servidor web. No systemd, isso é especialmente fácil, você vai querer colocar um arquivo "setup-ramdisk.service" em /etc/systemd/system/ e colocar algo assim nele,
Então, isso é bastante fácil;
systemctl enable --now setup-ramdisk
para habilitá-lo (para inicializações futuras) e executá-lo agora mesmo. Você também pode modificar o arquivo .service do seu servidor web (provavelmente em /usr/lib/systemd/system/) para listarWants=setup-ramdisk.service
eAfter=setup-ramdisk.service
No entanto,
Não. Por dois motivos:
bonitinho. Seu SSD é muito mais rápido que isso, os tempos de acesso aleatório devem ser menores que o jitter no estabelecimento da conexão TCP e você tem bastante RAM para armazenar em cache o acesso ao SSD: mesmo na primeira solicitação de um arquivo, a parte que solicita o arquivo não será capaz para notar a diferença entre ler do disco RAM ou diretamente do SSD, e contanto que você não use a RAM para outra coisa, esse arquivo permanecerá armazenado em cache nos buffers de RAM do Linux, de qualquer maneira. Seu disco RAM não consegue nada, além de manter a RAM ocupada com dados que você talvez nem precise .
Então, não vejo nenhum sentido neste experimento. Seu gargalo é claramente sua rede, não seu armazenamento. E mesmo que não fosse esse o caso, você tem bastante RAM; portanto, o buffer do sistema de arquivos e do dispositivo de bloco fará com que a segunda vez que um arquivo seja acessado tão rápido como se o arquivo já estivesse no disco RAM, a menos que algum outro software precisasse da RAM e o arquivo fosse expulso desses buffers para obter RAM livre. Mas nesse caso seria piorse o seu servidor tivesse os arquivos em um disco RAM: essa demanda de RAM falharia (e algo travaria) ou algo seria eliminado pelo assassino por falta de memória (portanto, seu sistema não seria confiável) ou aquela RAM solicitação empurraria outro software e seus dados na RAM para o espaço de troca – com efeitos catastróficos para o desempenho, especialmente se isso afetasse o servidor web – e possivelmente afetaria o servidor web, já que isso não teria servido o arquivo em alguns casos. tempo para que seja considerado para expulsão.
Então tudo em tudo: