Sítio do Piropo

B. Piropo

< Coluna em Fórum PCs >
Volte
16/06/2008

< ReadyBoost não aumenta a RAM >


Nas últimas três colunas, “Vista: pra que tanta memória RAM?”,   “Vista e o ReadyDrive” e “Vista: O SuperFetch”, mencionamos os três “aceleradores” incorporados ao Windows Vista: ReadyDrive, SuperFetch e ReadyBoost. Na segunda delas cheguei mesmo a comentar que o ReadyBoost, ao que parece o mais conhecido dos três, era na verdade o menos compreendido, já que a maioria das pessoas parece pensar que seu objetivo é aumentar a capacidade de memória RAM instalada usando para isto a memória não volátil tipo “flash” dos dispositivos conhecidos como “pen drives” quando na verdade a função é outra, bastante diferente. Hoje vamos tentar explicar a coisa um pouco melhor e ver como realmente funciona o ReadyBoost.

Parte da confusão talvez tenha origem nas próprias páginas da MS sobre Windows Vista, particularmente no conjunto de páginas “Learn About the Features” onde, em tese, as novas funcionalidades deveriam ser explicadas. Na
< http://www.microsoft.com/windows/products/windowsvista/features/details/readyboost.mspx >
página correspondente ao ReadyBoost consta que ReadyBoost é “um novo conceito de adicionar memória ao sistema” e acrescenta que “você pode usar memória ‘flash’ não volátil, como os ‘flash drives’ conectados ao barramento USB para melhorar o desempenho sem ter que acrescentar memória adicional no interior do gabinete”. Embora logo adiante a página mencione quase de passagem que esta memória funcionará como “cache adicional” e que complementará a memória usada pelo SuperFetch, a explicação é tão confusa que levou muita gente boa a acreditar que a memória não volátil do “flash drive” seria usada efetivamente como uma extensão do espaço de endereçamento da memória principal.

Ora, quem conhece os princípios básicos das “máquinas de Von Neumann” que norteiam a arquitetura dos computadores modernos sabe que é impossível para a UCP fazer acesso aleatório a qualquer trecho de memória que não esteja conectado diretamente ao chamado “barramento frontal”, aquele que liga a UCP ao controlador da memória principal. Fora dali, somente é possível o acesso “em bloco”, lendo setores ou “clusters” (conjunto de setores) dos dispositivos de memória externa (complicou? Bem, então você tem duas alternativas: se acha que o assunto interessa e vale a pena entender melhor o que aí está escrito, sugiro a leitura das colunas sobre memórias que publiquei aqui mesmo no ForumPCs e que podem ser encontradas em ordem cronológica na seção “Coluna em ForumPCs” do Sítio do Piropo, começando em Computadores XXXI: A lenda da Gralha Azul publicada em 16/04/2007 e terminando em Computadores XLIII: Localizando a MP, publicada em 08/10/2007; mas se acha que a coisa é técnica demais para seu gosto, pode simplesmente esquecer o assunto e apenas levar em conta que memória cujo acesso é feito através de um barramento externo, como o USB, jamais poderá ser usada como extensão direta da memória principal, ou memória RAM).

Então, como o ReadyBoost consegue acelerar o desempenho do sistema?

Bem, o documento
< http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/perfaccel.doc >
“Windows PC Accelerators” esclarece melhor a questão ao afirmar textualmente:

“ReadyBoost suporta o uso de dispositivos de armazenamento de memória não volátil tipo ‘flash’ para melhorar o desempenho do sistema. Dispositivos capazes de implementar o ReadyBoost fornecem espaço de armazenamento fora da memória principal (grifo nosso) dedicado especificamente a que o SuperFetch possa ali armazenar em cache dados cruciais para o desempenho, permitindo rápido acesso ao acaso. Embora não tão rápido como a memória principal, memória não volátil tipo ‘flash’ apresenta um desempenho significativamente mais rápido que o de discos convencionais em acessos ao acaso porque evita as latências de acesso e busca”.

[No original: “ReadyBoost supports the use of nonvolatile flash storage devices to boost system performance. Devices enhanced for ReadyBoost provide dedicated space outside main memory where SuperFetch can store a cache of performance-crucial data for fast random access. Although not as fast as main memory, nonvolatile flash memory significantly outperforms conventional disk media in random reads by avoiding the rotational and seek latencies”].

Como se vê o ReadyBoost não é uma extensão da memória primária na memória secundária. Ele funciona apenas complementando o SuperFetch que, a rigor, faz exatamente o contrário: usa como cache de disco (ou extensão da memória secundária) a “sobra” de memória primária (RAM), armazenando ali trechos de arquivos gravados em disco para acesso mais rápido, como vimos na coluna anterior. A memória (secundária) oferecida pelo ReadyBoost funciona como uma extensão da memória primária (RAM) usada pelo SuperFetch (que, ao criar um cache de disco na memória RAM, na verdade está usando memória primária como se fosse secundária).

