Esta Resposta é, antes, uma Wiki que deve ser lida e entendida antes de usar Preload ou Prelink.
Precisamos primeiro entender como os aplicativos são iniciados no Linux, não vou comentar sobre o Windows. O Linux é seguro por design. Então, o que realmente queremos dizer com isso?
Processo de lançamento de aplicativo
Os programas Linux normalmente consistem em um arquivo executável binário que se refere a várias bibliotecas compartilhadas. Essas bibliotecas são carregadas na memória uma vez e compartilhadas por vários executáveis. Para que isso aconteça, o vinculador dinâmico (ou seja, ld.so) precisa alterar o binário na memória de forma que qualquer endereço de objetos de biblioteca aponte para o local correto na memória. Para aplicativos com muitas bibliotecas compartilhadas - programas GUI, por exemplo - esse processo pode levar algum tempo. Para a maioria dos pequenos programas, esta ligação dinâmica é muito rápida. Mas quando programas maiores são lançados, pode levar tempo. Quero dizer um tempo considerável.
O Linux usa o ASLR para randomizar os endereços na memória. Uma das ideias por trás da randomização de layout do espaço de endereçamento (ASLR) é randomizar esses locais cada vez que um programa é executado - ou carregado na biblioteca - para que programas mal-intencionados não possam prever de maneira fácil e reproduzível endereços
Vamos entender com o Context o que é o preloading e o que é prelinknig e como eles ajudam a reduzir o tempo de inicialização dos aplicativos.
Primeiro, vamos dar uma olhada no Pré-carregamento.
Pré-carregamento é a ação de colocar e manter arquivos de destino na RAM. O benefício é que os aplicativos pré-carregados são iniciados mais rapidamente porque a leitura da RAM é sempre mais rápida do que no disco rígido. No entanto, parte da sua RAM será dedicada a essa tarefa, mas não mais do que se você mantivesse o aplicativo aberto. Portanto, o pré-carregamento é melhor usado com aplicativos grandes e usados com frequência, como o Firefox e o LibreOffice.
Pré-carga é um demônio adaptativo e pré-lido. Ele observa os aplicativos Inicia por um período de tempo. Compreende o comportamento de inicialização do aplicativo. Ele coleta as informações e, com base nas informações, começa a pré-carregar as bibliotecas exigidas pelos programas na RAM do dispositivo. Assim, ao longo de um período de tempo, os tempos de lançamento do Aplicativo reduzem consideravelmente e os aplicativos são iniciados mais rapidamente.
Como o Pré-carregamento requer memória para armazenar o código do programa, o sistema deve, em qualquer caso, ter mais de 1GB de memória.
O aumento na velocidade pode ser de até 55%. No entanto, isso não é detectado logo após a instalação. A pré-carga requer alguns dias ou uma semana ou duas até que uma estatística confiável seja criada. Essa estatística usa Preload para carregar o código dos programas correspondentes na memória.
Agora vamos dar uma olhada no Prelinking
Na maioria dos sistemas, as bibliotecas não são alteradas com muita frequência e, quando um programa é executado, as operações realizadas para vincular o programa são as mesmas todas as vezes. O Prelink aproveita isso realizando a vinculação e armazenando-o no executável, com efeito, pré-preparando-o.
Idealmente, ele anula a Randomização do Addreses, o que significa que é fácil predicar onde as bibliotecas são armazenadas, portanto, resulta em acesso rápido às bibliotecas. Isso, por sua vez, reduz consideravelmente o tempo de lançamento.
A ideia por trás da pré-vinculação é bastante simples: reduzir a quantidade de tempo que o vinculador dinâmico precisa gastar para fazer essas relocações de endereço, fazendo isso com antecedência e armazenando os resultados. O programa prelink processa binários ELF e bibliotecas compartilhadas da mesma maneira que ld.so faria, e então adiciona seções ELF especiais aos arquivos que descrevem as realocações. Quando o ld.so carrega um binário ou biblioteca pré-vinculada, ele verifica essas seções e, se as bibliotecas forem carregadas no local esperado e a biblioteca não tiver sido alterada, ela poderá executar seu trabalho muito mais rapidamente.
O que significa que em um sistema que não muda muito. As bibliotecas permanecem as mesmas por um longo tempo, algo como um Ubuntu LTS / RHEL / CentOS / Debian basicamente distros de lançamento fixo, o Prelink rodará melhor e fornecerá ótimos resultados.
Existe apenas um Caviat.
O pré-link precisa ser agendado, ele precisa ser executado depois que as bibliotecas / programas tiverem sido atualizados desde que as bibliotecas estão mudando. Pode-se conseguir isso usando um simples trabalho Cron ou pode executá-lo manualmente de vez em quando.
Portanto, poderíamos combinar tecnicamente Preload e Prelink. No entanto prelink ainda é como um Hack, mas sua milhagem pode variar. Eu daria um tiro de qualquer maneira. Se eu estivesse em algo como Debian ou CentOS, eu usaria o Preload e o Prelink Both.
Referências para mais informações.