Windows Desktop Search

Um dos pontos dos comentáriosque recebemos foi o sobre desabilitar serviços e instalar componentes opcionais -- já falamos sobre nossa meta nessa área em artigos anteriores. Uma das principais (mas não a única) motivações para querer esse tipo de controle é a percepção com relação ao desempenho e ao consumo de recursos de vários componentes da plataforma. Um dos objetivos do Windows é fornecer uma plataforma confiável e consistente para os desenvolvedores – na qual eles possam contar com a disponilibidade de serviços do sistema – assim como um conjunto de recursos de sistema operacional que possam potencialmente beneficiar a todos os usuários. Ao mesmo tempo, devemos fazer isso de maneira a usar os recursos do sistema de forma eficiente o bastante para que os benefícios compensem o custo. Temos consciência de que uma parte dos usuários acredita que essa equação só possa ser resolvida manualmente – da mesma forma que algumas pessoas acreditam que carros com transmissão manual consigam um melhor desempenho. Neste artigo, iremos avaliar a funcionalidade do desktop search sob o ponto de vista do trabalho que estamos fazendo, tanto como um componente de plataforma amplamente disponível quanto para fornecer uma rica funcionalidade para o usuário final. Iremos também avaliar os sacrifícios de engenharia envolvidos e as técnicas que usamos para criar uma solução ótima para todos. Chris McConnell, SDE principal da equipe Find and Organize, contribuiu para esse artigo.   --Steven

Você é uma daquelas pessoas que acreditam que a indexação de pesquisa é o que faz a luzinha da sua unidade de disco piscar como louca? Você acha que é por isso que você está sendo dizimado quando joga games de tiro em primeira pessoa com seus amigos? Se sim, este artigo é para você! A equipe Find and Organize é quem cria o serviço ‘Windows Search’, que chamamos simplestemente de ‘indexador’. Uma reclamação que ouvimos de alguns usuários avançados do Vista é que eles querem desativar o indexador pois acreditam que está usando muitos recursos do sistema, oferecendo pouco em troca. De acordo com nossos dados de telemetria, um máximo de cerca de 1,5% dos usuários do Vista desativam o serviço de indexação e acreditamos que essa percepção seja o motivo pelo qual eles escolhem fazer isso.

O objetivo deste artigo é esclarecer a função do indexador e realçar o trabalho que estamos fazendo para garantir que ele use os recursos do sistema eficientemente. Vamos começar falando sonre a função do serviço de indexação – para quê serve? Por que devemos deixá-lo ativo?

Por que Indexar?

Os computadores de hoje em dia estão cheios de tipos sofisticados de arquivos, tais como documentos, fotos, música, vídeo e por aí vai. A quantidade de arquivos que as pessoas aramzenam em seus computadores cresce rapidamente, tornando cada vez mais difícil para elas encontrar o que procuram, independentemente do quão bem organizados estão (ou não) os seus arquivos. Cada vez mais, esses arquivos contêm uma estrutura bem definida, com propriedades de metadados que descrevem o seu conteúdo. Um arquivo de música típico contém propriedades que descrevem o artista, o nome do disco, ano de lançamento, gênero musical, duração da música, entre outros, que podem ser muito úteis quando pesquisamos músicas.

Embora as tecnologias de indexação de pesquisa datem dos primórdios do Windows, foi com o Windows Vista que a Microsoft introduziu um sistema operacional de consumo que trouxe essa funcionalidade para o usuário comum de forma mais significativa. Antes do Vista, as pesquisas eram bem rudimentares – geralmente uma força bruta passando por todos os arquivos do computador e olhando apenas propriedades de arquivos simples, tais como nome de arquivo, data da última alteração e tamanho, ou um índice específico de um aplicativo com dados específos àquele aplicativo. Com o Windows, uma opção de pesquisa mais abrangente permitia que você também olhasse o conteúdo dos arquivos, mas esse recurso não era muito usado. Era uma funcionalidade bem básica que tratava todos os arquivos da mesma forma, sem utilizar as ricas propriedades de metadados disponíveis nos arquivos.

