terça-feira, 13 de setembro de 2011

Esclarecendo a questão do PAE nos Windows 32-bit domésticos

Existe uma certa confusão sobre esse assunto. Já vi gente dizer que para ter mais de ~3,2GB de memória funcional nos Windows 32-bit uma alternativa seria habilitar o PAE no boot.ini (ou BCD, a partir do Vista). Porém esta informação não procede. A seguir usarei como base o boot.ini do XP, porém o mesmo se aplica às configurações equivalentes do BCD do Vista/7.

Os Windows 32-bit domésticos (XP, Vista, 7) usam indiretamente PAE para aproveitarem o recurso NX bit dos processadores atuais (implementado no Windows com o nome de DEP - Data Execution Prevention). Usando qualquer opção para a chave /NOEXECUTE (ou mesmo sem a chave, em processadores com supote, é usada /NOEXECUTE=optin), o PAE é usado indiretamente, porém sem ampliar o limite máximo de memória. Então no final das contas, tudo que é Windows 32-bit doméstico que foi instalado num processador com NX bit já está rodando com o PAE habilitado. Colocar a chave "/PAE" no boot.ini não faz absolutamente nada. Tanto é que a Microsoft diz que para desabilitar o PAE é preciso usar /NOPAE /NOEXECUTE=alwaysoff.

Referências:
http://www.microsoft.com/whdc/system/platform/server/PAE/PAEdrv.mspx
http://msdn.microsoft.com/en-us/library/ms791539.aspx
http://blogs.technet.com/markrussinovich/archive/2008/07/21/3092070.aspx

Do último link retiramos o seguinte:

However, by the time Windows XP SP2 was under development, client systems with more than 4GB were foreseeable, so the Windows team started broadly testing Windows XP on systems with more than 4GB of memory. Windows XP SP2 also enabled Physical Address Extensions (PAE) support by default on hardware that implements no-execute memory because its required for Data Execution Prevention (DEP), but that also enables support for more than 4GB of memory.

What they found was that many of the systems would crash, hang, or become unbootable because some device drivers, commonly those for video and audio devices that are found typically on clients but not servers, were not programmed to expect physical addresses larger than 4GB. As a result, the drivers truncated such addresses, resulting in memory corruptions and corruption side effects. Server systems commonly have more generic devices and with simpler and more stable drivers, and therefore hadn't generally surfaced these problems. The problematic client driver ecosystem led to the decision for client SKUs to ignore physical memory that resides above 4GB, even though they can theoretically address it.


Ou seja, apenas nas versões Server (e não em todas elas) o Windows 32-bit suporta verdadeiramente o PAE "completo", digamos assim, ou seja, com suporte a mais de 4GB. Por uma razão simples: todos os drivers precisam ser compatíveis para trabalhar com PAE completo e em componentes para servidores esta preocupação existe. No desktop, poderia ser uma quebradeira generalizada e por isso a Microsoft não colocou um suporte a PAE completo nos Windows domésticos a partir do XP SP2.

O interessante é que o Server 2008 R2 só foi lançado em 64-bit. A Microsoft abandonou o 32-bit nos servidores ao que tudo indica para futuros lançamentos.

Notem que estou desconsiderando eventuais limites de endereçamento dos chipsets. Este é outro problema.

Resumindo:
- PAE nos Windows 32-bit domésticos não aumenta o limite máximo de memória. O limite é 4GB (na prática ~3,2GB) e ponto.
- PAE nos Windows 32-bit domésticos é usado só para DEP assistido por hardware, em processadores que suportem o recurso NX bit (hoje em dia a grande maioria).
- PAE nos Windows Server 32-bit sim aumenta o limite de memória (com algumas exceções) e depende de drivers compatíveis.
- Há perda de desempenho no uso do PAE.
- 64-bit é o futuro. PAE é (ou foi) um remendo.

Um comentário: