Windows 7 – Abordagem ao Desempenho do Sistema

Muitas pessoas fizeram comentários e mandaram email sobre o desempenho do Windows. O diálogo tem sido bem abrangente – todos querem ver uma melhoria no desempenho (obvio). Assim como muitos outros tópicos discutidos aqui, desempenho, mesmo parecendo mensurável e absoluto, também traz lá suas sutilezas. Existem muitos elementos e muitos balanços envolvidos em conseguir um desempenho que se adéqua as expectativas de todos. Sabemos que mesmo atendendo as expectativas, as pessoas vão querer sempre mais dos seus PCs com Windows (conforme esperado). Nós nos re-dedicamos a trabalhar nessa área no Windows 7 (e no IE 8). Essa foi uma grande iniciativa envolvendo todos os times de funcionalidade assim, e foi também a missão principal de um dos times de funcionalidade (equipe de Fundamentos). Nesse artigo, eu gostaria apenas de iniciar a discussão na medida em que nos aprofundamos no tópico de desempenho nos próximos artigos. Vocês podem achar relevante esse outro artigo sobre desempenho do IE8 e também o lançamento da versão Beta 2 do IE8.

Desempenho é composto de muitos elementos. Poderíamos falar sobre resposta do sistema para um chamado específico. Poderia também significar quanto de memória é “típica” ou qual processador clientes precisam. Poderíamos falar sobre o tempo preciso pra iniciar um programa. Poderia significar tempo de inicialização, ou pausa/reinicializarão. Poderia significar o monitoramento da atividade no processador, ou leituras/escritas no disco (ou a ausência de atividade no disco). Poderia significar tempo de duração da bateria em laptops. Poderia até significar algo bem mundano como espaço no disco após instalação. Todas essas são medidas de desempenho. Todas essas variáveis são acompanhadas sistematicamente ao longo do nosso projeto de desenvolvimento. Nós monitoramos desempenho através da execução de um conjunto de cenários (existem milhares deles) e nossos engenheiros de software também executam cenários específicos baseado em uma maior abrangência ou profundidade. A lista a seguir representa algumas (essa é uma lista parcial) das medidas que estamos acompanhando enquanto desenvolvemos o Windows 7:

· Uso de Memória – Quanto de memória um dado cenário aloca durante sua execução. Como vocês sabem isso é um balanço clássico entre tempo e espaço na ciência da computação e nós não estamos isentos. Observamos esse balanço bastante em memórias caches quando você pode usar mais memória (ou espaço no disco) para melhorar o desempenho ou para evitar recomputar alguma coisa.

· Utilização do Processador – Claramente, processadores modernos oferecem um poder incrível de processamento e com o advento de multi-core (núcleos de execução distintos no mesmo circuito integrado) vemos a oportunidade para um maior paralelismo do que seria possível anteriormente. Claro que esses recursos não são gratuitos então medimos a utilização do processador através de medidas comparativas também. Em geral, a meta deveria ser manter a utilização do processador baixa, visto que isso traz melhorias em cenários envolvendo múltiplos usuários assim como reduz o consumo de bateria.

· Leitura e Escrita em Disco – Apesar dos discos rígidos terem melhorado substancialmente seu desempenho, ainda precisamos fazer o que for possível parar minimizar a quantidade de leituras e escritas no disco que o Windows exige (incluindo paginação de memória, claro). Essa é uma área que recebeu uma atenção especial no Windows 7 com o advento de dispositivos de armazenagem em “estado sólido” que têm características dramaticamente diferentes.

· Inicialização, Finalização, Pausa/Reinicialização – Todas essas são áreas que dedicamos bastante atenção no Windows 7. Reconhecemos que essas áreas nunca vão ser rápidas o suficiente. Para esses tópicos a nossa colaboração com os fabricantes de PC e componentes de hardware têm um papel fundamental na garantia de que os tempos que observamos em nossos laboratórios (ou o desempenho que observamos numa “instalação limpa”) são refletidas nos PCs que se encontram à venda.

· Sistema base – Fazemos várias medições e ajustes no sistema base. Com sistema base nos referimos a utilização de recursos antes de qualquer outro software ser carregado. Esse sistema forma a “plataforma” que define o que todos os engenheiros de software podem contar e definir como requisitos de sistema para uma experiência razoável. Uma sugestão popular nessa área é tirar algo do sistema base e usá-los apenas “sob demanda”. Esse balanço é algo que sempre consideramos bastante, mas sempre temos cuidado parar evitar uma situação em que a maioria dos clientes tem que fazer uma leitura “sob demanda”, algo que poderia reduzir o desempenho em cenários comuns.