Lendo o que acabo de escrever achei que a coisa parece um pouco complicada. Depois, relendo, não descobri maneira de torná-la mais simples. Talvez isso explique porque há tanta confusão em torno do real funcionamento do ReadyBoost. Seja como for, espero que pelo menos uma coisa tenha ficado clara: ReadyBoost não é uma forma de aumentar a capacidade instalada de memória RAM, mas sim uma funcionalidade que oferece ao SuperFetch espaço de memória adicional para abrigar seu cache de disco. Quem leu a coluna sobre ReadyDrive, que usa discos híbridos (onde parte dos dados é armazenada em meio magnético, parte em memória não volátil tipo “flash” contida no interior do drive) para acelerar o desempenho, haverá de ter entendido a função do ReadyBoost, que faz essencialmente a mesma coisa, porém usando memória não volátil tipo “flash” fora do disco rígido, ligada ao barramento USB.

Ou seja: usar o ReadyBoost só faz sentido para quem mantém o SuperFetch habilitado. Desabilitar o SuperFetch e manter um “flash drive” encaixado em uma saída USB configurado para usar o ReadyBoost é puro desperdício de recursos. Nestas condições, melhor achar um uso mais nobre para seu “pen drive”.

Incidentalmente: “pen drives” não são os únicos dispositivos de armazenamento de memória não volátil que podem ser usados pelo ReadyBoost. Além deles, são aceitos os chamados “cartões de memória” tipo “CompactFlash”, “SecureDigital” e qualquer tipo de “memory stick”. Nem o barramento USB é o único a oferecer suporte ao ReadyBoost (embora seja, de longe, o mais comum): a especificação também aceita dispositivos de memória não volátil que usem como interface os barramentos PCI, PCIexpress e SSA, que incluem a maioria dos dispositivos de leitura de cartões de memória.

Por outro lado, dispositivos USB padrão 1.0 e 1.1 não são suportados. São aceitos apenas dispositivos aderentes ao padrão USB 2.0. Além disso, há requisitos mínimos de desempenho: para que Vista use um dispositivo para o ReadyBoost é necessário que ele sustente uma taxa de transferência de pelo menos 2,5 MB/s para leituras de “páginas” de 4KB e de no mínimo 3 MB/s para escritas de blocos de 512 KB.

Quanto à capacidade, qualquer dispositivo com mais de 230 MB de espaço livre será aceito. A capacidade máxima do dispositivo pode chegar a 32 GB, mas o máximo que pode ser destinado ao ReadyBoost será 4 GB.

Explicando melhor: quando se insere um “pen drive” de, digamos, 8 GB em uma porta USB, Vista abre uma janela perguntando o que o usuário pretende fazer e oferece, entre as opções possíveis, usá-lo para acelerar o sistema com o ReadyBoost. Se o usuário seleciona esta opção, deverá especificar que fração da capacidade de memória do dispositivo deverá ser usada para tal fim. Ele pode optar por dedicar qualquer capacidade superior a 230 MB, digamos, 2 GB, e usar os 6 GB que sobraram como um acionador de discos externo. Mas não poderá optar por usar todos os 8 GB já que o máximo aceito pelo ReadyBoost será de 4 GB. A MS recomenda usar uma capacidade igual à da RAM instalada na placa mãe, podendo chegar até três vezes isso se desejar otimizar o desempenho, (respeitado, naturalmente, o máximo de 4 GB).

Digamos que você o tenha feito e resolvido dedicar, digamos, 3 MB de um “pen drive” ao Ready Boost. Como a coisa funciona na prática?

Assim que você informar o sistema sobre suas intenções, Vista cria um arquivo oculto e de sistema denominado “ReadyBoost.sfcache” no diretório raiz do dispositivo de memória usado pelo ReadyBoost (note que, não importa quantas portas USB a máquina ofereça, Vista aceita apenas um dispositivo para este fim). Este arquivo poderá ser usado pelo SuperFetch – e apenas por ele – como cache de disco operando em segundo plano.

Figura 1: ReadyBoost e seu arquivo sfcache.

Esta utilização é coordenada por um “driver” de dispositivo, o “Ecache.Sys”, que pode ser encontrado em %SystemRoot%\System32\Drivers\Ecache.sys. Para quem gosta de detalhes: o “serviço” correspondente é implementado pela biblioteca de ligação dinâmica %SystemRoot%\System32\EMDMgmt.dll, onde “EMD” são as iniciais de dispositivo de memória externa (external memory device) e Mgmt é a clássica abreviação da MS para “gerenciamento” (“management”). Se quiser, acione o gerenciador de tarefas com “Ctrl+Alt+Del”, passe para a aba “Serviços” e procure por ele. Certamente o encontrará lá.

