Reduzindo a memória do tempo de execução no Windows 8

Criando o Windows 8

Nos bastidores com a equipe de engenharia do Windows

Reduzindo a memória do tempo de execução no Windows 8

Rate This
  • Comments 5

Elementos básicos como o uso da memória representam um dos princípios-chave da engenharia do Windows 8. Na criação do Windows 8, decidimos reduzir de forma significativa os requisitos gerais de memória do tempo de execução do sistema principal. Isso sempre é bom para todo mundo, especialmente em um mundo em que as pessoas desejam executar cada vez mais aplicativos ao mesmo tempo ou em sistemas com apenas 1 ou 2 GB de memória. O laptop de que falamos nesta postagem é exatamente o mesmo que abordamos na PDC do Windows 7 em 2008: um netbook baseado no ATOM, de primeira geração, de prateleira e com 1 GB de memória. Esta postagem detalha os nossos esforços relacionados à utilização da memória e foi escrito por Bill Karagounis, o gerente de programas de grupo da nossa equipe de desempenho. --Steven

O uso da memória do tempo de execução do Windows 8 é um fator importante na determinação dos requisitos do sistema do Windows 8, bem como a ampliação dos tipos de dispositivos que hospedarão o Windows 8. Como é sabido, vamos oferecer a experiência completa do Windows 8 em dispositivos com base no SoC caracterizados pelo baixo consumo de energia. Isso torna ainda mais importante a disponibilidade de bastante memória para vários aplicativos em execução simultânea e o suporte à capacidade geral de resposta dos dispositivos.

Algo que talvez não seja óbvio é o fato de que minimizar o uso da memória em plataformas de baixo consumo de energia pode prolongar a vida útil da bateria. Como? Em qualquer PC, o consumo de energia pela RAM é constante. Se um SO usa muita memória, ele pode forçar os fabricantes de dispositivo a incluir mais RAM física. Quanto mais RAM você tiver, mais energia ela usará e menor será a vida útil da bateria. Ter uma RAM adicional em um dispositivo tablet pode, em alguns casos, diminuir o tempo que o tablet pode permanecer atualizado na sua mesinha de centro.

Metas quanto ao uso da memória

A nossa meta com o Windows 8 desde o início era manter os mesmos requisitos do sistema do Windows 7. Sabemos que, se melhorarmos ainda mais, haverá mais recursos para aplicativos, mesmo que mantenhamos os mesmos requisitos publicados. É engraçado quando pensamos no hardware mais popular de 2009 e como hoje é impossível encontrar módulos de memória de 256 MB. Quisemos garantir que as pessoas com o Windows 7 em execução tivessem a opção de atualizar seus computadores existentes para o Windows 8 e aproveitassem a funcionalidade que ele tem a oferecer. Também esperamos que muitos computadores anteriores ao Windows 7 possam executar o Windows 8 com base nas experiências que tivemos com computadores mais antigos mantidos de propósito na nossa infraestrutura de teste de desempenho.

Uma tarefa importante do Windows 8 era aumentar o espaço para novas funcionalidades, buscando, ao mesmo tempo, oportunidades de reduzir a memória consumida pelas funcionalidades existentes e pelo sistema todo. O Windows 8 está no caminho certo para atingir a meta estabelecida por nós.

Comparação do uso da memória pelo Gerenciador de tarefas

A maneira mais fácil de fazer uma comparação geral entre o uso da memória pelo Windows 8 e pelo Windows 7 é instalar os dois sistemas operacionais em um computador com 1 GB de RAM (requisito de RAM mínimo do SO) e observá-los depois de terem sido reinicializados várias vezes e permanecido ociosos por um período.

O Gerenciador de tarefas do Windows apresenta a exibição principal da memória do sistema por meio de sua estatística "Em Uso" (descrita em detalhes neste documento). Os gráficos abaixo comparam o consumo de memória no netbook de 3 anos de Steven que ele estava usando na //build/ recentemente, com o Windows 7 em execução no estado ocioso e depois com o mesmo computador executando o Windows 8.

Gerenciador de tarefas do Windows 7. Uso da CPU: 5%, Memória: 404 MBFigura 1 – Uso da memória no Windows 7 SP1

