<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Hypervisor.fr &#187; TPS</title>
	<atom:link href="http://www.hypervisor.fr/?feed=rss2&#038;tag=tps" rel="self" type="application/rss+xml" />
	<link>http://www.hypervisor.fr</link>
	<description>French Bare-Metal weblog</description>
	<lastBuildDate>Wed, 26 Jun 2024 22:42:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>LPoD on VDI</title>
		<link>http://www.hypervisor.fr/?p=5456</link>
		<comments>http://www.hypervisor.fr/?p=5456#comments</comments>
		<pubDate>Thu, 02 Apr 2015 14:32:22 +0000</pubDate>
		<dc:creator>NiTRo</dc:creator>
				<category><![CDATA[Performance]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[deduplication]]></category>
		<category><![CDATA[large pages]]></category>
		<category><![CDATA[overcommit]]></category>
		<category><![CDATA[TPS]]></category>
		<category><![CDATA[Transparent Page Sharing]]></category>

		<guid isPermaLink="false">http://www.hypervisor.fr/?p=5456</guid>
		<description><![CDATA[Nous avons eu l&#8217;opportunité de déployer notre fameuse sauce &#8220;Large Page on Demand&#8220; sur un environnement VDI de 5 stretched cluster de 32 nodes (soit 160 lames HP BL460c Gen8 bi E5 2680 v2 &#8211; 256Go) pour un total de 5000 VM Windows 7. Voici le summary d&#8217;un des cluster :

Sans autre tuning que le [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Nous avons eu l&#8217;opportunité de déployer <a href="http://www.hypervisor.fr/?p=5265">notre fameuse sauce &#8220;<strong>Large Page on Demand</strong>&#8220;</a> sur un environnement VDI de 5 <a href="http://www.hypervisor.fr/?p=4940" target="_blank">stretched cluster</a> de 32 nodes (soit 160 lames HP BL460c Gen8 bi E5 2680 v2 &#8211; 256Go) pour un total de <strong>5000 VM Windows 7</strong>. Voici le summary d&#8217;un des cluster :</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://files.hypervisor.fr/img/LPoD/cluster_sample.png" alt="" width="343" height="352" /></p>
<p style="text-align: justify;">Sans autre tuning que le paramètre <a href="http://pubs.vmware.com/vsphere-60/topic/com.vmware.vsphere.resmgmt.doc/GUID-D98E6EC9-3730-4BC0-A9FC-93B9079E1AEE.html" target="_blank">LPageAlwaysTryForNPT</a>, TPS nous a permis de récupérer <strong>plus de 50% de RAM soit + de 12.5To sans impact sur le ressenti utilisateur</strong> (cliquez sur les graphs pour avoir le détail des compteurs) :</p>
<p style="text-align: center;"><a href="http://files.hypervisor.fr/img/LPoD/LPoD_a000_week.png" target="_blank"><img class="aligncenter" src="http://files.hypervisor.fr/img/LPoD/LPoD_a000_small.png" alt="" width="395" height="172" /></a></p>
<p style="text-align: center;"><a href="http://files.hypervisor.fr/img/LPoD/LPoD_b000_week.png" target="_blank"><img class="aligncenter" src="http://files.hypervisor.fr/img/LPoD/LPoD_b000_small.png" alt="" width="395" height="172" /></a></p>
<p style="text-align: center;"><a href="http://files.hypervisor.fr/img/LPoD/LPoD_c000_week.png" target="_blank"><img class="aligncenter" src="http://files.hypervisor.fr/img/LPoD/LPoD_c000_small.png" alt="" width="395" height="172" /></a></p>
<p style="text-align: center;"><a href="http://files.hypervisor.fr/img/LPoD/LPoD_d000_week.png" target="_blank"><img class="aligncenter" src="http://files.hypervisor.fr/img/LPoD/LPoD_d000_small.png" alt="" width="395" height="172" /></a></p>
<p style="text-align: center;"><a href="http://files.hypervisor.fr/img/LPoD/LPoD_e000_week.png" target="_blank"><img class="aligncenter" src="http://files.hypervisor.fr/img/LPoD/LPoD_e000_small.png" alt="" width="395" height="172" /></a></p>
<p>Merci qui ? <img src='http://www.hypervisor.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.hypervisor.fr/?feed=rss2&amp;p=5456</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>The Phucking Salt</title>
		<link>http://www.hypervisor.fr/?p=5298</link>
		<comments>http://www.hypervisor.fr/?p=5298#comments</comments>
		<pubDate>Fri, 13 Feb 2015 07:54:16 +0000</pubDate>
		<dc:creator>NiTRo</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Kb]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[Bullshit]]></category>
		<category><![CDATA[overcommit]]></category>
		<category><![CDATA[salt]]></category>
		<category><![CDATA[TPS]]></category>
		<category><![CDATA[Transparent Page Sharing]]></category>

		<guid isPermaLink="false">http://www.hypervisor.fr/?p=5298</guid>
		<description><![CDATA[MAJ 18/05/2016 : Finalement les Large Pages c&#8217;est vraiment pas top&#8230;

These issues are due to bug in large page promotion path on destination host during vMotion.

MAJ 22/10/2015 : Et encore des mecs qui confondent cloud et homelab&#8230;
All experiments run on a dual CPU blade server with two AMD Opteron 6272 CPUs (16 cores each) and [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><em><span style="color: #ff0000;">MAJ 18/05/2016</span> : <a href="https://kb.vmware.com/kb/2144984" target="_blank">Finalement les Large Pages c&#8217;est vraiment pas top</a>&#8230;</em></p>
<blockquote>
<p style="text-align: justify;"><em>These issues are due to bug in large page promotion path on destination host during vMotion.</em></p>
</blockquote>
<p style="text-align: justify;"><em><span style="color: #ff0000;">MAJ 22/10/2015</span> : Et encore des mecs qui <a href="https://www.usenix.org/system/files/conference/woot15/woot15-paper-barresi.pdf" target="_blank">confondent cloud et homelab</a>&#8230;</em></p>
<blockquote><p>All experiments run on a dual CPU blade server with two AMD Opteron 6272 CPUs (16 cores each) and 32 GB of RAM.</p></blockquote>
<p style="text-align: justify;"><em><span style="color: #ff0000;">MAJ 26/02/2015</span> : <a href="http://kb.vmware.com/kb/2101903" target="_blank">Le patch pour la 5.0 vient de sortir</a>, la boucle est bouclée.</em></p>
<p style="text-align: justify;">Vous ne vous en êtes peut être pas rendu compte lors de votre dernière campagne de patching mais <a href="http://blogs.vmware.com/security/2014/10/transparent-page-sharing-additional-management-capabilities-new-default-settings.html" target="_blank"><strong>depuis mi-Octobre 2014, tout nouveau patch d&#8217;ESXi ajoute une fonctionnalité de salage pour TPS</strong></a>. <strong>Désactivée lors de son introduction mais bien destinée à être activée de force lors d&#8217;un patch ultérieur</strong>. Jusqu’à fin Janvier, seule la version 5.1 était concernée mais depuis le 27/01 la version 5.5 bénéficie aussi de cette nouvelle &#8220;feature&#8221;. <span style="text-decoration: line-through;">La 5.0 est encore épargnée à ce jour</span>.</p>
<blockquote>
<p style="text-align: justify;">As we noted earlier on Oct 16, Nov 24 and Dec 4, VMware has introduced new TPS (Transparent Page Sharing) management options. Today’s release of ESXi 5.5 U2d restricts TPS to individual VMs and disables inter-VM TPS by default unless an administrator chooses to re-enable it. Please see <a href="http://kb.vmware.com/kb/2097593" target="_blank">KB 2097593</a> for full details on the functionality.</p>
</blockquote>
<p style="text-align: justify;"><strong>Depuis l&#8217;annonce, beaucoup de bullshit</strong>. De nombreux blogeurs ont donné leur avis sur la question en omettant volontairement (aka je-suis-pas-un-expert-en-sécu) d&#8217;analyser les recherches qui ont abouti a cette rustine. Nous ne sommes pas expert en matière de sécurité non plus, par contre on ne va pas se gêner pour décortiquer les résultats de ces recherches et les critiquer. On commence par <a href="http://kb.vmware.com/kb/2080735" target="_blank">la kb 2080735 de VMware</a> :</p>
<blockquote>
<p style="text-align: justify;">Published academic papers have demonstrated that by forcing a flush and reload of cache memory, it is possible to measure memory timings to try and determine an AES encryption key in use on another virtual machine running on the same physical processor of the host server if Transparent Page Sharing is enabled between the two virtual machines. <strong>This technique works only in a highly controlled system configured in a non-standard way that VMware believes would not be recreated in a production environment</strong>.</p>
</blockquote>
<blockquote>
<p style="text-align: justify;">Even though VMware believes information being disclosed <strong>in real world conditions is unrealistic</strong>, out of an abundance of caution upcoming ESXi Update releases will no longer enable TPS between Virtual Machines by default</p>
</blockquote>
<p>C&#8217;est pourtant clair mais VMware à quand même choisi de jouer la carte de la sécurité.</p>
<p style="text-align: justify;"><img class="aligncenter" src="http://files.hypervisor.fr/img/salt/BeginNoSaltArea.jpg" alt="" width="306" height="203" /></p>
<p style="text-align: justify;">Une petit coup de Google nous a rapidement permis d&#8217;identifier les rapports de recherche à l&#8217;origine du mélodrame : <a href="https://eprint.iacr.org/2014/248.pdf" target="_blank">Fine grain Cross-VM Attacks on Xen and VMware are possible!</a> et <a href="https://eprint.iacr.org/2014/435.pdf" target="_blank">Wait a minute! A fast, Cross-VM attack on AES</a> dont les travaux semble basés sur un autre rapport datant de 2013 : <a href="https://eprint.iacr.org/2013/448.pdf" target="_blank">FLUSH+RELOAD: a High Resolution, Low Noise, L3 Cache Side-Channel Attack</a></p>
<p>Extraits choisis du document de 2013 :</p>
<blockquote>
<p style="text-align: justify;">The technique uses the processor’s clflush instruction to evict the monitored memory locations from the cache, and then tests whether the data in these locations is back in the cache after allowing the victim program to execute a small number of instructions.</p>
</blockquote>
<blockquote>
<p style="text-align: justify;">While copy-on-write protects shared pages from modifications, it is not fully transparent. <strong>The delay introduced when modifying a shared page can be detected</strong> by processes, leading to a potential information leak attack.</p>
</blockquote>
<blockquote>
<p style="text-align: justify;">An important feature of the LLC in modern Intel processors is that it is an inclusive cache (NDLR : <a href="http://en.wikipedia.org/wiki/CPU_cache#Exclusive_versus_inclusive" target="_blank">Et donc pas AMD</a>). That is, the LLC contains copies of all of the data stored in the lower cache levels. Consequently, flushing or evicting data from the LLC also remove said data from all other cache levels of the processor. Our attack exploits this cache behaviour.</p>
</blockquote>
<blockquote>
<p style="text-align: justify;"><strong>Retrieving data from memory or from cache levels closer to memory takes longer than retrieving it from cache levels closer to the core. This difference in timing has been exploited for side-channel attacks</strong>.</p>
</blockquote>
<blockquote>
<p style="text-align: justify;">A round of attack consists of three phases. During the first phase, the monitored memory line is flushed from the cache hierarchy.</p>
<p style="text-align: justify;">The spy, then, waits to allow the victim time to access the memory line before the third phase.</p>
<p style="text-align: justify;">In the third phase, the spy reloads the memory line, measuring the time to load it. If during the wait phase the victim accesses the memory line, the line will be available in the cache and the reload operation will take a short time.</p>
</blockquote>
<p style="text-align: justify;">Maintenant qu&#8217;on en sait un peut plus sur la nature de l&#8217;attaque, voyons un peu les contraintes d&#8217;applications dans la vraie vie :</p>
<blockquote>
<p style="text-align: justify;">For a virtualised environment, <strong>the attacker needs access to a guest co-located on the same host as the victim guest</strong>. <a href="https://cseweb.ucsd.edu/~hovav/dist/cloudsec.pdf" target="_blank">Techniques for achieving co-location are described by Ristenpart et al</a>.<br />
[...]<br />
Identifying the OS and software version in co-resident guests has been dealt with <a href="https://staff.aist.go.jp/c.artho/papers/EuroSec2011-suzaki.pdf" target="_blank">in past research</a>.</p>
</blockquote>
<p>D&#8217;un coup de baguette magique, on se retrouve sur le même ESX avec le même GuestOS. Facile. On continue :</p>
<blockquote>
<p style="text-align: justify;">For the attack to work, <strong>the spy and the victim must execute on the same physical processor</strong>. For our testing, we set the processor affinity on the multi-processor system. However, in a real attack scenario the attack depends on the system scheduler.</p>
</blockquote>
<p style="text-align: justify;">Vous avez bien lu, la VM de l&#8217;attaquant doit résider sur le même processeur que la VM de la victime. Cache L3 oblige. Et c&#8217;est pas fini :</p>
<blockquote>
<p style="text-align: justify;"><strong>When performing the tests, the spy and the victim were the only load on the system</strong>. Such a scenario is not representative of a real system where multiple processes are running. We expect such load to create noise that will affect the quality of capture. Furthermore, for a load that includes multiple parallel instances of GnuPG, the spy will be unable to distinguish between memory access of each instance and will be unable to recover any data.</p>
</blockquote>
<p style="text-align: justify;">Donc, pour que l&#8217;attaque soit réalisable,<strong> il faut que la VM de l&#8217;attaquant se retrouve, avec la VM de la victime, seules sur le même socket du même ESX et avec le même GuestOS !</strong> Et c&#8217;est toujours pas fini.</p>
<p>Extraits choisis du document sur l&#8217;attaque AES :</p>
<blockquote>
<p style="text-align: justify;">We know that VMware implements TPS with large pages (2 MB) or small pages (4 KB). <strong>We decided to use the later one, since it seems to be the default for most systems</strong>. Furthermore, as stated in [<a href="http://www.vmware.com/files/pdf/mem_mgmt_perf_vsphere5.pdf" target="_blank">28</a>], even if the large page sharing is selected, the VMM will still look for identical small pages to share.</p>
</blockquote>
<p style="text-align: justify;">Sachant que <a href="http://www.hypervisor.fr/?p=4401" target="_blank"><strong>TPS ne supporte pas les large pages</strong></a> qui sont la configuration par défaut d&#8217;ESX depuis des années, non seulement <strong>ESX ne serait que partiellement vulnérable uniquement en cas d&#8217;overcommit important</strong> mais de plus le contexte initiale de l’étude est complètement faux.</p>
<blockquote>
<p style="text-align: justify;">Disabling the deduplication would make the attack impossible in the cloud however memory deduplication is highly performance beneficial, especially in cloud where multiple users share the same hardware. This is why we believe that the system designers should restrict the deduplication mechanism rather then completely disabling it.</p>
</blockquote>
<p>Quel dilemme&#8230;</p>
<blockquote><p>We not only performed the attack in native machine, but also in a <strong>cloud-like cross-VM scenario</strong>.</p></blockquote>
<p>&#8220;cloud-like&#8221; et pourtant :</p>
<blockquote><p>All experiments were performed on a machine featuring an Intel i5-3320M four core clocked at 3.2GHz.</p></blockquote>
<p><strong>Ironie du sort, <a href="https://eprint.iacr.org/2014/970.pdf" target="_blank">un récent rapport de recherche décrit un nouveau type d&#8217;attaque sur le cache L3 en exploitant&#8230;les large pages</a> !</strong></p>
<blockquote>
<p style="text-align: justify;"><strong>S$A: A new deduplication free L3 cache side channel technique</strong>: We proposed a new side channel technique that is applied in the L3 cache and therefore can be applied in cross-core scenarios. The new side channel technique bases its methodology in the usage of huge size pages, which give extra information about the position that each memory location occupies in the L3 cache.</p>
</blockquote>
<p>Prochaine étape : désactivation des large pages par défaut ou V2P en masse.</p>
<blockquote>
<p style="text-align: justify;">The relevance of these studies is highlighted by the prompt security update by VMware, making memory deduplication an opt-in feature that was formerly enabled by default.<br />
[...]<br />
We have disclosed our attack to the security teams of VMware, Amazon AWS and Citrix.</p>
</blockquote>
<p style="text-align: justify;">Mais revenons en au salting et à ses effets en cas d&#8217;overcommit. Sur un Dell R730 avec 256Go de RAM, nous nous sommes amusé à démarrer <strong>512 VM</strong> SUSE 11 x64 1vcpu 2Go de vRAM avec des combinaisons de settings Mem.ShareForceSalting et Mem.AllocGuestLargePage différentes. Pour éviter que ça coince pendant le swapout, nous avons <strong>redirigé les vswp sur des SSD NVMe</strong>. On commence en mode défaut (<strong>Mem.ShareForceSalting=2</strong> et <strong>Mem.AllocGuestLargePage=1</strong>) :</p>
<p style="text-align: justify;"><a href="http://files.hypervisor.fr/img/salt/vim_ShareForceSalting_2_AllocGuestLargePage_1.png"><img class="aligncenter" src="http://files.hypervisor.fr/img/salt/vim_ShareForceSalting_2_AllocGuestLargePage_1s.png" alt="" width="480" height="254" /></a></p>
<p style="text-align: justify;"><a href="http://files.hypervisor.fr/img/salt/esxtop_ShareForceSalting_2_AllocGuestLargePage_1.png"><img class="aligncenter" src="http://files.hypervisor.fr/img/salt/esxtop_ShareForceSalting_2_AllocGuestLargePage_1s.png" alt="" width="440" height="94" /></a></p>
<p style="text-align: justify;">La courbe d&#8217;overhead (orange) permet de se rendre compte de la progression du démarrage des 512 VM. On remarque qu&#8217;au 3/4 du bootstorm le premier mécanisme de reclaim est la swap, viennent ensuite la compression, le ballooning et seulement après le sharing (principalement des zéros). Avec 23Go de swap et 43Go de zip, n’espérez pas des temps de réponses de folie même avec du SSD. On continue sans le salting (<strong>Mem.ShareForceSalting=0</strong> et <strong>Mem.AllocGuestLargePage=1</strong>) :</p>
<p style="text-align: justify;"><a href="http://files.hypervisor.fr/img/salt/vim_ShareForceSalting_0_AllocGuestLargePage_1.png"><img class="aligncenter" src="http://files.hypervisor.fr/img/salt/vim_ShareForceSalting_0_AllocGuestLargePage_1s.png" alt="" width="480" height="254" /></a></p>
<p style="text-align: justify;"><a href="http://files.hypervisor.fr/img/salt/esxtop_ShareForceSalting_0_AllocGuestLargePage_1.png"><img class="aligncenter" src="http://files.hypervisor.fr/img/salt/esxtop_ShareForceSalting_0_AllocGuestLargePage_1s.png" alt="" width="452" height="92" /></a></p>
<p>Avec plus de 100Go de sharing et seulement 3,6Go de swap les effets de l&#8217;overcommit (3:1 quand même) sont presque imperceptibles dans ce scénario même si on regrette de constater que le swapping est encore le 1er mécanisme à se déclencher. Maintenant passons en full small pages (<strong>Mem.ShareForceSalting=0</strong> et <strong>Mem.AllocGuestLargePage=0</strong>) :</p>
<p style="text-align: justify;"><a href="http://files.hypervisor.fr/img/salt/vim_ShareForceSalting_0_AllocGuestLargePage_0.png"><img class="aligncenter" src="http://files.hypervisor.fr/img/salt/vim_ShareForceSalting_0_AllocGuestLargePage_0s.png" alt="" width="480" height="254" /></a></p>
<p style="text-align: justify;"><a href="http://files.hypervisor.fr/img/salt/esxtop_ShareForceSalting_0_AllocGuestLargePage_0.png"><img class="aligncenter" src="http://files.hypervisor.fr/img/salt/esxtop_ShareForceSalting_0_AllocGuestLargePage_0s.png" alt="" width="445" height="92" /></a></p>
<p style="text-align: justify;">Là on est au top, 200Go de sharing et un démarrage tout en douceur sans swap, compression ni balloon. Et pour finir, notre <a href="http://www.hypervisor.fr/?p=5265" target="_blank">fameuse technique du Large Page on Demand</a> (<strong>Mem.ShareForceSalting=0</strong> <strong>Mem.AllocGuestLargePage=1</strong> et <strong>LPage.LPageAlwaysTryForNPT=0</strong>) :</p>
<p style="text-align: justify;"><a href="http://files.hypervisor.fr/img/salt/vim_ShareForceSalting_0_AllocGuestLargePage_1_LPageAlwaysTryForNPT_0.png"><img class="aligncenter" src="http://files.hypervisor.fr/img/salt/vim_ShareForceSalting_0_AllocGuestLargePage_1_LPageAlwaysTryForNPT_0s.png" alt="" width="480" height="254" /></a></p>
<p style="text-align: justify;"><a href="http://files.hypervisor.fr/img/salt/esxtop_ShareForceSalting_0_AllocGuestLargePage_1_LPageAlwaysTryForNPT_0.png"><img class="aligncenter" src="http://files.hypervisor.fr/img/salt/esxtop_ShareForceSalting_0_AllocGuestLargePage_1_LPageAlwaysTryForNPT_0s.png" alt="" width="469" height="92" /></a></p>
<p style="text-align: justify;">Même chose mais avec &#8220;seulement&#8221; 143Go de sharing, la différence étant vraisemblablement attribuée à des large pages.</p>
<p style="text-align: justify;">Moralité, <strong>optez pour un régime sans sel !</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.hypervisor.fr/?feed=rss2&amp;p=5298</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Large Pages on Demand</title>
		<link>http://www.hypervisor.fr/?p=5265</link>
		<comments>http://www.hypervisor.fr/?p=5265#comments</comments>
		<pubDate>Wed, 03 Sep 2014 12:08:59 +0000</pubDate>
		<dc:creator>NiTRo</dc:creator>
				<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[large pages]]></category>
		<category><![CDATA[MMU]]></category>
		<category><![CDATA[NUMA]]></category>
		<category><![CDATA[RAM]]></category>
		<category><![CDATA[TPS]]></category>

		<guid isPermaLink="false">http://www.hypervisor.fr/?p=5265</guid>
		<description><![CDATA[Comme nous vous l&#8217;avions promis, voici un retour d’expérience sur l&#8217;implémentation du paramètre LPageAlwaysTryForNPT à &#8220;0&#8243; qui force ESX à n&#8217;allouer une Large Page que lorsque le GuestOS d&#8217;une VM le lui demande explicitement et qui permet de bénéficier de TPS sans attendre que l&#8217;ESX n&#8217;ait à les &#8220;casser&#8221; en cas de contention.
In the cases [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><a href="http://www.hypervisor.fr/?p=4401" target="_blank">Comme nous vous l&#8217;avions promis</a>, voici un retour d’expérience sur l&#8217;implémentation du paramètre <a href="http://pubs.vmware.com/vsphere-55/topic/com.vmware.vsphere.resmgmt.doc/GUID-D98E6EC9-3730-4BC0-A9FC-93B9079E1AEE.html" target="_blank">LPageAlwaysTryForNPT</a> à &#8220;0&#8243; qui force ESX à n&#8217;allouer une Large Page que lorsque le GuestOS d&#8217;une VM le lui demande explicitement et qui permet de bénéficier de TPS <a href="http://kb.vmware.com/kb/1021095" target="_blank">sans attendre que l&#8217;ESX n&#8217;ait à les &#8220;casser&#8221; en cas de contention</a>.</p>
<blockquote><p>In the cases where host memory is overcommitted, ESX may have to swap out pages. Since ESX will not swap out large pages, during host swapping, a large page will be broken into small pages.</p></blockquote>
<p style="text-align: justify;">Afin d&#8217;avoir une meilleure visibilité sur ce qui change au moment où nous avons activé le paramètre et lancé une vague de vmotion au sein du cluster pour l&#8217;appliquer, nous avons utilisé les mêmes compteurs que <a href="http://www.hypervisor.fr/?p=4841" target="_blank">le &#8220;dashboard&#8221; Guest Memory</a> (aka <a href="http://pubs.vmware.com/vsphere-55/index.jsp?topic=%2Fcom.vmware.wssdk.apiref.doc%2Fvim.ResourcePool.Summary.QuickStats.html" target="_blank">ResourcePoolQuickStats</a>) pour en faire un rrd sous cacti (avec les même couleurs) :</p>
<p><img class="aligncenter" src="http://files.hypervisor.fr/img/LPoD/LPoD_utilization.png" alt="" width="418" height="321" /></p>
<p style="text-align: center;"><a href="http://files.hypervisor.fr/img/LPoD/LPoD_quickstats.png"><img class="aligncenter" src="http://files.hypervisor.fr/img/LPoD/LPoD_quickstats.png" alt="" width="476" height="246" /></a></p>
<p style="text-align: justify;"><strong>Un gain immédiat de 20% de RAM sans consommation CPU supplémentaire</strong> ni augmentation manifeste de latence (dans notre cas) :</p>
<p><img class="aligncenter" src="http://files.hypervisor.fr/img/LPoD/LPoD_cpu.png" alt="" width="395" height="172" /></p>
<p><img class="aligncenter" src="http://files.hypervisor.fr/img/LPoD/LPoD_RAM.png" alt="" width="395" height="172" /></p>
<p style="text-align: justify;">Et pour ceux qui se posent la question, dans ce cluster cumulant 1.5To de RAM attribuée à des VM Windows 2008 R2 et RHEL 6 x64, seulement 40Go de Large Pages sont allouées en moyenne.</p>
<p style="text-align: justify;">Moralité, TPS c&#8217;est bon, mangez-en !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hypervisor.fr/?feed=rss2&amp;p=5265</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>TPS is not dead !</title>
		<link>http://www.hypervisor.fr/?p=4401</link>
		<comments>http://www.hypervisor.fr/?p=4401#comments</comments>
		<pubDate>Mon, 03 Dec 2012 16:11:21 +0000</pubDate>
		<dc:creator>NiTRo</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Performance]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[dedup]]></category>
		<category><![CDATA[large pages]]></category>
		<category><![CDATA[memory overcommit]]></category>
		<category><![CDATA[TLB]]></category>
		<category><![CDATA[TPS]]></category>
		<category><![CDATA[vMMU]]></category>

		<guid isPermaLink="false">http://www.hypervisor.fr/?p=4401</guid>
		<description><![CDATA[Depuis l&#8217;introduction sur le marché x86 des serveurs capables de &#8220;hardware-assisted memory virtualization&#8221;, la question de Transparent Page Sharing (TPS) vs large pages (ou huges pages) revient souvent dans les discussions en rapport avec l&#8217;overcommit mémoire. En effet, nous avons souvent abordé le sujet, TPS ne supporte pas (pour des raisons évidentes) les large pages :
ESX will [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Depuis l&#8217;introduction sur le marché x86 des serveurs capables de &#8220;hardware-assisted memory virtualization&#8221;, la question de <strong>Transparent Page Sharing</strong> (TPS) vs <strong>large pages</strong> (ou <a href="http://en.wikipedia.org/wiki/Page_(computer_memory)" target="_blank">huges pages</a>) revient souvent dans les discussions en rapport avec l&#8217;overcommit mémoire. En effet, <a href="http://www.hypervisor.fr/?tag=tps" target="_blank">nous avons souvent abordé le sujet</a>, <a href="http://kb.vmware.com/kb/1021095" target="_blank">TPS ne supporte pas (pour des raisons évidentes) les large pages</a> :</p>
<blockquote><p><strong>ESX <strong>will not share</strong> large physical pages</strong> because:</p>
<p>The probability of finding two large pages that are identical is very low.<br />
The overhead of performing a bit-by-bit comparison for a 2MB page is much higher than for a 4KB page.</p></blockquote>
<p style="text-align: center;"><img class="aligncenter" src="http://files.hypervisor.fr/img/tps_mmu_lpages/tps_theory.png" alt="" width="218" height="180" /></p>
<p>Paradoxalement, <a href="http://books.google.fr/books?id=_Y2WiG6WfGkC&amp;lpg=PA194&amp;ots=I3XGm9JUB1&amp;pg=PA194#v=onepage&amp;q&amp;f=false" target="_blank">c&#8217;est dans l’excellent Windows Internals que nous avons trouvé l&#8217;explication la plus synthétique à propos des large pages</a> :</p>
<blockquote>
<p style="text-align: justify;">The primary advantage of large pages is speed of address translation for references to other data within the large page. This advantage exists because <strong>the first reference to any byte within a large page will cause the hardware’s translation look-aside buffer </strong>(TLB, described in a later section)<strong> to have in its cache the information necessary to translate references to any other byte within the large page.</strong> If small pages are used, more TLB entries are needed for the same range of virtual addresses, thus increasing recycling of entries as new virtual addresses require translation. This, in turn, means having to go back to the page table structures when references are made to virtual addresses outside the scope of a small page whose translation has been cached. The TLB is a very small cache, and thus large pages make better use of this limited resource.</p>
</blockquote>
<p style="text-align: justify;">On comprend donc aisément que sur des systèmes avec de plus en plus de RAM, les accès au TLB puissent être coûteux en CPU sans l&#8217;utilisation des large pages. Par contre, lorsqu&#8217;il n&#8217;y a plus de pages de 2Mo disponibles et parce que les large pages ne peuvent pas être swappées, ESX &#8220;casse&#8221; les large pages en small pages (dont le hash a déjà été computé) et TPS déduplique le tout :</p>
<blockquote>
<p style="text-align: justify;">Since ESX will not swap out large pages, during host swapping, a large page will be broken into small pages. ESX tries to share those small pages using the pre-generated hashes before they are swapped out.</p>
</blockquote>
<p style="text-align: justify;">Sur un système raisonnablement overcommité et sans tuning spécifique, <strong>l&#8217;ESX risque de ne pas &#8220;casser&#8221; et dedupliquer les pages suffisamment rapidement pour répondre à la demande de mémoire, ce qui peut engendrer une dégradation de performance </strong>(ballooning/zipping/swapping). A l&#8217;inverse, si le coût CPU est acceptable, <strong>le même système tuné pour ne faire que</strong> (ou presque que) <strong>des small pages n&#8217;aura pas cette problématique</strong>.</p>
<p style="text-align: justify;">Ci dessous, la comparaison des stats mémoire d&#8217;un cluster (composé de serveurs à base d&#8217;Intel Nehalem) sans tuning spécifique et des stats de ce même cluster après avoir forcé l&#8217;utilisation des small pages sur les vm (workload comparable) :</p>
<p style="text-align: center;"><a href="http://files.hypervisor.fr/img/tps_mmu_lpages/CHASSIS_04_HWMMU_default.png" target="_blank"><img class="aligncenter" src="http://files.hypervisor.fr/img/tps_mmu_lpages/CHASSIS_04_HWMMU_default.png" alt="" width="477" height="511" /></a></p>
<p style="text-align: center;"><a href="http://files.hypervisor.fr/img/tps_mmu_lpages/CHASSIS_04_HWMMU_disable_mmu_largepages.png" target="_blank"><img class="aligncenter" src="http://files.hypervisor.fr/img/tps_mmu_lpages/CHASSIS_04_HWMMU_disable_mmu_largepages.png" alt="" width="477" height="511" /></a></p>
<p style="text-align: justify;">La première chose qui frappe c&#8217;est le compteur &#8220;consumed&#8221; qui a diminué de moitié (le workload s&#8217;y prête bien dans ce cas puisqu&#8217;il s&#8217;agit d&#8217;une ferme de serveurs xenapp) grâce à TPS,  le compteur &#8220;shared&#8221; a en effet été multiplié par 10. Dans le cas présent, <strong>la consommation CPU a augmenté d&#8217;environ 15%</strong> lors du passage aux small pages.</p>
<p style="text-align: justify;">Voici la commande powershell qui a permis de désactiver les large pages sur les vm (vm reboot ou &#8220;<a href="http://www.hypervisor.fr/?p=3235" target="_blank">vmotion shake</a>&#8221; pour la prise en compte) :</p>
<pre class="brush: powershell; title: ; notranslate">Get-View -ViewType VirtualMachine|?{!$_.Config.Template -and $_.Runtime.ConnectionState -eq &quot;connected&quot;}|?{!($_.Config.ExtraConfig|?{$_.Key -eq &quot;monitor_control.disable_mmu_largepages&quot;}|?{$_.value -match &quot;true|1&quot;})}|%{$_.ReconfigVM((New-Object VMware.Vim.VirtualMachineConfigSpec -Property @{extraconfig=(New-Object Vmware.Vim.OptionValue -Property @{Key=&quot;monitor_control.disable_mmu_largepages&quot;;Value=&quot;1&quot;})}))}</pre>
<p>Il est également possible d&#8217;obtenir un résultat similaire en forçant la VMM a utiliser le mode mmu software :</p>
<p style="text-align: center;"><a href="http://files.hypervisor.fr/img/tps_mmu_lpages/CHASSIS_04_SWMMU.png" target="_blank"><img class="aligncenter" src="http://files.hypervisor.fr/img/tps_mmu_lpages/CHASSIS_04_SWMMU.png" alt="" width="471" height="505" /></a></p>
<p style="text-align: justify;">C&#8217;est quasiment identique mais la grande classe c&#8217;est qu&#8217;en powershell on peut forcer le mode cpu auto et le mode mmu software de la VMM (impossible en GUI) :</p>
<pre class="brush: powershell; title: ; notranslate">Get-View -ViewType virtualmachine|?{!$_.Config.Template -and $_.Runtime.ConnectionState -eq &quot;connected&quot;}|?{!($_.Config.Flags.VirtualExecUsage -eq &quot;hvauto&quot; -and $_.Config.Flags.VirtualMmuUsage -eq &quot;off&quot;)}|%{($_.ReconfigVM_Task((New-Object VMware.Vim.VirtualMachineConfigSpec -Property @{flags=(New-Object VMware.Vim.VirtualMachineFlagInfo -property @{virtualExecUsage=&quot;hvauto&quot;;virtualMmuUsage=&quot;off&quot;})})))}</pre>
<p style="text-align: center;"><a href="http://files.hypervisor.fr/img/tps_mmu_lpages/vmm_hidden.png" target="_blank"><img class="aligncenter" src="http://files.hypervisor.fr/img/tps_mmu_lpages/vmm_hidden.png" alt="" width="420" height="372" /></a></p>
<p style="text-align: justify;">C&#8217;est beau mais pas vraiment pratique à maintenir à cause des erreurs possibles via la GUI. De plus, nous avons eu l&#8217;opportunité précieuse d&#8217;échanger avec un Senior Staff Engineer de chez VMware qui nous a laissé entendre que ce n&#8217;était pas la meilleure option :</p>
<blockquote>
<p style="text-align: justify;">The sw-mmu [...] has slightly higher overheads (for the shadow pagetables and related data structures) and this will reduce the total available memory for backing guest pages.</p>
</blockquote>
<p style="text-align: justify;">Dans notre grande quête d&#8217;overcommit, notre contact chez VMware nous a parlé d&#8217;un paramètre assez génial qui permet de changer la politique d&#8217;allocation agressive de large pages de la mmu (en anglais c&#8217;est plus facile à comprendre) :</p>
<blockquote>
<p style="text-align: justify;">The heuristic, when enabled, basically says that whenever possible when backing any part of a 2MB-region of guest memory, try to do so with a large 2MB page. This may involve remapping existing small 4KB pages into that new 2MB page. But it basically tries to aggressively back everything large</p>
</blockquote>
<p style="text-align: justify;">Ce qui explique pourquoi, par défaut, TPS n&#8217;a presque pas d&#8217;effet (<a href="http://www.yellow-bricks.com/2011/01/10/how-cool-is-tps/" target="_blank">sauf pour les zero</a>) même pour les guest qui ne &#8220;demandent&#8221; pas de large pages. La raison est bien liée aux performances :</p>
<blockquote>
<p style="text-align: left;">When overcommitment isn&#8217;t an issue, large pages really do help TLB-performance with hw-mmu on most workloads.</p>
</blockquote>
<p style="text-align: justify;">A l&#8217;inverse, si on passe le paramètre à 0 (sched.mem.alwaysTryLPageAlloc pour une vm ou LPage.LPageAlwaysTryForNPT pour un host) la mmu n’allouera une large page qu&#8217;à la demande du guest. <a href="http://pubs.vmware.com/vsphere-51/topic/com.vmware.vsphere.resmgmt.doc/GUID-D98E6EC9-3730-4BC0-A9FC-93B9079E1AEE.html" target="_blank">L&#8217;explication est d&#8217;ailleurs disponible au fin fond du documentation center de VMware</a> :</p>
<blockquote>
<p style="text-align: justify;">Try to allocate large pages for nested page tables (called &#8216;RVI&#8217; by AMD or &#8216;EPT&#8217; by Intel). If you enable this option, all guest memory is backed with large pages in machines that use nested page tables. If NPT is not available, only some portion of guest memory is backed with large pages.</p>
</blockquote>
<p style="text-align: justify;">Vous aurez compris où nous voulons en venir : trouver <strong>un bon équilibre entre le bénéfice en matière de performance des large pages (presque incontestable lorsque c&#8217;est le guest qui en fait la demande) et le bénéfice de TPS en matière de consolidation mémoire</strong>. Exemple sur notre fameux cluster :</p>
<p style="text-align: center;"><a href="http://files.hypervisor.fr/img/tps_mmu_lpages/CHASSIS_04_HWMMU_alwaysTryLPageAlloc.png" target="_blank"><img class="aligncenter" src="http://files.hypervisor.fr/img/tps_mmu_lpages/CHASSIS_04_HWMMU_alwaysTryLPageAlloc.png" alt="" width="469" height="506" /></a></p>
<p style="text-align: justify;">Si vous êtes attentif vous aurez remarqué qu&#8217;il n&#8217;y a que très peu de différence de consolidation avec les résultats en mode small pages forcées, c&#8217;était une feinte pour ceux du fond qui ne suivent pas&#8230; Dans ce cas c&#8217;est parfaitement normal car aucun des guestOS présent dans cet exemple n&#8217;utilise de large pages (windows 2003 32bit). Si les vm avaient été, par exemple, des windows 2008 R2, le niveau de consommation se serait situé quelque part entre le &#8220;full&#8221; large pages et le &#8220;full&#8221; small pages en fonction des applications et du comportement de l&#8217;OS. Nous ne manquerons pas de compléter ce post avec un exemple impliquant des guestOS et des applications exploitant les large pages.</p>
<p>Voici la commande powershell qui a permis de désactiver sched.mem.alwaysTryLPageAlloc sur les vm (vm reboot ou &#8220;<a href="http://www.hypervisor.fr/?p=3235" target="_blank">vmotion shake</a>&#8221; pour la prise en compte) :</p>
<pre class="brush: powershell; title: ; notranslate">Get-View -ViewType VirtualMachine|?{!$_.Config.Template -and $_.Runtime.ConnectionState -eq &quot;connected&quot;}|?{!($_.Config.ExtraConfig|?{$_.Key -eq &quot;sched.mem.alwaysTryLPageAlloc&quot;}|?{$_.value -match &quot;false|0&quot;})}|%{$_.ReconfigVM((New-Object VMware.Vim.VirtualMachineConfigSpec -Property @{extraconfig=(New-Object Vmware.Vim.OptionValue -Property @{Key=&quot;sched.mem.alwaysTryLPageAlloc&quot;;Value=&quot;0&quot;})}))}</pre>
<p style="text-align: left;">Pour afficher un tableau récapitulatif des infos qui nous intéressent :</p>
<pre class="brush: powershell; title: ; notranslate">Get-View -ViewType VirtualMachine|?{!$_.Config.Template -and $_.Runtime.ConnectionState -eq &quot;connected&quot;}|select @{n=&quot;VM&quot;;e={$_.Name}}, @{n=&quot;HV&quot;;e={$_.Config.Flags.VirtualExecUsage}}, @{n=&quot;HVMMU&quot;;e={$_.Config.Flags.VirtualMmuUsage}}, @{n=&quot;disable_mmu_largepages&quot;;e={($_.Config.ExtraConfig|?{$_.Key -eq &quot;monitor_control.disable_mmu_largepages&quot;}).value}}, @{n=&quot;alwaysTryLPageAlloc&quot;;e={($_.Config.ExtraConfig|?{$_.Key -eq &quot;sched.mem.alwaysTryLPageAlloc&quot;}).value}}, @{n=&quot;ESX&quot;;e={(Get-View -property Name $_.Runtime.Host).Name}}|sort hv,hvmmu,disable_mmu_largepages,alwaysTryLPageAlloc,ESX|ft -AutoSize</pre>
<p style="text-align: center;"><a href="http://files.hypervisor.fr/img/tps_mmu_lpages/vmm_mem_adv.png" target="_blank"><img class="aligncenter" src="http://files.hypervisor.fr/img/tps_mmu_lpages/vmm_mem_adv.png" alt="" width="424" height="191" /></a></p>
<p style="text-align: left;"><span style="text-align: justify;">Pour information, depuis ESXi 5.0, il existe une commande très utile pour monitorer l&#8217;utilisation des large pages (memstats -r lpage-stats -v) :</span></p>
<p style="text-align: center;"><a href="http://files.hypervisor.fr/img/tps_mmu_lpages/memstats_lpage.png" target="_blank"><img class="aligncenter" src="http://files.hypervisor.fr/img/tps_mmu_lpages/memstats_lpage.png" alt="" width="414" height="337" /></a></p>
<p style="text-align: justify;">En cas de vmotion, les pages de la &#8220;future&#8221; vm sont allouées au format 4k et reconverties par la suite :</p>
<blockquote>
<p style="text-align: justify;">The vmkernel allocates the memory for a VM during precopy using small pages. These are then converted to large as the VM begins to run but it is based on guest accesses. esx5.0 and esx5.1 each improved on the ability to recover the large mappings.</p>
</blockquote>
<p style="text-align: justify;">Et parce que nous sommes de grands fan de l&#8217;overcommit mémoire, voici notre <a href="http://upload.wikimedia.org/wikipedia/commons/5/5f/Rue_Boutebrie.jpg" target="_blank">poudre de perlimpinpin</a> à ajouter dans vos recettes de scripts de déploiements si vous voulez overcommiter bien comme il faut (nous déclinons toute implosion de votre infra&#8230;) :</p>
<pre class="brush: bash; title: ; notranslate">
vim-cmd hostsvc/advopt/update VMkernel.Boot.sharePerNode bool false
vim-cmd hostsvc/advopt/update Mem.ShareRateMax long 32768
vim-cmd hostsvc/advopt/update Mem.ShareScanTime long 10
vim-cmd hostsvc/advopt/update Mem.ShareScanGHz long 32
vim-cmd hostsvc/advopt/update Mem.IdleTax long 95
#vim-cmd hostsvc/advopt/update Mem.AllocGuestLargePage long 0
#vim-cmd hostsvc/advopt/update Mem.AllocGuestRemoteLargePage long 0
#vim-cmd hostsvc/advopt/update LPage.LPageAlwaysTryForNPT long 0
vim-cmd hostsvc/advopt/update Mem.MemZipMaxPct long 25
#vsish -e set /sched/freeMemoryState/minFreePct 3
</pre>
<p style="text-align: justify;">Nous finirons par <a href="http://files.hypervisor.fr/doc/virtualization_for_dummies.pdf#page=27" target="_blank">une petite citation pour ceux qui ne jurent que par les large pages</a> (qui a dit Hyper-V ?!) :</p>
<blockquote>
<p style="text-align: justify;">The performance increase is somewhat <strong>dependant upon the type of workload</strong> the virtual machine is executing; memory-intensive applications see more performance improvement than applications that are not heavily dependent on memory access.</p>
</blockquote>
<p style="text-align: justify;">Un grand merci à <a href="http://www.linkedin.com/pub/alex-garthwaite/14/899/745" target="_blank"><strong>Alex Garthwaite</strong></a> pour son aide à la rédaction de ce post et à la compréhension des mécanismes de gestion de la mémoire d&#8217;ESX.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hypervisor.fr/?feed=rss2&amp;p=4401</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Hypervisor Wars : Core Parking GreenbullshIT</title>
		<link>http://www.hypervisor.fr/?p=3037</link>
		<comments>http://www.hypervisor.fr/?p=3037#comments</comments>
		<pubDate>Sat, 04 Jun 2011 23:46:34 +0000</pubDate>
		<dc:creator>NiTRo</dc:creator>
				<category><![CDATA[Hyper-V]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[ballooning]]></category>
		<category><![CDATA[Bullshit]]></category>
		<category><![CDATA[DPM]]></category>
		<category><![CDATA[swapping]]></category>
		<category><![CDATA[TPS]]></category>

		<guid isPermaLink="false">http://www.hypervisor.fr/?p=3037</guid>
		<description><![CDATA[Il y a quelques semaines, Microsoft a posté sur le TechNet Edge une série de vidéos au titre pour le moins évocateur : Virtualization Jump Start. Le but étant d&#8217;enfumer les ignorants avec une petite mise en scène hautement propagandesque qui rappelle celle des impayables guignols de la virtualization.

L’initiative pourrait rester valable si elle n&#8217;était pas gavée de gros morceaux de bullshit comme ce magnifique [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Il y a quelques semaines, Microsoft a posté sur le TechNet Edge une série de vidéos au titre pour le moins évocateur : <a href="http://technet.microsoft.com/en-us/edge/ff832960.aspx?category=Jump%20Start" target="_blank">Virtualization Jump Start</a>. Le but étant d&#8217;enfumer les ignorants avec une petite mise en scène hautement propagandesque qui rappelle celle des impayables <a href="http://www.hypervisor.fr/?p=701" target="_blank">guignols de la virtualization</a>.</p>
<p><iframe frameborder="0" width="480" height="270" src="http://www.dailymotion.com/embed/video/xj3wq2?logo=0&#038;hideInfos=1"></iframe><br />
L’initiative pourrait rester valable si elle n&#8217;était pas gavée de gros morceaux de bullshit comme ce magnifique tableau comparatif :</p>
<p style="text-align: center;"><a href="http://files.hypervisor.fr/img/parking/SS-2011-05-06_02.16.05.png" title=" " rel="lightbox[3037]"><img class="size-medium wp-image-3077 aligncenter" title=" " src="http://files.hypervisor.fr/img/parking/SS-2011-05-06_02.16.05.png" alt="" width="300" height="224" /></a></p>
<p style="text-align: center;">
<p style="text-align: justify;">Notre <a href="http://bullshito.net/wp-content/uploads/2010/01/bullshit-o-meter.jpg" target="_blank">bullshit-o-meter</a>, déjà dans le rouge, a totalement grillé sur <a href="http://technet.microsoft.com/en-us/edge/virtualization-jump-start-02-differentiating-microsoft-vmware" target="_blank">la séquence comparative Core Parking vs DPM (extrait ci-dessus)</a>. Notre brave Symon (&#8220;Microsoft Technical Evangelist&#8221; en chemise bleu) semble persuadé qu&#8217;un serveur allumé consomme autant qu&#8217;un serveur éteint (où l&#8217;inverse). <a href="http://www.microsoft.com/windowsserver2008/en/us/r2-management.aspx" target="_blank">Et pourtant</a> :</p>
<blockquote>
<p style="text-align: left;">The Core Parking feature allows Windows Server 2008 R2 to consolidate processing onto the fewest number of possible processor cores, and suspends inactive processor cores</p>
</blockquote>
<p style="text-align: justify;">Même si le CPU représente une part non négligeable de la consommation d&#8217;un serveur, il n&#8217;est question en moyenne que d&#8217;<strong>1/4 à 1/3 de la consommation totale</strong>. Mais <a href="http://4sysops.com/archives/scvmm-2012-review-part-4-bare-metal-configuration-dynamic-power-optimization/" target="_blank">quelque chose nous dit</a> que M$ a fini par s&#8217;en apercevoir, ils n&#8217;ont juste pas encore prévenu Symon. Néanmoins, pour pouvoir consolider au maximum il faut un peu mieux que <a href="http://www.vcritical.com/2011/04/hyper-v-dynamic-memory-not-quite-ready-to-demo/" target="_blank">Dynamic Memory</a>&#8230;</p>
<p style="text-align: justify;">Démonstration avec un cluster, hébergeant 66 VM (W2K3 &#8211; 2Go), composé de 12 serveurs bi Xeon 5345 + 8Go de RAM sous ESXi 4.1 build 348481. Les VM de ce cluster devant etre dispo à 100% entre 8h et 19h, <a href="http://www.vmware.com/files/pdf/Distributed-Power-Management-vSphere.pdf" target="_blank">Distributed Power Management</a> est programmé dans vCenter pour s&#8217;activer à 20h et se désactiver à 7h (hors WE). Résultat, <strong>9 serveurs sur 12 OFF</strong> (pour Symon, ça veut plus d’électricité du tout) en heures creuses, c&#8217;est à dire 60% du temps dans notre cas :</p>
<p style="text-align: left;"><a href="http://files.hypervisor.fr/img/parking/Screenshot-2011-06-03_23.22.19.png" title=" " rel="lightbox[3037]"><img class="aligncenter size-medium wp-image-3065" title=" " src="http://www.hypervisor.fr/wp-content/uploads/2011/06/Screenshot-2011-06-03_23.22.19-300x114.png" alt="" width="300" height="114" /></a><a href="http://files.hypervisor.fr/img/parking/Screenshot-2011-06-03_23.14.17.png" title=" " rel="lightbox[3037]"><img class="aligncenter size-medium wp-image-3066" title=" " src="http://www.hypervisor.fr/wp-content/uploads/2011/06/Screenshot-2011-06-03_23.14.17-300x150.png" alt="" width="300" height="150" /></a>Evidemment, impossible d&#8217;atteindre ce taux de consolidation hallucinant de 600% sans l&#8217;aide de <a href="http://www.vmware.com/files/pdf/techpaper/vsp_41_perf_memory_mgmt.pdf" target="_blank">TPS, Ballooning, Memory compression et Hypervisor swapping</a> :</p>
<p style="text-align: center;"><a href="http://files.hypervisor.fr/img/parking/Screenshot-2011-06-03_23.43.09.png" title=" " rel="lightbox[3037]"><img class="aligncenter size-full wp-image-3095" title=" " src="http://www.hypervisor.fr/wp-content/uploads/2011/06/Screenshot-2011-06-03_23.43.09.png" alt="" width="486" height="266" /></a></p>
<p style="text-align: center;">
<p style="text-align: left;">Ça, c&#8217;est du GreenIT et <a href="http://www.hypervisor.fr/?p=317" target="_blank">c&#8217;est dispo depuis 2008</a> !</p>
]]></content:encoded>
			<wfw:commentRss>http://www.hypervisor.fr/?feed=rss2&amp;p=3037</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>TPS &amp; vMMU (le retour) &#8211; MAJ</title>
		<link>http://www.hypervisor.fr/?p=1879</link>
		<comments>http://www.hypervisor.fr/?p=1879#comments</comments>
		<pubDate>Wed, 24 Feb 2010 16:13:26 +0000</pubDate>
		<dc:creator>NiTRo</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[RVI]]></category>
		<category><![CDATA[TPS]]></category>
		<category><![CDATA[vMMU]]></category>

		<guid isPermaLink="false">http://www.hypervisor.fr/?p=1879</guid>
		<description><![CDATA[Nous en parlions il y a quelques temps déjà, le TPS ne fonctionne pas lorsque vMMU est pris en charge matériellement (RVI ou EPT) à cause des &#8220;large pages&#8221;. Nous nous sommes livrés à de petites expériences pour illustrer la différence swMMU/hwMMU :

Les tests ont été fait sur un serveur lame IBM LS42 (Opteron 8376 [...]]]></description>
			<content:encoded><![CDATA[<p>Nous en parlions <a href="http://www.hypervisor.fr/?p=580" target="_blank">il y a quelques temps déjà</a>, le TPS ne fonctionne pas lorsque vMMU est pris en charge matériellement (RVI ou EPT) à cause des &#8220;large pages&#8221;. Nous nous sommes livrés à de petites expériences pour illustrer la différence swMMU/hwMMU :</p>
<p style="text-align: center;"><a href="http://hypervisor.free.fr/img/swMMU-hwMMU.jpg" title="vMMU" rel="lightbox[1879]"><img class="aligncenter" title="vMMU" src="http://hypervisor.free.fr/img/swMMU-hwMMU.jpg" alt="" width="458" height="258" /></a></p>
<p style="text-align: left;">Les tests ont été fait sur un serveur lame IBM LS42 (Opteron 8376 HE / 32Go), nous y avons démarré 30 VM identiques (W2K3EE) à 10sec d&#8217;intervalle, avec le paramètre de vMMU forcé. On voit clairement sur le graphique que le TPS &#8220;récupère&#8221; beaucoup plus de mémoire en swMMU qu&#8217;en hwMMU.</p>
<p style="text-align: left;"><a href="http://communities.vmware.com/message/1481861" target="_blank">Halesh (VMware R&amp;D) nous a confirmé</a> que dans cette situation, le TPS n&#8217;agissait que sur les pages &#8220;zeroed&#8221; au boot de la VM. Seongbeom Kim (VMware) nous en dis plus par mail :</p>
<blockquote><p>On EPT/RVI platform, large pages are used to back guest memory request for better performance. This delays page sharing until the host goes into memory overcommitted situation.<br />
<strong>In more recent updates to ESX4.0 (including build 219382), zero pages are shared in 4K granularity while guestOS boot-process zeros all guest memory.</strong><br />
This approach provides early sharing and can be beneficial for guests that do not access all the configured memory.<br />
Whenever the shared page is broken, we try to back it with large page to achieve better performance.</p></blockquote>
<p style="text-align: left;">Mais le plus fort c&#8217;est que <strong>le vMMU peut être changé à chaud grâce à VMotion</strong> (en changeant le paramètre avant le VMotion bien-sur) ! Pour illustrer cette prouesse purement futile, nous avons superposé les 2 graphiques mémoire des 2 hosts :</p>
<p style="text-align: center;"><a href="http://hypervisor.free.fr/img/vMMU_vMotion.jpg" title="vMMU vMotion" rel="lightbox[1879]"><img class="aligncenter" title="vMMU vMotion" src="http://hypervisor.free.fr/img/vMMU_vMotion.jpg" alt="" width="400" height="112" /></a></p>
<p style="text-align: left;"><span style="text-decoration: line-through;">Nous attendons d&#8217;en savoir plus sur la &#8220;légitimité&#8221; de cette &#8220;feature&#8221;&#8230;<br />
</span></p>
<p style="text-align: left;">Selon Halesh, le fonctionnement de VMotion explique cet effet :</p>
<blockquote>
<p style="text-align: left;">For VMotion we need common CPUs across source &amp; destination. But as you said during vmotion, vMMU worlds are restarted/newly created on destination this might be supporting.</p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.hypervisor.fr/?feed=rss2&amp;p=1879</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Virtualized MMU, RVI &amp; TPS</title>
		<link>http://www.hypervisor.fr/?p=580</link>
		<comments>http://www.hypervisor.fr/?p=580#comments</comments>
		<pubDate>Wed, 11 Mar 2009 01:01:04 +0000</pubDate>
		<dc:creator>NiTRo</dc:creator>
				<category><![CDATA[Tips & Tricks]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[ESX]]></category>
		<category><![CDATA[ESXi]]></category>
		<category><![CDATA[TPS]]></category>
		<category><![CDATA[vMMU]]></category>

		<guid isPermaLink="false">http://www.hypervisor.fr/?p=580</guid>
		<description><![CDATA[Traduction : Nous allons parler aujourd&#8217;hui de virtualized MMU (Memory Management Unit), de RVI (Rapid Virtualization Indexing) et de TPS (Transparent Page Sharing).
Tout d&#8217;abord, nous vous conseillons vivement de consulter (si ce n&#8217;est pas déjà fait) le pdf de Carl A. Waldspurger sur les différentes techniques de &#8220;conservation&#8221; de la mémoire utilisé par VMware ESX.
Ce [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Traduction : Nous allons parler aujourd&#8217;hui de virtualized MMU (Memory Management Unit), de RVI (Rapid Virtualization Indexing) et de TPS (Transparent Page Sharing).</p>
<p style="text-align: justify;">Tout d&#8217;abord, nous vous conseillons vivement de consulter (si ce n&#8217;est pas déjà fait) <a href="http://www.waldspurger.org/carl/papers/esx-mem-osdi02.pdf">le pdf de Carl A. Waldspurger sur les différentes techniques de &#8220;conservation&#8221; de la mémoire</a> utilisé par VMware ESX.</p>
<p style="text-align: justify;">Ce document traite notamment de l&#8217;un des points fort d&#8217;ESX, le Transparent Page Sharing. Pour faire simple, cette fonction fait pointer des pages mémoires identiques (aux seins de différentes VM) vers une page physique.</p>
<p style="text-align: justify;">Voici l&#8217;exemple d&#8217;un host ESX 3.5 hébergeant 70 VM (presque toutes sous Windows 2003) qui ont 25Go de pages mémoire en commun. Ces 25Go n&#8217;occupent que 4Go de RAM physiquement :</p>
<p><a href="http://www.hypervisor.fr/wp-content/uploads/2009/03/pshare.jpg" title="pshare" rel="lightbox[580]"><img class="aligncenter size-medium wp-image-581" title="pshare" src="http://www.hypervisor.fr/wp-content/uploads/2009/03/pshare-300x173.jpg" alt="" width="300" height="173" /></a></p>
<p>D&#8217;après VMware, l&#8217;overhead de cette fonction n&#8217;excéderait pas 1%.</p>
<p>Malheureusement, d&#8217;après <a href="http://www.yellow-bricks.com/2009/03/06/virtualized-mmu-and-tp/">la récente expérience de Duncan</a> le TPS ne ferait pas bon ménage avec le RVI.</p>
<p><span id="more-580"></span></p>
<p style="text-align: justify;">Le RVI (fonctionnalité des CPU AMD) est considéré comme le second niveau de virtualisation matériel. Il permet une accélération matériel de la gestion des transactions vRAM &lt;&gt; pRAM (MMU). En effet, la gestion RAM physique/RAM virtuelle (dans les VM) est traditionnellement gérée de façon logiciel par l&#8217;hyperviseur. le RVI permet donc de s&#8217;affranchir du coût CPU qu&#8217;engendre cette gestion (virtualized MMU).</p>
<p><a href="http://www.hypervisor.fr/wp-content/uploads/2009/03/vmmu.jpg" title="vmmu" rel="lightbox[580]"><img class="aligncenter size-medium wp-image-582" title="vmmu" src="http://www.hypervisor.fr/wp-content/uploads/2009/03/vmmu-300x97.jpg" alt="" width="300" height="97" /></a></p>
<p style="text-align: justify;">Jason nous en explique un peu plus sur le fonctionnement du RVI <a href="http://www.boche.net/blog/index.php/2009/03/08/rapid-virtualization-indexing-rvi/">sur son blog</a> et nous informe que la version d&#8217;Intel (l&#8217;EPT) de cette technologie devrait être disponible dans le courant de l&#8217;année.</p>
<p style="text-align: justify;">A la demande de Duncan, Carl nous explique que le RVI fonctionne majoritairement en mode &#8220;large pages&#8221; (2Mo) ce qui n&#8217;est pas compatible avec le TPS (qui ne fonctionne que sur des pages de 4ko).</p>
<p style="text-align: justify;">Cette explication est d&#8217;ailleurs confirmée par <a href="http://www.vmware.com/files/pdf/large_pg_performance.pdf">un white paper VMware sur l&#8217;utilisation des &#8220;larges pages&#8221;</a> :</p>
<blockquote><p>In ESX Server 3.5 and ESX Server 3i v3.5, large pages cannot be shared as copy‐on‐write pages. This means, the ESX Server page sharing technique might share less memory when large pages are used instead of small pages.</p></blockquote>
<p style="text-align: justify;">Nous ignorons encore de quelle différence il est question mais le véritable problème est une possible dégradation de performance en cas de memory overcommit trop important:</p>
<blockquote><p>When free machine memory is low and before swapping happens, the ESX Server kernel attempts to share identical small pages even if they are parts of large pages. As a result, the candidate large pages on the host machine are broken into small pages.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.hypervisor.fr/?feed=rss2&amp;p=580</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