No Windows Vista, o serviço de indexação está ativado por padrão e inclui suporte mais abrangente em termos da quantidade de formatos de arquivo e das propriedades que são indexadas. O indexador monitora pastas espefícicas em seu computador e cataloga o seu conteúdo para facilitar a pesquisa rápida nesses arquivos. Quando o Windows indexa os seus arquivos de música, ele sabe como extrair as propriedades específicas de música que serão mais provavelmente usadas em suas pesquisas. Isso permite suporte para pequisas mais robustas e exibições mais ricas de seus arquivos, que não eram possíveis antes. Mas essa indexação tem um preço e é aí que o trabalho de engenharia começa a ficar interessante. Existe um custo (em termos de recursos do sistema) que deve ser pago para permitir essa funcionalidade, e há sacrifícios envolvidos em quando e como você paga esse custo. Isso não é característico apenas da indexação – todos os recursos apresentam esse custo-benefício.

Sacrifícios

Várias soluções de pesquisa seguiam o modelo tradicional de “grep”, o que significa que cada pesquisa lê todos os arquivos que você deseja pesquisar. Nesse caso, você pagava com o tempo, enquanto esperava a pesquisa ser executada. Quanto mais arquivos você pesquisava, mais tempo tinha que esperar cada vez que fazia uma pesquisa. Se quisesse fazer a mesma pesquisa de novo, você “pagaria” de novo. E o valor que ganhava em retorno não era muito grande, já que a funcionalidade de pesquisa não era particularmente robusta. Com o Windows Vista , oi indexador tenta ler todos os seus arquivos antes de você iniciar a pesquisa para que quando pesquise, o processo seja mais rápido e responsivo. Isso requer que o indexador rastreia todos os seus arquivos somente uma vez inicialmente, não cada vez que você faz uma pesquisa. Se o arquivo for alterado, o indexador recebe uma notificação (um evento “push”) para que leia o arquivo novamente. Quando o indexador lê um arquivo, ele extrai as infromações pertinentes sobre o arquivo de modo a permitir pesquisas e visualiações mais robustas. O grande desafio é fazer isso de maneira rápida o bastante para que o indexador esteja sempre atualizado e pronto para realizar suas pesquisas, mas também de uma forma que não tenha um efeito negativo no desempenho do sistema. Isso sempre exige um equilíbrio que requer sacrifícios, e há várias coisas que o indexador faz para manter o status de um bom cidadão do Windows e ao mesmo tempo garantir que o índice esteja sempre atualizado.

Cidadão Modelo

Muito trabalho foi feito para fazer com que o indexador seja um cidadão modelo do Windows. Escrevemos whitepaper abrangente sobre a questão, mas vale a pena cobrir alguns dos pontos chave aqui. Para começar, o indexador só monitora certas pastas, o que limita a quantidade de processamento a apenas os aruqivos com maior probabilidade de você pesquisar. O indexador também “diminui o passo” quando você está usando o computador ativamente. Ele indexa os arquivos mais lentamente ou pára completamente, dependendo do nível de atividade no computador. Quando o indexador está lendo arquivos ele usa CPU e I/O de baixa prioridade e libera imediatamente o arquivo se outro aplicativo precisar de acesso a ele.

É essencial que todas essas questões sejam tratadas corretamente para o indexador, não só por ser importante para os recursos criados pela nossa equipe (por exemplo, o Windows Search), mas também para a plataforma do Windows como um todo. Existem vários aplicativos que exigem a capacidade de pesquisar conteúdo de arquivos no computador, Imagine se cada um deles criassem sua própria versão do indexador! Mesmo que todos fizessem um ótimo trabalho, haveria uma enorme quantidade de atividades desnecessárias e redundantes sendo executadas no computador. Toda vez que você salvasse um document, haveria um enorme fluxo de atividades à medida que todos os indexadores começassem a acessar a nova versão do arquivo. Para evitar isso, o indexador é criado de forma a fazer o trabalho para qualquer aplicativo que deseja usá-lo e fornece uma plataforma aberta e API com flexibilidade e extensibilidade para desenvolvedores. A API é criada para ser flexível o bastante para atender às necessidades de todo o ecossistema do Windows. Logo de cara, o indexador conhece cerca de 200 tipos de arquivos comuns, catalogando quase 400 propriedades diferentes por padrão. E há suporte para que aplicativos adicionem novos tipos de arquivos e propriedades a qualquer momento. Os aplicativos também podem adicionar suporte para indexação de tipos de dados que não sejam baseados em arquivo, como por exemplo email. Alguns dos aplicativos que estão usando o indexador atualmente são Microsoft Office Outlook and OneNote, Lotus Notes, Windows Live Photo Gallery, Internet Explorer 8 e Google Desktop Search. Como acontece com todos os sistemas extensíveis, os desenvolvedores costumam achar formas criativas para seus componentes utilizarem os serviços do sistema. Um exemplo é a maneira como os componentes do Tablet PC utilizam o conteúdo do índice para melhorar a precisão do manuscrito.

