<?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>thattommyhall.com &#187; VMware</title>
	<atom:link href="http://www.thattommyhall.com/category/vmware/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.thattommyhall.com</link>
	<description>A Random Walk Through Idea Space</description>
	<lastBuildDate>Sun, 08 Jan 2012 11:42:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Ruby On Windows &#8211; Forking other processes</title>
		<link>http://www.thattommyhall.com/2011/02/20/ruby-on-windows-running-other-executables/</link>
		<comments>http://www.thattommyhall.com/2011/02/20/ruby-on-windows-running-other-executables/#comments</comments>
		<pubDate>Sun, 20 Feb 2011 23:08:11 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[VMware]]></category>

		<guid isPermaLink="false">http://www.thattommyhall.com/?p=540</guid>
		<description><![CDATA[While moving our VM deployment site written in Sinatra to a Windows machine with the VMware PowerCLI toolkit installed the only snag was where we forked a process to do the preparation of the machines. Both Kernel.fork and Process.detach seemed to have issues. Original MRI on Linux IronRuby We tried IronRuby and the same bit [...]]]></description>
			<content:encoded><![CDATA[<p>While moving our VM deployment site written in Sinatra to a Windows machine with the VMware PowerCLI toolkit installed the only snag was where we forked a process to do the preparation of the machines. Both Kernel.fork and Process.detach seemed to have issues.</p>
<p><strong>Original MRI on Linux<br />
</strong></p>
<pre class="brush: ruby; title: ; notranslate">
  def build
    pid = fork { run_command }
    Process.detach(pid)
  end

  def run_command
    `sudo /opt/script/deployserver/setupnewserver.sh -p #{poolserver} -i #{ip} -s #{@size} -v #{@vlan} -a &quot;#{@owner}&quot; -n #{@name} -e &quot;#{@email}&quot;`
  end
</pre>
<p><strong>IronRuby</strong><br />
We tried IronRuby and the same bit of the script broke as on win32 MRI (though I was pleased and surprised that Sinatra worked)</p>
<pre class="brush: ruby; title: ; notranslate">
  def build
    WindowsProcess.start &quot;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe&quot;,
&quot;-PSConsoleFile \&quot;C:\\Program Files (x86)\\VMware\\Infrastructure\\vSphere PowerCLI\\vim.psc1\&quot; \&quot;&amp; C:\\script\\DataStoreUsage.ps1\&quot;&quot;
  end
</pre>
<p>Using the following DotNet code</p>
<pre class="brush: ruby; title: ; notranslate">
class WindowsProcess
  def self.start(file, arguments)
    process = System::Diagnostics::Process.new
    process.StartInfo.FileName = file
    process.StartInfo.CreateNoWindow = true
    process.StartInfo.Arguments = arguments
    process.Start
  end
end
</pre>
<p><strong>Workaround using Windows &#8220;start&#8221; command</strong><br />
I had hoped the module at <a href="http://win32utils.rubyforge.org/">win32utils</a> would let me just use the original script but fork did not work properly still.</p>
<pre class="brush: ruby; title: ; notranslate">
def build
  commandstr = &quot;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\powershell.exe -PSConsoleFile \&quot;C:\\Program Files (x86)\\VMware\\Infrastructure\\vSphere PowerCLI\\vim.psc1\&quot; \&quot;&amp; C:\\Sites\\vmdeploy\\PrepNewMachine.ps1 -type #{@type} -machinename #{@name} -size #{@size} -vlan #{@vlan} -creator #{@owner} -creatoremail #{@email} -ipaddress #{ip}&quot;

  system (&quot;start #{commandstr} &gt; ./log/#{@name}.log 2&gt;&amp;1&quot;)
end
</pre>
<p>This uses the windows &#8220;start&#8221; command and works pretty well.</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.thattommyhall.com/2011/02/20/ruby-on-windows-running-other-executables/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.thattommyhall.com/2011/02/20/ruby-on-windows-running-other-executables/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Running Any Executable As A Windows Service (Ruby / Sinatra)</title>
		<link>http://www.thattommyhall.com/2011/02/14/srvany-sinatra-ruby-windows-service/</link>
		<comments>http://www.thattommyhall.com/2011/02/14/srvany-sinatra-ruby-windows-service/#comments</comments>
		<pubDate>Mon, 14 Feb 2011 13:06:52 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[sinatra]]></category>
		<category><![CDATA[VMware]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.thattommyhall.com/?p=541</guid>
		<description><![CDATA[While migrating an automated VM deployment page using a combination of Sinatra on Linux and Bash scripts using the Perl toolkit with a simpler script using the VMWare PowerCLI that I love so much I needed to create a windows service from the Sinatra App and had to do some googleing so I thought I [...]]]></description>
			<content:encoded><![CDATA[<p>While migrating an automated VM deployment page using a combination of <a href="http://www.sinatrarb.com/">Sinatra</a> on Linux and Bash scripts using the Perl toolkit with a simpler script using the VMWare PowerCLI that I <a href="http://www.thattommyhall.com/index.php?s=powercli&#038;submit=Search">love so much</a> I needed to create a windows service from the Sinatra App and had to do some googleing so I thought I would share how I did it.</p>
<p>You only need two things &#8211; the built-in &#8220;sc&#8221; command and an executable from <a href="https://www.microsoft.com/downloads/en/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&#038;displaylang=en">Windows Server 2003 Resource Kit Tools</a> called srvany (works with 2008 too). Get just that exe <a href="http://dl.dropbox.com/u/2039069/srvany.exe">here</a> (if you trust me of course <img src='http://www.thattommyhall.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  )</p>
<p><strong>Creating the service</strong><br />
<a href="http://www.thattommyhall.com/wp-content/uploads/2011/02/1-CreateService.png"><img src="http://www.thattommyhall.com/wp-content/uploads/2011/02/1-CreateService.png" alt="" title="1-CreateService" width="669" height="78" class="alignleft size-full wp-image-550" /></a><br />
<strong>Check it exists</strong><br />
<a href="http://www.thattommyhall.com/wp-content/uploads/2011/02/2-service.png"><img src="http://www.thattommyhall.com/wp-content/uploads/2011/02/2-service.png" alt="" title="2-service" width="537" height="25" class="alignleft size-full wp-image-552" /></a><br />
<strong>Set Parameters In The Registry</strong><br />
Configure it at HKLM/SYSTEM/CurrentControlSet/Services/APPNAME/Parameters<br />
<a href="http://www.thattommyhall.com/wp-content/uploads/2011/02/Screen-shot-2011-02-14-at-12.54.15.png"><img src="http://www.thattommyhall.com/wp-content/uploads/2011/02/Screen-shot-2011-02-14-at-12.54.15.png" alt="" title="Screen shot 2011-02-14 at 12.54.15" width="725" height="165" class="alignleft size-full wp-image-561" /></a></p>
<pre class="brush: plain; title: ; notranslate">Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\VMdeploy\Parameters]
&quot;Application&quot;=&quot;C:\\Ruby192\\bin\\ruby&quot;
&quot;AppParameters&quot;=&quot;C:\\Sites\\vmdeploy\\server.rb -p 80&quot;
&quot;AppDirectory&quot;=&quot;C:\\Sites\\vmdeploy&quot;
&quot;AppEnvironment&quot;=hex(7):65,00,78,00,61,00,6d,00,70,00,6c,00,65,00,3d,00,32,00,\
  37,00,00,00,62,00,6c,00,61,00,68,00,3d,00,63,00,3a,00,5c,00,74,00,65,00,6d,\
  00,70,00,66,00,69,00,6c,00,65,00,73,00,00,00,00,00</pre>
<p>Note the AppEnvironment is a multiline string, the rest are strings</p>
<p>This lets you run any executable file, change the directory you run it from and pass any arguments or environment variables so should cover most use cases.</p>
<p>I will be sharing the code for both the Sinatra app and the PowerShell deploy script in later posts.</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.thattommyhall.com/2011/02/14/srvany-sinatra-ruby-windows-service/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.thattommyhall.com/2011/02/14/srvany-sinatra-ruby-windows-service/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Load Based Nic Teaming vs Link Aggregation</title>
		<link>http://www.thattommyhall.com/2010/12/21/load-based-nic-teaming-vs-link-aggregation/</link>
		<comments>http://www.thattommyhall.com/2010/12/21/load-based-nic-teaming-vs-link-aggregation/#comments</comments>
		<pubDate>Tue, 21 Dec 2010 22:26:29 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[VMware]]></category>

		<guid isPermaLink="false">http://www.thattommyhall.com/?p=488</guid>
		<description><![CDATA[I remembered seeing Simon Long&#8217;s comment on twitter a few weeks ago and it was rattling around in the back of my mind. Will #VMware Load-Based Teaming remove the need for #Cisco EtherChannel? Discuss&#8230;. I long ago investigated NIC Teaming algorithms and settled on IP Hash with Cisco Etherchannels for most environments, only really using [...]]]></description>
			<content:encoded><![CDATA[<p>I remembered seeing Simon Long&#8217;s <a href="https://twitter.com/#!/SimonLong_/status/14599422625193984">comment on twitter</a> a few weeks ago and it was rattling around in the back of my mind.</p>
<blockquote><p>Will #VMware Load-Based Teaming remove the need for #Cisco EtherChannel? Discuss&#8230;.</p></blockquote>
<p>I long ago investigated NIC Teaming algorithms and settled on IP Hash with <a href="https://secure.wikimedia.org/wikipedia/en/wiki/EtherChannel">Cisco Etherchannels</a> for most environments, only really using something else if the client happened not have stacked switches. Thanks to Scott Lowe for <a href="http://blog.scottlowe.org/2006/12/04/esx-server-nic-teaming-and-vlan-trunking/">this superb article</a> on the matter.</p>
<p>When vSphere 4.1 came out with <a href="http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&#038;cmd=displayKC&#038;externalId=1022590">Load Based Teaming</a>, I was pleased that at last we had an algorithm that would have a go at proper load balancing and not just load distribution but had not got round to investigating much more.</p>
<p>At Forward we have just updated to 4.1, Enterprise Plus and have bought some shiny new Extreme <a href="http://www.extremenetworks.com/products/summit-x650.aspx">Summit X650 Series</a> 10G switches; so Simon&#8217;s comment was particularly apropos. </p>
<p>I had decided I wanted to try and use LBT but was unsure if I should port-channel the uplink ports. It turns out you can&#8217;t. I thought maybe you should to be honest, it does not mention in the dvSwitch guide as far as I can see but the <a href="http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&#038;cmd=displayKC&#038;externalId=1001938">ESX host requirements for link aggregation</a> KB (updated today) is very clear </p>
<blockquote><ul>
<li>The switch must be set to perform 802.3ad link aggregation in static mode ON and the virtual switch must have its load balancing method set to Route based on IP hash.</li>
<li>Enabling either Route based on IP hash without 802.3ad aggregation or vice-versa disrupts networking</li>
</ul>
</blockquote>
<p>ie you need both IP Hash and EtherChannel and neither will work without the other.</p>
<p>In answer to Simon&#8217;s question, my feeling is you may still get better performance from EtherChannel and IP based hash for some workloads but would guess &#8220;usually&#8221; LBT wins. I think the case where you may get better utilisation is when certain VMs have very high bandwidth requirements to different IPs. As described <a href="https://kensvirtualreality.wordpress.com/2009/04/05/the-great-vswitch-debate%E2%80%93part-3/">here</a> IP Hash is the only way to allow traffic from one vNIC to leave over different pNICs at the same time.</p>
<p>It is interesting that even with LBT bandwidth is still limited to the maximum bandwidth a single pNIC can provide for individual VMs / vmkernels, also IP hash will not get higher than a single pNIC for a vMotion or other point to point connections. So 10G is going to perform better for these operations than 10x1G, however you team them.</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.thattommyhall.com/2010/12/21/load-based-nic-teaming-vs-link-aggregation/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.thattommyhall.com/2010/12/21/load-based-nic-teaming-vs-link-aggregation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hyper9 Saves The Day</title>
		<link>http://www.thattommyhall.com/2010/12/20/hyper9-saves-the-day/</link>
		<comments>http://www.thattommyhall.com/2010/12/20/hyper9-saves-the-day/#comments</comments>
		<pubDate>Mon, 20 Dec 2010 14:43:16 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[VMware]]></category>

		<guid isPermaLink="false">http://www.thattommyhall.com/?p=468</guid>
		<description><![CDATA[We recently bought the Hyper9 capacity planning, reporting and monitoring solution for our VMware infrastructure and I quite soon made use of it to troubleshoot some problems reported to us like backups taking longer and databases being slower than normal. In the 3par storage I could see that IO was unusually high of late. Then [...]]]></description>
			<content:encoded><![CDATA[<p>We recently bought the <a href="http://www.hyper9.com/product_overview.aspx">Hyper9</a> capacity planning, reporting and monitoring solution for our VMware infrastructure and I quite soon made use of it to troubleshoot some problems reported to us like backups taking longer and databases being slower than normal.</p>
<p>In the 3par storage I could see that IO was unusually high of late.<br />
<a href="http://www.thattommyhall.com/wp-content/uploads/2010/12/1-3par.png"><img src="http://www.thattommyhall.com/wp-content/uploads/2010/12/1-3par-300x282.png" alt="" title="1-3par" width="300" height="282" class="alignleft size-medium wp-image-469" /></a></p>
<p>Then I looked at the top-n datastores by IOPS and graphed them<br />
<a href="http://www.thattommyhall.com/wp-content/uploads/2010/12/2-datastores.png"><img src="http://www.thattommyhall.com/wp-content/uploads/2010/12/2-datastores-300x190.png" alt="" title="2-datastores" width="300" height="190" class="alignleft size-medium wp-image-470" /></a><br />
A huge jump for sharedstorage8, so I looked at its VMs<br />
<a href="http://www.thattommyhall.com/wp-content/uploads/2010/12/3-vms.png"><img src="http://www.thattommyhall.com/wp-content/uploads/2010/12/3-vms-300x187.png" alt="" title="3-vms" width="300" height="187" class="alignleft size-medium wp-image-472" /></a><br />
and found the culprit VM.</p>
<p>Here it is against our big &#8220;Superhero&#8221; database and the vCenter server with the DB.<br />
<a href="http://www.thattommyhall.com/wp-content/uploads/2010/12/4-VSvCenter.png"><img src="http://www.thattommyhall.com/wp-content/uploads/2010/12/4-VSvCenter-300x224.png" alt="" title="4-VSvCenter" width="300" height="224" class="alignleft size-medium wp-image-473" /></a><br />
<a href="http://www.thattommyhall.com/wp-content/uploads/2010/12/5-top3.png"><img src="http://www.thattommyhall.com/wp-content/uploads/2010/12/5-top3-300x233.png" alt="" title="5-top3" width="300" height="233" class="alignleft size-medium wp-image-474" /></a></p>
<p>A lot of IO from a machine the owner thought was doing nothing!</p>
<p>Hyper9 is a pretty good tool for reporting, alerting and troubleshooting your VMware infrastructure, the query language is lucene based and this gives you lots of options in creating custom views and alerts.</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.thattommyhall.com/2010/12/20/hyper9-saves-the-day/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.thattommyhall.com/2010/12/20/hyper9-saves-the-day/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Powershell Reporting Trick</title>
		<link>http://www.thattommyhall.com/2010/10/04/powershell-reporting-trick/</link>
		<comments>http://www.thattommyhall.com/2010/10/04/powershell-reporting-trick/#comments</comments>
		<pubDate>Mon, 04 Oct 2010 10:51:20 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[powercli]]></category>
		<category><![CDATA[powershell]]></category>
		<category><![CDATA[VMware]]></category>

		<guid isPermaLink="false">http://www.thattommyhall.com/?p=277</guid>
		<description><![CDATA[Here is a little trick I keep re-using to output csv files of data from vCenter. The important bit is I cant remember where I saw it but it creates an object with properties with the information I want to use that I can then sort, filter and send places. I used it again today: [...]]]></description>
			<content:encoded><![CDATA[<p>Here is a little trick I keep re-using to output csv files of data from vCenter.</p>
<pre class="brush: powershell; title: ; notranslate">$reportArray = @()

foreach($cluster in get-cluster){
    foreach($vm in get-vm -Location $cluster){
            foreach($ds in get-DataStore -VM $vm.name){
                $reportArray += New-Object PSObject -Property @{
                     ClusterName = $cluster.Name
                     VMName = $vm.Name
                     DatastoreName = $ds.name
                     FreeSpaceMB = $ds.FreeSpaceMB
                     CapacityMB = $ds.CapacityMB
                      }
                echo $cluster.name $vm.name $ds.name $ds.FreeSpaceMB $ds.CapacityMB
                        }
                   }
            }        

$reportArray | Sort-Object -Property ClusterName,VMName,DatastoreName | Export-Csv &quot;DataStoreUsage.csv&quot; -NoTypeInformation -UseCulture</pre>
<p>The important bit is </p>
<pre class="brush: powershell; title: ; notranslate">
$reportArray += New-Object PSObject -Property @{
                     ClusterName = $cluster.Name
                     VMName = $vm.Name
                     DatastoreName = $ds.name
                     FreeSpaceMB = $ds.FreeSpaceMB
                     CapacityMB = $ds.CapacityMB
                      }
</pre>
<p>I cant remember where I saw it but it creates an object with properties with the information I want to use that I can then sort, filter and send places. </p>
<p>I used it again today:
<pre class="brush: powershell; title: ; notranslate">
$reportArray = @()

Get-VM | % {$vmguest = Get-VMGuest -VM $_ ;
			$reportArray += New-Object PSObject -Property @{
				VMName = $_.name
				GuestOS = $vmguest.OSFullName
				IPAddress = [string]::Join(&quot; &quot;, $vmguest.IPAddress)
				HOSTNAME = $_.guest.hostname
     			}
			}

$reportArray | Out-GridView
</pre>
<p>Using the lovely <a href="http://technet.microsoft.com/en-us/library/ff730930.aspx">Out-GridView</a> commandlet<br />
<a href="http://www.thattommyhall.com/wp-content/uploads/2010/10/Out-GridView.png"><img src="http://www.thattommyhall.com/wp-content/uploads/2010/10/Out-GridView.png" alt="" title="Out-GridView" width="794" height="311" class="aligncenter size-full wp-image-282" /></a></p>
<p>***UPDATE***<br />
Turns out you need <a href="http://support.microsoft.com/kb/968929">this update</a> for the <em>New-Object PSObject -Property</em> bit to work.</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.thattommyhall.com/2010/10/04/powershell-reporting-trick/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.thattommyhall.com/2010/10/04/powershell-reporting-trick/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Playing with PowerShell</title>
		<link>http://www.thattommyhall.com/2010/09/15/playing-with-powershell/</link>
		<comments>http://www.thattommyhall.com/2010/09/15/playing-with-powershell/#comments</comments>
		<pubDate>Wed, 15 Sep 2010 12:24:52 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[powercli]]></category>
		<category><![CDATA[powershell]]></category>
		<category><![CDATA[VMware]]></category>

		<guid isPermaLink="false">http://www.thattommyhall.com/?p=231</guid>
		<description><![CDATA[I use powershell all the time now to manage VMware, with the PowerCLI commandlets you can achieve a lot and it matches Alan Kay&#8217;s motto Simple things should be simple, complex things should be possible. The simple: I want to go and set all the LUNs in VMware to use &#8220;RoundRobin&#8221; as the MultipathPolicy My [...]]]></description>
			<content:encoded><![CDATA[<p>I use powershell all the time now to manage VMware, with the PowerCLI commandlets you can achieve a lot and it matches Alan Kay&#8217;s motto </p>
<blockquote><p>Simple things should be simple, complex things should be possible.</p></blockquote>
<p><strong>The simple:</strong><br />
I want to go and set all the LUNs in VMware to use &#8220;RoundRobin&#8221; as the MultipathPolicy </p>
<p>My first attempt was,</p>
<pre class="brush: powershell; title: ; notranslate">Get-VMHost | Get-ScsiLun |
    Set-ScsiLun -MultipathPolicy &quot;RoundRobin&quot;</pre>
<blockquote><p>Loop through the hosts, loop though each of its LUNs,<br />
set MultipathPolicy to &#8220;RoundRobin&#8221;</p></blockquote>
<p>Which works, but was taking ages. I was about to make separate scripts for each server when I realised I was not quite doing what I wanted with that script. I really wanted to:</p>
<blockquote><p>Loop through the hosts, loop though each of its LUNs,<br />
*if it was not already RoundRobin*,<br />
set MultipathPolicy to &#8220;RoundRobin&#8221;</p></blockquote>
<pre class="brush: powershell; title: ; notranslate">Get-VMHost | Get-ScsiLun |
    where {$_.MultipathPolicy -ne &quot;RoundRobin&quot;} |
    Set-ScsiLun -MultipathPolicy &quot;RoundRobin&quot;</pre>
<p>Which ran loads faster as the &#8220;set&#8221; command still ran and took a while even if you were setting it to what it already was.</p>
<p><strong>The Complex:</strong></p>
<p>I took the wonderful <a href="http://www.virtu-al.net/featured-scripts/vcheck/">vcheck</a> script and made it <a href="http://www.virtu-al.net/2009/07/10/running-a-powercli-scheduled-task/">run every night</a>. Great email overview of the virtual infrastructure each morning.</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.thattommyhall.com/2010/09/15/playing-with-powershell/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.thattommyhall.com/2010/09/15/playing-with-powershell/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>How many IOPS can a single disk provide?</title>
		<link>http://www.thattommyhall.com/2010/02/15/iops/</link>
		<comments>http://www.thattommyhall.com/2010/02/15/iops/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 18:34:55 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[rant]]></category>
		<category><![CDATA[storage]]></category>
		<category><![CDATA[VMware]]></category>

		<guid isPermaLink="false">http://www.thattommyhall.com/?p=140</guid>
		<description><![CDATA[[edit] I wish I could retract that comment about adding:- at the point the seek is done, you need to wait for the platter to spin into place, on average half a turn (the latency time). They do therefore happen in sequence! (If it was not for those pesky disks always spinning, I&#8217;d have been [...]]]></description>
			<content:encoded><![CDATA[<p>[edit]<br />
I wish I could retract that comment about adding:- at the point the seek is done, you need to wait for the platter to spin into place, on average half a turn (the latency time). They do therefore happen in sequence! (If it was not for those pesky disks always spinning, I&#8217;d have been right!). Lesson learned: don&#8217;t let intuition lead you astray, don&#8217;t blog in haste, and realise that sometimes oft repeated advice is true. I am keeping the post up out of intellectual honesty, but will be blogging furiously to get it off the front page.<br />
[/edit]</p>
<p>I have just read an article on roughly how many IOPs you can expect from a single disk and encountered what I consider to be a frequently repeated mistake in the calculation.</p>
<p>Before I begin I want to point out that it is only an approximation anyway and caching in enterprise storage systems makes it perhaps a moot point anyway.</p>
<p>The article is <a href="http://blogs.techrepublic.com.com/datacenter/?p=2182&#038;tag=nl.e040">here </a> if you want to go and see it.<br />
<span id="more-140"></span><br />
He says there are 3 factors that influence the number of random IOPS you can do with one disk (the assumption throughout is that these are random)</p>
<li>Rotational speed</li>
<li>Average latency</li>
<li>Average seek time</li>
<p>and I agree, but would like to point out that 1 and 2 are related: </p>
<p>Average latency = how long 1/2 a turn takes</p>
<p><strong>So, a 15000 RPM disk:</strong></p>
<li>Turns 15000/60 = 250 times a second</li>
<li>One turn takes 1000/250 = 4ms</li>
<li>1/2 a turn takes 2ms (your average latency)<br />
And lets say for arguments sake your seek time is 5ms<br />
<P><br />
<strong>How do you work out IOPS (IO operations per second)?</strong><br />
There are 1000ms in a second so<br />
<center><img src="http://www.codecogs.com/eq.latex?IOPS = \frac{1000}{t}" alt="" /></center><br />
where t is the average time taken to do an IO operation.</p>
<p>For example:<br />
If the average IO takes 5ms, you would have 200 IOPS as you could do 200 of them in 1 sec (200&#215;5=1000)</p>
<p><em>EVERYONE AGREES UP TO HERE</em><br />
<strong><br />
What is more important, latency or seek time?</strong><br />
Well you have to do both, wait for the disk to spin into position and move the head. These two things are in parallel and both need to happen so I would say your average IO takes the worst of the two, ie<br />
<code>t = max{seek time,average latency}</code><br />
I have seen people say that<br />
<code>t = seek time</code><br />
Which matches my thoughts with all disks I have ever seen</p>
<p>Or that<br />
<code>t = latency</code><br />
as a max, as you can get heads to match any latency you like, but it is expensive. (Jeff Bonwick says so <a href="http://blogs.smugmug.com/don/2007/10/08/hdd-iops-limiting-factor-seek-or-rpm/">here</a> )</p>
<p>The thing that I hate seeing is:<br />
<code>t = latency + seek time</code><br />
By adding those two times together you are saying that your average IO time is the time it takes to do both bits added together. The only physical interpretation of this is that they happen one after the other with no overlap, which is clearly not true.</p>
<p>This fallacy is made explicit <a href="http://blogs.zdnet.com/Ou/?p=322">here on ZDnet</a></p>
<blockquote><p>Since the overall access time is determined by the sum of the average rotational latency (2ms) and the average seek time (3.7ms), this high-end 15000 RPM hard drive has an average access time of 5.7 milliseconds.</p></blockquote>
<p>Why the sum?</p>
<p>It comes up unchallenged in Duncans otherwise excellent article about the <a href="http://www.yellow-bricks.com/2009/12/23/iops/">RAID IOPS penalty</a> (interestingly he references the same article, saying</p>
<blockquote><p>In short; It is based on “average seek time” and the half of the time a single rotation takes. These two values added up result in the time an average IO takes.</p></blockquote>
<p>Again, why the sum?</p>
<p>I think it does not really make all that much difference, so long as you have a rule of thumb for roughly how many IOPS a disk has and understand how the way you combine them in RAID impacts it.</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.thattommyhall.com/2010/02/15/iops/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.thattommyhall.com/2010/02/15/iops/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting VMware Certified Professional (VCP) on vSphere 4</title>
		<link>http://www.thattommyhall.com/2009/09/28/getting-vmware-certified-professional-vcp-on-vsphere-4/</link>
		<comments>http://www.thattommyhall.com/2009/09/28/getting-vmware-certified-professional-vcp-on-vsphere-4/#comments</comments>
		<pubDate>Mon, 28 Sep 2009 16:17:27 +0000</pubDate>
		<dc:creator>tom</dc:creator>
				<category><![CDATA[VMware]]></category>

		<guid isPermaLink="false">http://www.thattommyhall.com/?p=88</guid>
		<description><![CDATA[On Saturday I took and passed the VCP410 exam to get VCP4. It was not really that hard, though I have been reading about vSphere since before it shipped, follow loads of blogs on VMware, installed it as soon as it came into beta and migrated my companies clusters to it relatively early. I would [...]]]></description>
			<content:encoded><![CDATA[<p>On Saturday I took and passed the VCP410 exam to get VCP4. </p>
<p>It was not really that hard, though I have been reading about vSphere since before it shipped, follow loads of blogs on VMware, installed it as soon as it came into beta and migrated my companies clusters to it relatively early. I would say if you have VCP3 and have used vSphere you should be OK.</p>
<p>The frustrating thing about the exam was the questions on the config max document, in my view if you are approaching the maximums you could just look it up and memorisation is a pointless exercise. A lot of the maximums are just decisions someone in vmware made, how many NFS stores by default ? (8), max? (64). What it the tree-depth per resource pool? (12&#8230; unless you use DRS, then it&#8217;s 10). This kind of memorisation is stupid, pointless, hoop-jumping and will be the difference between passing and failing for lots of people.</p>
<p>The exam (like most IT certs) is multiple choice so the questions are fairly mundane and of course there is only 1 correct answer. When interviewing candidates, I always prefer questions that start &#8220;what is <em>your</em>&#8221; rather than &#8220;what <em>is</em>&#8221; as anything that is so unsubtle as to only have one answer is probably too uninteresting to spend time discussing.</p>
<p>I did do a nights worth of revision however, using:</p>
<ul>
<li>Vmware&#8217;s <a href="http://mylearn.vmware.com/quiz.cfm?item=15211">mock exam</a></li>
<li>Simon Longs <a href="http://www.simonlong.co.uk/blog/vcp-vsphere-4-practice-exam/">practice exams</a></li>
<li>The <a href="www.vmware.com/pdf/vsphere4/r40/vsp_40_config_max.pdf">config max</a> doc &#8211; YAWN</li>
<li>My own <a href="http://dl.getdropbox.com/u/2039069/ConfigMax.mm">mind map</a> (using <a href="http://freemind.sourceforge.net/wiki/index.php/Main_Page">FreeMind</a>, or use the <a href="http://dl.getdropbox.com/u/2039069/ConfigMax.pdf">pdf version</a>) of config max and a few of Simons questions</li>
<li>vReference&#8217;s <a href="http://www.vreference.com/vsphere4-card/">card</a></li>
</ul>
<p>Also worth considering are </p>
<ul>
<li><a href="http://www.trainsignal.com/VMware-vSphere-Training-P76.aspx">Trainsignals videos</a> (I may still get myself a copy)</li>
<li>The <a href="http://pubs.vmware.com/vsp40_i/">Exam Blueprint</a></li>
<li>The <a href="http://www.vmware.com/support/pubs/">VMware Doc&#8217;s</a></li>
<li>vReference&#8217;s <a href="http://www.vreference.com/vsphere4-notes/">vSphere4 notes</a> (these look excellent but I did not have time to read them)</li>
<li>Mike Laverick&#8217;s book <a href="http://www.amazon.co.uk/gp/product/0071664521?ie=UTF8&#038;tag=tomsblog-21&#038;linkCode=as2&#038;camp=1634&#038;creative=19450&#038;creativeASIN=0071664521" rel="nofollow">VMware vSphere 4 Implementation</a> (I have it pre-ordered)</li>
<li>Scott Lowes book <a href="http://www.amazon.co.uk/gp/product/0470481382?ie=UTF8&#038;tag=tomsblog-21&#038;linkCode=as2&#038;camp=1634&#038;creative=19450&#038;creativeASIN=0470481382" rel="nofollow">Mastering VMware VSphere 4</a> (seems to be the most popular one released so far)</li>
</ul>
<p>You may like to see the things I have <a href="http://delicious.com/thattommyhall/vmware">added to delicious</a> on vmware over the last few years.</p>
<p>Good luck if you take it too!</p>
<p class="facebook"><a href="http://www.facebook.com/share.php?u=http://www.thattommyhall.com/2009/09/28/getting-vmware-certified-professional-vcp-on-vsphere-4/" target="_blank" title="Share on Facebook">Share on Facebook</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.thattommyhall.com/2009/09/28/getting-vmware-certified-professional-vcp-on-vsphere-4/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