Gerenciador de tarefas do Windows 8. Uso da CPU: 1%, Memória: 281 MBFigura 2 – Uso da memória no Windows 8

O hardware específico que compõe um computador, o uso da memória por drivers e até mesmo o tempo de ativação podem causar variações, portanto os resultados sobre a memória variam em diferentes computadores (ou até o mesmo computador em horários diferentes). Como você pode observar, no entanto, o Windows 8 está se saindo bem em relação ao Windows 7.

Para se divertir mais com o computador de teste, vá para o gerenciador de dispositivos e desabilite o adaptador de vídeo (desative o driver de gráficos). Você nunca executaria o seu computador assim, mas dessa forma temos uma aproximação mais real do uso da memória do Windows em si. Com o driver de gráficos desabilitado, o computador acima consome 200 MB após um período de ociosidade.

OBSERVAÇÃO: no Windows 8, uma instalação limpa também contém a tecnologia estendida do Windows Defender, que, pela primeira vez, incorpora a funcionalidade antimalware completa – também otimizada para o uso de recursos e de memória, segundo o blog do Jason sobre proteção contra malware. (Essa funcionalidade não existe em uma instalação limpa do Windows 7, ao qual recomendamos a adição de um software de segurança).

Abrindo espaço no Windows 8

Fizemos centenas de alterações específicas para minimizar o uso da memória pelo SO no Windows 8. Vamos destacar algumas áreas específicas que resultaram em uma economia de memória substancial.

Combinação de memórias

Avaliando o conteúdo da RAM em um PC típico, várias partes da memória têm o mesmo conteúdo. As cópias redundantes de dados na RAM do sistema são uma oportunidade de reduzir a utilização da memória até mesmo por serviços e componentes do SO.

Como isso é possível? Os aplicativos, às vezes, alocam memória para uso futuro e sempre inicializam toda essa memória. Pode ser que o aplicativo nunca venha a usar ela toda. Ela é ativada para funcionalidades que talvez não sejam invocadas pelo usuário. Se vários aplicativos em execução fizerem isso ao mesmo tempo, haverá cópias redundantes no sistema.

A combinação de memórias é uma técnica em que o Windows avalia, de forma eficiente, o conteúdo da RAM do sistema durante atividade normal e localiza conteúdo duplicado em toda a memória do sistema. O Windows, então, libera duplicatas e mantém uma única cópia. Se o aplicativo tentar gravar na memória no futuro, o Windows fornecerá uma cópia exclusiva. Tudo isso acontecerá em segundo plano no gerenciador da memória, sem afetar os aplicativos. Esse método pode liberar de dezenas a centenas de MBs de memória (dependendo da quantidade de aplicativos em execução simultaneamente).

Reduções e alterações dos serviços

Os serviços do SO configurados para execução contínua são uma fonte significativa de uso da memória ambiente. Ao avaliar o conjunto de serviços do SO durante o planejamento do Windows 8, decidimos remover vários deles (13), mudar um conjunto diferente de serviços para a inicialização “manual” e migrar alguns dos serviços em “execução contínua” para um modelo de “inicialização sob demanda”. É aí que um "gatilho" no SO (como a chegada de um dispositivo ou a disponibilidade de um endereço de rede) causa estes acontecimentos:

  1. O serviço é iniciado.
  2. O serviço realiza suas funções (sejam lá quais forem).
  3. Ele permanece em execução por um tempo para garantir que não há mais nada a ser feito e
  4. O serviço vai embora.

Você observará que o Plug and Play, o Windows Update e o serviço de estrutura de driver do modo de usuário passarão a ser inicializados por gatilho no Windows 8, em contraste com o Windows 7, em que esses serviços estavam sempre em execução.

É claro que adicionamos um grande número de funcionalidades novas (e novos códigos) ao Windows 8. Algumas dessas funcionalidades são fornecidas na forma de novos serviços. Desses novos serviços, dois são inicializados automaticamente e todos os outros são manuais ou inicializados por gatilho.

Fazendo o mesmo trabalho com menos memória

