Srandom, um gerador de números pseudo aleatórios ultra rápido

Problema

O kernel linux possui um dispositivo para geração de números pseudo aleatórios, o /dev/urandom. Esse dispositivo usa criptografia ChaCha20 para gerar o fluxo de dados, que fornece uma boa qualidade de aleatoridade. O problema é que o algoritmo é lento para algumas aplicações. Nos meus testes consegui velocidade máxima de 512MB/s. Eu gostaria de testar um ssd nvme pci-express v 3.0 x4, que em teoria pode transferir dado a 4GB/s.

asdf@asdfPC:~$ dd if=/dev/urandom of=/dev/null bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1,0 GB, 1000 MiB) copied, 2,50786 s, 418 MB/s

Solução proposta: módulo srandom

Após uma breve pesquisa, encontrei o módulo (fora da árvore do kernel) srandom. É um módulo bastante simples e está configurado no modo de ultra velocidade, onde a expansão do fluxo acontece com algoritmos XOR, muito mais rápido. Acaba caindo a qualidade da aleatoriedade, mas está ótimo para escrever “lixo” no disco.

Instalação

Pra quem já é programador é bem simples. Clonar o repositório, compilar o módulo com make e inserir o módulo com insmod. Pra quem não é programador, vai o passo a passo.

Clonar o repositório

Dá para baixar o código fonte direto do github (em Releases) e extrair numa pasta, é o método mais fácil.

Compilar o código

Abra uma janela de terminal e vá ao diretório onde estão os arquivos. Digite make e o programa deve ser compilado. No meu teste no linux Mint os pacotes ‘build-essential’ e ‘linux-headers’ já estavam instalados, então tudo funcionou de primeira. Depois do comando realizado, deve surgir um arquivo nomeado ‘srandom.ko’. Verifique com ls -la

Inserir o módulo manualmente

Para adicionar o módulo ao kernel atual, sem precisar instalá-lo, use o comando sudo insmod ./srandom.ko
Uma vez inserido, verifique que ele está operacional com cat /proc/srandom e deve ter uma saída com a informação do módulo.

Utilização

A utilização é simples, é somente usar o fluxo de dados do dispositivo /dev/srandom para sua aplicação. Aqui percebi que o dispositivo fica com acesso de leitura somente para o super usuário. Se quiser usar nas aplicações como usuário regular, altere as permissões do dispositivo com sudo chmod a+r /dev/srandom

asdf@asdfPC:~/Downloads/srandom-master$ sudo chmod a+r /dev/srandom
asdf@asdfPC:~/Downloads/srandom-master$ dd if=/dev/srandom of=/dev/null bs=1M count=1000
1000+0 records in
1000+0 records out
1048576000 bytes (1,0 GB, 1000 MiB) copied, 0,757149 s, 1,4 GB/s

Após terminar a utilização, descarregue o módulo com sudo rmmod srandom

Conclusão

O módulo funciona bem para uso esporádico. No caso da minha VM com o Mint, a velocidade de dados aleatórios subiu bastante e na máquina real a velocidade chegou a 2,1GB/s. Não chegou à velocidade que eu queria, mas já é suficiente para torturar o disco com velocidades acima de um disco SATA. O carregamento do módulo manual é simples e deve atender muitos casos, porém caso necessite no início do sistema, instale-o com sudo make install

3 curtidas