Atualmente estou fazendo um projeto de ensino médio estudando chaves RSA para
melhor compreendê-los teoricamente e praticamente. Uma parte do
projeto consiste em um experimento, e eu escolho testar e ver quão grande
a carga de trabalho será para a CPU ao gerar chaves RSA de diferentes
comprimento. Eu também gostaria de salvar o tempo como um ponto de dados, se eu precisar
chegar a uma conclusão.
A máquina está executando o Ubuntu 16.04 e os aplicativos são baixados dos repositórios padrão.
O plano é usar o GnuPG para gerar chaves RSA de comprimento diferente (1024,
2048, e 4096) e GNU Time para obter a carga de trabalho da CPU e o tempo para
executar o processo. O processo será automatizado com um script python e será parecido com isto:
-
Para tamanho em [1024, 2048, 4096]:
1.1. Por X vezes:
1.1.1. Execute o comando Gnu PG e monitore os recursos do sistema
1.1.2. Escreva o uso de recursos do sistema para arquivar
Posteriormente, planejarei alguns gráficos para ver se minha hipótese está correta.
Mas eu tenho algumas perguntas sobre a implementação do meu teste GnuPG.
Uma explicação de como minha implementação virá depois das perguntas.
Minhas perguntas são:
- Essa configuração faz o que eu quero fazer?
- Posso desativar a criação automática de certificados de revogação?
- Por que demora muito mais para gerar algumas chaves?
- Por que o GnuPG dá a resposta que demorou 0 CPU-segundos em
userspace para a criação das chaves? Isso é feito em outro processo?
- Por que o parâmetro de carga de trabalho da CPU mostra apenas um valor (0 < CPU) quando
Demorou menos de um segundo (relógio de parede > 1) para criar as chaves?
Lendo o manual parece que a maneira mais simples de gerar as chaves
está com a opção --batch
ativada. Eu configurei as opções em um arquivo
com as seguintes instruções:
# Text syntax in this file
#%dry-run
%echo Generating RSA key...
# Don't ask after passphrase
%no-protection
Key-type: RSA
Key-Length: 1024
Name-Real: Real Name
Name-Email: [email protected]
Expire-Date: 0
# Generate RSA key
%commit
%echo Done!
O comando que executa este arquivo tem duas partes, a parte do Gnu Time e
a parte do GnuPG. O comando GNU Time tem a seguinte aparência:
$ time --format="Wall clock: %e[s], CPU (userspace): %U[s], CPU (workload): %P%"
E o comando GnuPG é o seguinte.
$ gpg2 --gen-key --homedir=./rsa-keys --batch [filename]
O comando que eu executo na minha shell (fish shell se é importante) é
o seguinte (GNU Time + GnuPG):
$ time --format="Wall clock: %e[s], CPU (userspace): %U[s], CPU (workload): %P%" gpg2 --gen-key --homedir=./rsa-keys --batch [filename]
Saída do comando:
Wall clock: 36.83[s], CPU (userspace): 0.00[s], CPU (workload): 0%
Wall clock: 0.04[s], CPU (userspace): 0.00[s], CPU (workload): 8%
Wall clock: 4.76[s], CPU (userspace): 0.00[s], CPU (workload): 0%
Wall clock: 72.39[s], CPU (userspace): 0.00[s], CPU (workload): 0%
Wall clock: 57.52[s], CPU (userspace): 0.00[s], CPU (workload): 0%
Wall clock: 84.71[s], CPU (userspace): 0.00[s], CPU (workload): 0%
Wall clock: 63.32[s], CPU (userspace): 0.00[s], CPU (workload): 0%
Wall clock: 51.10[s], CPU (userspace): 0.00[s], CPU (workload): 0%
Wall clock: 47.58[s], CPU (userspace): 0.00[s], CPU (workload): 0%
Wall clock: 64.72[s], CPU (userspace): 0.00[s], CPU (workload): 0%
Wall clock: 0.05[s], CPU (userspace): 0.00[s], CPU (workload): 6%
Wall clock: 0.03[s], CPU (userspace): 0.00[s], CPU (workload): 11%
Wall clock: 29.62[s], CPU (userspace): 0.00[s], CPU (workload): 0%
Wall clock: 55.02[s], CPU (userspace): 0.00[s], CPU (workload): 0%
Wall clock: 36.08[s], CPU (userspace): 0.00[s], CPU (workload): 0%
Wall clock: 42.92[s], CPU (userspace): 0.00[s], CPU (workload): 0%
Wall clock: 40.41[s], CPU (userspace): 0.00[s], CPU (workload): 0%
Wall clock: 204.36[s], CPU (userspace): 0.00[s], CPU (workload): 0%
Wall clock: 246.42[s], CPU (userspace): 0.00[s], CPU (workload): 0%
Wall clock: 51.50[s], CPU (userspace): 0.00[s], CPU (workload): 0%