· Espaço em Disco – Apesar de não estar diretamente relacionada ao desempenho de execução, muitas pessoas consideram espaço em disco do sistema operacional como um indicativo de desempenho. Nós temos algumas metas específicas em torno dessa medida e vamos nos aprofundar nos detalhes em breve. Também vamos dedicar algum tempo explicando \Windows\WinSxS visto que esse é sempre um assunto de discussões na TechNet e MSDN! Nessa área, em vez de balanços na velocidade de execução, vemos mais uma questão de balanços de recursos que trazem conveniência, tais quais drivers de dispositivo armazenados no disco, conteúdo de assistência, componentes opcionais do Windows, e também diagnósticos e informação relacionadas ao monitoramento do sistema.

Nós temos critérios que adotamos no final de cada etapa do projeto e antes de entrarmos em beta e jamais lançamos uma versão sem que tenhamos atingido esses critérios de uma forma abrangente. Algumas vezes esses critérios são micro-benchmarks (page faults, utilização de processadores, working set, frame rates em jogos) e outras vezes são mais baseados em cenários e medem o tempo parar completar uma tarefa (tempo de relógio, número de cliques). Fazemos essas medições em uma variedade de plataformas (32 bits, 64 bits; 1, 2, 4 Gb de RAM; discos de 5400 ate 7200 rpm ou discos de “estado sólido”; uma variedade de processadores, etc.). Por causa dos balanços inerentes em algumas abordagens de arquitetura, freqüentemente incluímos código condicional dependente de qual plataforma o Windows esta rodando.

Por outro lado, desempenho deveria ser bem simples – usar menos, fazer menos, ter menos. Se você tivesse menos de tudo o desempenho deveria melhorar. No extremo isso certamente é o caso. Mas como podemos ver nos comentários, o que para uma pessoa é essencial, pra outra pessoa é desnecessário. Vemos muito isso no que alguém se referiu como “colírio parar os olhos” – recebemos inúmeros pedidos parar fazer a interface do usuário “mais divertida” com animações e gráficos (“como aqueles do concorrente”) enquanto algumas pessoas falaram “pode eliminar todos esses gráficos e voltar à interface do Windows 2000”. O Windows é bem flexível e oferece muitas formas de ajustar a experiência. Ouvimos muito nesse fórum sobre oferecer versões diferentes do Windows customizadas para públicos diferentes, enquanto também ouvimos muito sobre a necessidade de redução do numero de versões do Windows. Entretanto, existem limites no que podemos oferecer e ao mesmo tempo oferecer uma plataforma confiável que clientes e programadores podem contar, sendo robusta gerenciável para uma variedade de clientes. Mas claro que dentro de um contexto definido (em uma casa ou uma empresa rodando um conjunto definido de aplicativos) sempre será possível tirar vantagem de customização e ferramentas de gerenciamento que o Windows oferece para ajustar a experiência. A habilidade de escolha e controle do que acontece em um PC é de fundamental importância para nós continuaremos enfocando nesses atributos no Windows 7.

De longe o maior desafio em prover uma ótima experiência no PC relativa a desempenho é que clientes continuam a usar os PCs para fazer mais e mais coisas, e certamente esperam fazer coisas em um PC simplesmente adicionando mais e mais aplicativos. Enquanto é definitivamente o caso de que o Windows também adiciona funcionalidade, trabalhamos duro para adicionar funcionalidades que beneficiam o maior número de clientes. Ao mesmo tempo, o Windows 7 vai continuar a oferecer escolha e controle sobre o que acontece no Windows no que diz respeito aos programas que são oferecidos, quais handlers estão disponíveis para um tipo de arquivo ou protocolo, e oferecendo uma plataforma que torna fácil aos usuários-finais personalizar a sua experiência computacional.

Finalmente, vale a pena considerar parâmetros do mundo real versus ideais. Para que possamos desenvolver o Windows, executamos nossas comparações no laboratório de forma que possamos rastrear qual código foi alterado e qual o impacto que esse código causou. Também trabalhamos juntos com fabricantes de PC ajudando eles a avaliar os sistemas que saem de suas fabricas. Mas para o desempenho verdadeiro no mundo real, o Microsoft Customer Experience Improvement Program nos fornece (anônimo, privado, opcional) dados de como as maquinas estão realmente desempenhando. Vamos nos referir a esses dados bastante nos próximos meses na medida que formar uma base para falarmos de como as coisas estão realmente funcionando, em vez de usar outras formas menos confiáveis de informação.

No nosso próximo artigo vamos avaliar inicialização e desempenho de boot, e dado o interesse que ainda teremos mais a dizer sobre esse assunto de desempenho.

-- Steven