O gerenciamento do cache do ReadyBoost é bastante peculiar, já que foi concebido especificamente para operar em memória não volátil do tipo “flash”. Para começar, ele leva em conta o fato de que este tipo de memória se “desgasta” (ou seja, existe um número máximo admissível de operações de leitura/escrita em células de memória não volátil, especialmente as do tipo NAND usadas na memória “flash”). Por isto, segundo a MS no documento
< http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/perfaccel.doc >
“Windows PC Accelerators”, “Para reduzir as possibilidades de falhas nas células (de memória) ReadyBoost foi concebido para gerenciar cuidadosamente quando escreve ou lê do cache. Testes iniciais de dispositivos preparados para o ReadyBoost indicam que os usuários podem esperar muitos anos de uso sob cargas de trabalho típicas”.

Além disso, a escolha do que ler e onde ler é feita baseada em um algoritmo bastante sofisticado. Explicando: embora assim que o serviço seja inicializado, todas as leituras e gravações em disco sejam interceptadas pelo gerenciador do ReadyBoost e copiadas no arquivo de cache, nem sempre as leituras são feitas do cache, mesmo que os dados estejam ali copiados. Este comportamento pode parecer um tanto paradoxal, pois afinal para que serve um cache senão para fornecer rapidamente a cópia dos dados que contém? Bem, acontece que mesmo tendo um tempo de acesso cerca de dez vezes menor que o dos discos magnéticos, o desempenho de “discos” emulados por memórias não voláteis depende da localização dos dados. Se, mesmo com cópia no cache do ReadyBoost, os dados cuja leitura foi solicitada estiverem em clusters adjacentes no disco (ou seja, se o arquivo não estiver fragmentado; e os do Vista raramente estão, pois a desfragmentação automática pode ser facilmente agendada) dependendo da quantidade de “páginas” solicitadas, a leitura em disco acaba sendo mais rápida já que, alcançado o primeiro “cluster”, basta manter a cabeça de leitura imóvel enquanto o disco gira para ler os seguintes. Neste caso, o gerenciador do ReadyBoost encaminha a leitura para o disco. Por isto o cache do ReadyBoost é usado apenas para acessos de trechos de memória secundária não seqüenciais.

Mas não é apenas isso. Além de compactar os dados antes de gravá-los no cache do ReadyBoost (com uma taxa de compressão que gira em torno de 2:1, o que permite que até 8 GB de dados sejam mantidos em um cache de 4 GB), o driver “Ecache.Sys” os criptografa. Para isto usa uma criptografia AES, gerando distintas chaves aleatoriamente por sessão. Isto garante que, caso o “pen drive” seja removido do computador por um indivíduo mal intencionado, a privacidade dos dados nele contidos permaneça inviolada.

Os benefícios do ReadyBoost são sentidos principalmente em duas circunstâncias. A primeira delas é quando o usuário roda diversos programas simultaneamente. A carga simultânea do código desses programas só pode ser feita na memória RAM, pois instruções somente podem ser executadas se estiverem armazenadas em posições de memória primária. Com isto “sobra” menos memória RAM para uso do SuperFetch, cujo cache (que é feito primariamente em RAM) fica significativamente menor. Nestes casos o ReadyBoost pode dar uma ajuda preciosa, já que seu conteúdo jamais será desalojado para abrir espaço em RAM.

A segunda é quando diversos aplicativos “disputam” o acesso ao disco. Que, evidentemente, não podem ser simultâneos. Mas nada impede que um programa acesse os dados que lhe interessam no disco enquanto outro, simultaneamente, acessa os seus que estão no cache do ReadyBoost.

Pronto, agora já vimos os três “aceleradores” implementados em Vista, SuperFetch, ReadyBoost e ReadyDrive. Como um depende do outro, só fazem sentido se discutidos em conjunto.

No momento, ao menos enquanto os discos híbridos não se tornarem mais baratos e aumentarem sua capacidade de memória não volátil interna, o ReadyDrive não apresenta grande interesse. Mas, seja como for, Vista já está preparado para eles.

Já o SuperFetch e o ReadyDrive são os principais responsáveis pela aparente voracidade de memória do sistema e pelo trabalho quase incessante do disco rígido (se bem que, quanto a este ponto, há ainda alguma coisa interessante a ser dita na próxima coluna). Mas são eles também que, para quem entende como funcionam, sabe usá-los e dá tempo ao sistema para que venha a se assenhorear de seus hábitos de uso, oferecem os maiores benefícios em termos de desempenho.

O SuperFetch é habilitado por padrão em todas as versões do Windows Vista exceto a Starter Edition e os dispositivos de memória externa usados pelo ReadyBoost podem, igualmente, ser habilitados como extensão de memória para o SuperFetch em todas as versões, desde que atendam às condições mínimas exigidas pelo sistema relativas a desempenho e capacidade.

 

B. Piropo