Como o Windows executa aplicativos e realiza sua própria manutenção do sistema, os dados e arquivos do programa são carregados fora do disco, na memória principal. Desde o desenvolvimento do Windows 7 e do Windows 8 até agora, analisamos as partes (páginas) da memória durante a execução normal e a frequência com que elas foram referenciadas. A ideia aqui é: se for para pagar o preço da alocação de uma parte da memória, é melhor que ela esteja em uso (sendo referenciada) com frequência. Se você não estiver referenciando essa memória com frequência, mas precisa dela, consolide-a com alguma outra coisa.

Logo depois que lançamos o Windows 7, aplicamos uma técnica semelhante a vários componentes de baixo nível do Windows que remontam ao início do NT (começo da década de 1990). O trabalho incluiu uma rearquitetura de código e a alteração das estruturas de dados para separar completamente as partes “quentes” da memória (referenciadas com frequência) das partes “frias”. Consolidando os itens quentes de forma compacta, derrubamos o custo geral da memória do tempo de execução.

Devido à natureza das alterações (SO de baixo nível), queríamos terminar o trabalho o mais cedo possível para termos um grande tempo de execução nas alterações. Essas alterações estão em execução no Windows 8 há quase 2 anos, com milhares de funcionários da Microsoft usando o produto para realizar suas tarefas diárias. E temos visto resultados consistentes mostrando uma redução do uso da memória em dezenas de MB em um computador médio.

Inicialização lenta da “área de trabalho”

Em junho, você viu o Steven e a Julie apresentarem a interface do usuário com o estilo Metro pela primeira vez. Temos a expectativa de que muitos usuários de tablets usarão bastante esse ambiente, normalmente usando aplicativos com o estilo Metro. Nessa demonstração, também mostramos que, com o Windows 8, você poderá trazer os seus aplicativos existentes e usá-los no ambiente clássico da área de trabalho.

Do ponto de vista da memória, aproveitamos o fato de que haverá alguns conjuntos de dispositivos em que os usuários permanecerão na interface do usuário com o estilo Metro quase o tempo todo. Nesse caso, o Windows 8 somente inicializará os componentes do SO exclusivos desse ambiente da área de trabalho quando necessário. Essa é outra fonte de economia de memória: aproximadamente 23 MB no momento. (Observe que o Gerenciador de tarefas é executado na área de trabalho, portanto, os números citados acima incluem esse valor).

Priorização mais granular da memória

O Windows 8 tem um esquema melhor para a priorização das alocações de memória por componentes do sistema e aplicativos. Isso significa que o Windows pode tomar melhores decisões sobre a memória que deve ser mantida e aquela que deve ser removida em breve.

Por exemplo, os programas antivírus fazem várias verificações em arquivos quando eles são abertos por outros programas. A memória alocada pelo programa antivírus para verificar assinaturas de vírus normalmente é usada uma vez (é improvável que essa memória específica venha a ser necessária depois). No Windows 7, essa memória é tratada com a mesma prioridade que outras memórias têm no sistema (por exemplo, a memória alocada por uma instância do Microsoft Excel em execução). Em caso de pouca memória, o Windows 7 poderia acabar removendo a memória que ajuda outro aplicativo em execução (como o Excel) a se manter responsivo para o usuário, o que não seria a melhor opção para a capacidade de resposta do sistema nesse caso.

No Windows 8, todo programa tem a capacidade de alocar memória como "baixa prioridade". É um sinal importante para o Windows, pois em caso de falta de memória, ele pode remover essa memória de baixa prioridade para aumentar o espaço e isso não afeta outras memórias necessárias para manter a capacidade de resposta do sistema.

Resumindo, destaquei a nossa filosofia e abordagem para reduzir o uso da memória no Windows 8. Mostrei alguns exemplos de resultados e abordei por alto alguns trabalhos de engenharia feitos até hoje nessa área. Um tópico que não abordei foi o modelo de aplicativo do Windows 8 e as alterações no ciclo de vida do processo feitas para tornar os novos aplicativos do Windows 8 mais “amigáveis para a memória”. Veja mais sobre isso no conteúdo da //build/ e em futuras postagens do blog. Trata-se de uma parte realmente importante da reimaginação do Windows.

Já percorremos um grande caminho, mas ainda não terminamos.

--Bill Karagounis