Sempre Melhorando

Estamos sempre trabalhando para melhorar o desempenho e a confiabilidade do indexador. A versão 3 foi lançada no Windows Vista. Algumas das grandes melhorias dessa versão foram:

  • O indexador é executado como um serviço do sistema em vez de como um processo do usuário. Isso minimize o impacto em cenários de vários usuários, por exemplo, apenas um catálogo por sistema resulta na redução do tamanho do catálogo e evita que o mesmo conteúdo seja reindexado repedidamente. Outros benefícios são obtidos da natureza robusta de serviços.
  • O indexador emprega I/O de baixa prioridade para minimizar o impacto da indexação no tempo de resposta do coputador. Antes do Windows Vista, todas as I/O erram tratadas ma mesma maneira.

Já lançamos o Windows Search versão 4 como uma melhoria tanto para o Windows XP quanto para o Windows Vista. Essa versão vai ainda mais longe em termos de melhorias de desempenho e estabilidade, tais como:

  • Melhorias significativas para todas as pesquisas que envolvem classificação, filtro ou agrupamento. Alguns exemplos no Vista incluem:
    1. Melhnorias na obtenção de todos os resultados durante a classigicação ou agrupamento. Uma pesquisa típica passa a ser até 38% mais rápida.
    2. O tempo de uso de CPU foi reduzido em 80%
    3. O uso de memória foi reduzido em 20%
  • A sobrecarga nos servidores de Exchange foi reduzida em mais de 95% quando o Outlook está sendo executado em modo online. Com versões anteriores do Windows Search, uma grande quantidade de clientes do Outlook executados em modo online podia facilmente sobrecarregar o servidor do Exchange.
  • Maior confiabilidade, incluindo:
    1. Fizemos várias correções para resolver situações reportadas pelos usuários que antes faziam com que a indexação parasse de funcionar.
    2. Melhoramos a capacidade do indexador de prevenir e recuperar corrupções do índice. Agora, quando uma corrupção é identificada no catálogo, ele é sempre recriado automaticamente – antes isso só acontecia em algumas circunstâncias.
    3. Adicionamos novos recursos de log e eventos para ajudar a determinar e corrigir problemas de confiabilidade.

E fizemos ainda mais para melhorar o desempenho e a confiabilidade do indexador no Windows 7, que você poderá em breve ver no PDC. Caso ainda acredite que o indexador só te traz problemas, temos algumas coisas que gostaríamos que você tentasse:

  • Baixe e instale o Windows Search 4 (no Vista ou no XP).
  • Baixe e instale o Indexer Gadget da Galeria de Gadgets do Windows Live (apenas no Vista). Esse gadget foi criado por uma pessoa da nossa equipe e fornece uma maneira rápida de ver a quantidade de itens indexados. Ele também permite que você interrompa a indexação ou faça com que ela seja executada em velocidade total (sem diminuir o passo).
  • Caso você seja uma daquelas pessoas que gostam de se enfiar embaixo do carro para brincar com o motor, você pode usar o gerenciador de tarefas e/ou o gerenciador de recursos do Windows para monitorar o seguintes processos: SearchIndexer, SearchFilterHost, SearchProtocolHost.

Se você percebe que o sistema está lento e acha que o indexador é o culpado, observe o gadget à medida que trabalha no computador. O número de itens indexados está mudando de maneira significativa quando você percebe o problema? Se você interrompe o indexador, o sistema se recupera? Estamos sempre tentando melhorar a sua experiência de pesaquisa, então se ainda estiver tendo problemas, gostaríamos de ser informador. Envie seus comentários para idx-help@microsoft.com.

Chris McConnell
Find and Organize