ND7.0.1 is Large Address Aware
Bookmark :
A short english version of this article can be found here.
Op LotuSphere 2006 bezocht ik een sessie over Domino memory management (sessie ID111), gepresenteerd door Rob Gearhart. Richard Schwartz blogde er destijds ook over: het was een goede sessie.
Even terzijde: Rob - naar eigen zeggen oud genoeg om legaal auto te rijden, maar dat zag je niet aan hem af! - maakte een bijzonder goede indruk op me. Hij presenteerde deskundig en to the point, maar ook vlot en met de nodige humor, een hoop nuttige informatie, voor een volgpakte zaal. Goed voor IBM, dat het in een aantrekkende economie zulke getalenteerde jonge engineers aan kan trekken voor Lotus Notes/Domino-werk!
Op één van de slides van zijn presa stond vermeld dat ND7.0.1 "Large address aware" zou zijn. Dat betekent, dat ND7.0.1 op Windows NT/2000/2003 Server van één gigabyte RAM-geheugen méér gebruik kan maken dan ND7.0 of oudere Notes/Domino-versies. Echter, dat kon ik in de release notes niet terugvinden. Ik heb Rob daarover gemaild, en vandaag kreeg ik antwoord: vermoedelijk zit er een fout in de release notes, want volgens zijn tests is ND7.0.1 wel degelijk Large Address Aware.
RAM: wat basisprincipes
Het lijkt eenvoudig: als een server geheugenproblemen heeft, dan schroef je er meer RAM-geheugen in.. probleem opgelost! Zo simpel ligt het, zoals u vermoedelijk wel wist, niet altijd. Door beperkingen in de architectuur van processoren en operating systems hebben we te maken met bepaalde grenzen: ieder OS heeft een maximaal bruikbare geheugenruimte.
Address Spaces
Het is nodig hier twee termen te introduceren: Virtual Memory en Virtual Address Space. Virtual Memory is de totale hoeveelheid fysiek geheugen waar een server het mee moet doen: RAM plus de page file. De Virtual Address Space (afgekort VAS), is de totale geheugenruimte die een gegeven proces (of een groep processen) maximaal kan benutten op een bepaald platform. In het geval van Windows Server (W32, de 32 bits edities dus) gaat het hier om 4 GB.
Maar, de VAS is niet in zijn geheel beschikbaar voor applicaties: ook het OS zelf heeft natuurlijk geheugenruimte nodig. In ieder modern OS wordt daarom een deel van de Virtual Address Space gereserveerd voor de kernel: dat is de Kernel Address Space. De rest is beschikbaar voor andere processen, zoals bijvoorbeeld Domino; die geheugenruimte noemen we de User Address Space. De Virtual Address Space wordt dus verdeeld in Kernel Address Space en User Address Space.
Een standaard Windows W32 server kan dus zoals hierboven aangegeven maximaal 4 GB geheugenruimte managen. Die 4 GB Virtual Address Space moet verdeeld worden over Kernel Address Space en User Address Space. Dat gebeurt fifty-fifty: zowel de Kernel Address Space als de User Address Space zijn op een standaard W32 server maximaal 2 GB groot.
De praktische consequentie hiervan is, dat Domino-gerelateerde processen, op een standaard W32-server , nooit meer dan 2 GB geheugenruimte kunnen gebruiken!
3GB Userspace
Maar, het is mogelijk om een Windows te starten met een /3GB boot switch in de boot.ini*. Die verandering zorgt ervoor, dat de Kernel Address Space teruggebracht wordt van twee naar één GB. De vrijkomende GB RAM wordt vervolgens overgeheveld naar de User Address Space, die dus kunstmatig opgekrikt wordt naar 3 GB. Dat is mooi, maar de meeste W32-applicaties 'zien' de vrijgekomen extra geheugenruimte niet automatisch; de software is zich niet bewust van de grotere User Address Space. De applicatie moet, met andere woorden, "Large Address Aware" gecompileerd zijn om van die extra GB te kunnen profiteren. ND7.0 en oudere versies waren dat niet, maar ND7.0.1 is dat, volgens Rob, wél. Dit betekent dat u, op een Advanced Windows server, de totale voor Domino bruikbare geheugenruimte fors kunt uitbreiden: van 2 naar 3 GB!
Omdat W32 server nu eenmaal vaak voorkomt, is het relevant dat ND7.0.1 op dat platform nu Large Address Aware is. Maar er zijn andere operating systems die van nature al een grotere User Address Space bieden. De meeste Linux/Unix-platforms bieden standaard 3 GB of (iets) meer, net zoals 64 bits Windows (w64). iSeries (a.k.a. AS/400) biedt standaard een User Address Space van 4 GB.
Het grappige is dat je, als je gaat zoeken naar informatie over deze verdelingen in Kernel Address Space en User Address Space voor Linux, er achter komt dat dit OS flexibeler is dan Windows. Je kunt met behulp van bepaalde kernel patches juist de Kernel Address Space opwaarderen naar 3 GB, ten koste van de User Address Space, of de verhouding terugbrengen naar 2 GB voor ieder. Daar zie je dus het omgekeerde: standaard wordt 3 GB User Address Space geboden, maar bestaat kennelijk soms de behoefte dat terug te brengen naar 2 of zelfs 1 GB.
Door gebruik te maken van technieken als PAE en AWE is het mogelijk op Windows 2000/2003 en Intel-gebaseerde Linux-systemen tot 64 GB RAM beschikbaar te krijgen voor de User Address Space. AIX, Solaris, OS/390 en iSeries kunnen volgens Rob tot maximaal 1 Terabyte aan RAM managen; maar of die ook te gebruiken is als user address space is me (nog) niet helemaal duidelijk.
Goed, we hebben een OS wat meer dan 2 GB User Address Space aankan. Er is dus 3 GB beschikbaar, maar zien de processen het ook? Dat verschilt eveneens per platform. Onder sommige omstandigheden (bij het gebruik van bepaalde API calls voor Large Address Aware applicaties) rapporteert Windows W32 ten onrechte dat er maximaal 2 GB RAM User Address Space beschikbaar is; Unix/Linux geven altijd accuraat de beschikbare hoeveelheid geheugen.
Tenslotte: ik ben geen geheugen-expert. Het is best ingewikkelde materie, met kleine doch belangrijke verschillen per platform of bijvoorbeeld kernel-release. Mocht je relevante aanvullingen of ervaringen hebben, dan hoor ik het graag! Zelf hoop ik later nog een keer terug te komen op Domino en memory management; er komen met ND7.0.2. ook weer nieuwe ini-parameters die in dit opzicht interessant zijn.
*: het gebruik van de /3GB switch is mogelijk op NT4 Enterprise, Windows 2000 Advanced en Datacenter, de 'gewone' Windows 2003 server en zwaardere varianten, en Windows XP Pro.
- 

