<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1111328281312116171</id><updated>2012-01-02T10:20:29.744-08:00</updated><category term='zpool'/><category term='lisa'/><category term='zfs zil'/><category term='nexenta'/><category term='zfs opensolaris solaris compression'/><category term='zfs'/><category term='cloud computing'/><category term='zil'/><category term='macadamia'/><category term='benchmark'/><category term='backups'/><category term='zfs cmt niagara'/><category term='mirroring'/><category term='oracle'/><category term='compression'/><category term='mttdl'/><category term='nexentastor'/><category term='zfs mail email backups archive solaris opensolaris'/><category term='usenix'/><category term='orchard'/><category term='reliability'/><category term='sun'/><category term='jellyfish'/><category term='opensolaris'/><category term='btrfs'/><category term='ranch'/><category term='solaris'/><category term='raid'/><category term='systems engineering'/><category term='raidz'/><title type='text'>Ramblings from Richard's Ranch</title><subtitle type='html'>Ramblings and views from my ranch in Southern California.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.richardelling.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>36</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-3989972354188862686</id><published>2012-01-02T10:20:00.000-08:00</published><updated>2012-01-02T10:20:29.753-08:00</updated><title type='text'>Gotta love the winter</title><content type='html'>&lt;div class="p1"&gt;In this time of great changes, I thought I might share a view from the ranch this morning.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-rg9xIXkXllc/TwH08tpxzII/AAAAAAAAAJk/VAmQQqKfcjw/s1600/Cherry+blossom.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-rg9xIXkXllc/TwH08tpxzII/AAAAAAAAAJk/VAmQQqKfcjw/s320/Cherry+blossom.png" width="318" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="p1"&gt;        &lt;/div&gt;&lt;div class="p1"&gt;Our cherry trees begin blooming after the rains start in November or December. They will continue to bloom for another month or two. For all of those people who are huddled against the cold, know that soon the changes will bring spring-like weather and the cherry blossoms will bloom.&lt;/div&gt;&lt;div class="p1"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-3989972354188862686?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/3989972354188862686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2012/01/gotta-love-winter.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/3989972354188862686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/3989972354188862686'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2012/01/gotta-love-winter.html' title='Gotta love the winter'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-rg9xIXkXllc/TwH08tpxzII/AAAAAAAAAJk/VAmQQqKfcjw/s72-c/Cherry+blossom.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-8855767807472944791</id><published>2011-08-28T17:03:00.000-07:00</published><updated>2011-08-28T17:03:20.002-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nexenta'/><category scheme='http://www.blogger.com/atom/ns#' term='nexentastor'/><title type='text'>Interesting new things shown at VMworld in Las Vegas</title><content type='html'>If you're traveling to Las Vegas for VMworld 2011, be sure to stop by the Nexenta booth. We've got some interesting new things to show... including something you've never seen before...&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-8855767807472944791?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/8855767807472944791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2011/08/interesting-new-things-shown-at-vmworld.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/8855767807472944791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/8855767807472944791'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2011/08/interesting-new-things-shown-at-vmworld.html' title='Interesting new things shown at VMworld in Las Vegas'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-8107347290362325251</id><published>2011-07-29T18:07:00.000-07:00</published><updated>2011-07-29T18:07:31.356-07:00</updated><title type='text'>NexentaStor 3.1 Released</title><content type='html'>Today NexentaStor 3.1 was released to the world. &lt;a href="http://www.nexenta.com/corp/free-trial-download"&gt;Download a free trial copy today!&lt;/a&gt; We've been working hard on this release for some time and it offers significant improvements in stability and performance. Here is a small sample of the changes that I think are cool.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;ZFS baseline&lt;br /&gt;zpool version 28 is the default pool version. This version includes a bunch of features that ZFS geeks know and love, such as readonly imports and rollback. Other Nexenta add-ons are also still there, such as WORM.&lt;/li&gt;&lt;li&gt;JBOD enumeration support&lt;br /&gt;One of the most difficult tasks of a general-purpose, x86-based storage appliance is sorting through the plethora of JBODs on the market and being able to reliably map a disk to the JBOD disk slot. This is the first release of this mapping capability in the appliance. Detailed support for a few JBODs is included (LSI DE1600, Xyratex HB 1234 and HB 2435), with generic support for other JBODs. The pipeline is full of JBODs waiting to have detailed support.&lt;/li&gt;&lt;li&gt;iSCSI performance improvements&lt;br /&gt;Several improvements in iSCSI performance, including zero-copy.&lt;/li&gt;&lt;li&gt;&lt;a href="http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&amp;amp;cmd=displayKC&amp;amp;externalId=1021976"&gt;Vmware vStorage APIs for Array Integration&lt;/a&gt; support&lt;br /&gt;VAAI support has been added to block storage protocols.&lt;/li&gt;&lt;li&gt;Smarter fault triggers&lt;br /&gt;Many of the fault triggers have been improved to include more checks and better condition messages.&lt;/li&gt;&lt;li&gt;HA-Cluster feature enhancements&lt;br /&gt;Many enhancements to HA-Cluster to improve failover time and robustness. Also, you can now have multiple pools (Nexenta volumes) or virtual IP (VIP) addresses per cluster service. My favorite feature is that the requirement for a dedicated heartbeat disk has been removed, we now use shared pool disks for heartbeats, which makes perfect sense.&lt;/li&gt;&lt;li&gt;Auto-sync replication improvements&lt;br /&gt;The auto-sync asynchronous replication service has been redesigned to be more robust and offer better performance. A new one-to-many replication transport has also been added.&lt;/li&gt;&lt;li&gt;More devices supported&lt;br /&gt;Device drivers of note include: LSI 9205 family, Areca 1880. In the pipeline are driver updates from Intel and Emulex.&lt;/li&gt;&lt;li&gt;Better upgrade management&lt;br /&gt;You can now upgrade specific version numbers. In the past you would always be upgraded to the latest version, now you can specify the major version. For example, to upgrade to release 3.1, the NMC command is "setup appliance upgrade -r 3.1"&lt;/li&gt;&lt;li&gt;SMB improvements&lt;br /&gt;The SMB (aka CIFS) share service has improved performance, scalability, and reliability.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Active Directory improvements&lt;br /&gt;AD integration has been significantly improved. AD also handles Domain Controller failover better.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Virtual Machine Data Center improvements&lt;br /&gt;VMDC has better integration with VMware vmotion.&lt;/li&gt;&lt;/ol&gt;I tried to keep the list to the top-10, but that obviously didn't work. I hope you enjoy the release anyway!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-8107347290362325251?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/8107347290362325251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2011/07/nexentastor-31-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/8107347290362325251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/8107347290362325251'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2011/07/nexentastor-31-released.html' title='NexentaStor 3.1 Released'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-3060111323878765532</id><published>2010-11-16T04:21:00.000-08:00</published><updated>2010-11-16T04:21:18.897-08:00</updated><title type='text'>NexentaStor 3.0.4 released</title><content type='html'>This week we've launched &lt;a href="http://www.nexenta.com/"&gt;NexentaStor 3.0.4&lt;/a&gt;. In many ways this is a significant milestone, far beyond what may be immediately obvious. For existing &lt;a href="http://www.nexenta.com/"&gt;Nexenta&lt;/a&gt; customers, the feature list will look largely unchanged -- many of the same, great universal storage features available since 3.0.0 earlier this year. But for one who studies how organizations grow and mature, the release represents the best quality, stability, and maturity ever. We have been working hard to earn your trust for protecting your data. I think you will be pleased with the &lt;a href="http://www.nexenta.com/corp/free-trial-download"&gt;result&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;From a ZFS perspective, there have been many bug fixes and stability improvements.&amp;nbsp;This release also deprecates the global ZIL disable feature. If you've ever attended my training courses or research sessions on ZFS, you know that I'm not a big fan of disabling the ZIL or the ease with which disabling the ZIL can be accomplished in NexentaStor. But there are a few, special cases where the performance trade-off is justified. In &lt;a href="http://www.nexenta.com/"&gt;NexentaStor 3.0.4&lt;/a&gt; you can set the ZIL use policy on a per-dataset basis. In ZFS terms, this is called "ZIL synchronicity" and is three parts &lt;i&gt;really good stuff&lt;/i&gt; and one part pun. Special thanks to&amp;nbsp;&lt;a href="http://milek.blogspot.com/"&gt;Robert Milkowski&lt;/a&gt;&amp;nbsp;&amp;nbsp;and&amp;nbsp;the ZFS community for the contribution.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In keeping with &lt;a href="http://www.nexenta.com/"&gt;Nexenta&lt;/a&gt; tradition, a free, temporary licensed edition can be downloaded and installed from the &lt;a href="http://www.nexenta.com/corp/free-trial-download"&gt;main Nexenta site&lt;/a&gt; or the &lt;a href="http://www.nexenta.com/corp/component/remository/products/NexentaStor-Enterprise-Edition-(MIRROR)/"&gt;European mirror&lt;/a&gt; (thanks Jacco!) Give it a try and see why we think it is the best NexentaStor release yet. Of course, if you already have NexentaStor installed, the NMC command is "setup appliance upgrade" When you do the upgrade, a checkpoint will be made of your current system, so you can roll back if you are unhappy -- appliances are such wonderful things, when implemented properly.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-3060111323878765532?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/3060111323878765532/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2010/11/nexentastor-304-released.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/3060111323878765532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/3060111323878765532'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2010/11/nexentastor-304-released.html' title='NexentaStor 3.0.4 released'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-5149718652966768605</id><published>2010-07-18T18:11:00.000-07:00</published><updated>2010-07-18T18:11:11.814-07:00</updated><title type='text'>Getting arrested at the World Cup celebration</title><content type='html'>Shortly after my arrival in Rotterdam last Sunday, the final game of the World Cup began. Though I am a soccer (and football) fan, I must confess that the trip was planned long before the Dutch secured a spot in the final. Arriving in the Netherlands after traveling for nearly 24 hours, I was looking forward to a quick nap before exploring the city. No rest for the weary. The party was already starting and people were collecting in a street near the &lt;a href="http://nl.wikipedia.org/wiki/Stadhuis_van_Rotterdam"&gt;Stadhuis&lt;/a&gt;, a mere block or two away from my hotel. Music was blaring from a rather impressive sound system and cold beer was flowing from the tap. How could I resist? Forget the nap, I'm going in!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mEl5xoSoWPw/TEOVKkN5I7I/AAAAAAAAAHI/B_r_uDOxRq0/s1600/SeaOfOrange.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_mEl5xoSoWPw/TEOVKkN5I7I/AAAAAAAAAHI/B_r_uDOxRq0/s320/SeaOfOrange.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;The Sea of Orange (Zee van Oranje) was lively and exciting. I wandered through the streets and people seemed to be coming from every direction, flowing towards their favorite spot to watch the game. I grabbed a quick dinner from&amp;nbsp;&lt;a href="http://www.restaurant-dinos.nl/"&gt;Dino's, a local restaurant&lt;/a&gt;, just before they closed to enjoy the festivities as the pregame broadcast started. Everyone seemed to be in high spirits, demonstrating their national pride.&lt;br /&gt;&lt;br /&gt;That is when I got arrested.&lt;br /&gt;&lt;br /&gt;The officer picked me right out of the crowd.&lt;br /&gt;&lt;br /&gt;Clearly, I must have looked like a criminal?&lt;br /&gt;&lt;br /&gt;I immediately wondered if they have racial profiling training, like the &lt;a href="http://en.wikipedia.org/wiki/Arizona"&gt;'zonies&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The officer stopped me and asked a question, in Dutch, of course.&lt;br /&gt;&lt;br /&gt;Whazzat? &amp;nbsp;I don't speak Dutch, or at least not in any way recognizable by someone who is actually fluent in Dutch.&lt;br /&gt;&lt;br /&gt;Egads, I had only been in the country for a few hours and already I'm embroiled in an international incident.&lt;br /&gt;&lt;br /&gt;Episodes from&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Locked_Up_Abroad"&gt;Locked up Abroad&lt;/a&gt;&amp;nbsp;came flooding into my mind.&lt;br /&gt;&lt;br /&gt;I had a vision of a tombstone engraved with "What was he thinking?"&lt;br /&gt;&lt;br /&gt;Without missing a beat, the officer switched to English.&lt;br /&gt;&lt;br /&gt;"I am from the Orange Police, and I see that you are not wearing Orange."&lt;br /&gt;&lt;br /&gt;The horror!&lt;br /&gt;&lt;br /&gt;The officer was quite right. I did not have anything Orange. My last Orange T-shirt was added to the rag pile just a few short months ago.&lt;br /&gt;&lt;br /&gt;I knew was in big trouble -- time to act like a dumb American.&lt;br /&gt;&lt;br /&gt;The setup: "I just arrived in the country..."&lt;br /&gt;&lt;br /&gt;The excuse: "... and I have been trying to find a store to buy something Orange."&lt;br /&gt;&lt;br /&gt;The saving grace: "Uh, and if you know of a store where I could find such things, I would promptly rehabilitate myself."&lt;br /&gt;&lt;br /&gt;I managed a smile, in a hopeful attempt at leniency.&lt;br /&gt;&lt;br /&gt;"Oh, well all of the stores are closed at 5 PM..."&lt;br /&gt;&lt;br /&gt;Whoa! This might actually be working.&lt;br /&gt;&lt;br /&gt;"... you will have to wait until later."&lt;br /&gt;&lt;br /&gt;Reprieve?&lt;br /&gt;&lt;br /&gt;"Meanwhile, get a beer and enjoy the game."&lt;br /&gt;&lt;br /&gt;Free at last! Free at last!&amp;nbsp;I had successfully negotiated my way out of jail in a foreign land, and the beer was very tasty, too!&lt;br /&gt;&lt;br /&gt;The result of the game put a damper on the celebrations. Spain scored an impressive goal with just a few minutes before the end of overtime. The streets cleared and the city returned to normal. A national week of celebration was replaced with a warm homecoming for the National Team in Amsterdam. My newfound friends in Rotterdam were a pleasure and I am truly grateful for being a part of the festivities.&lt;br /&gt;&lt;br /&gt;As for the Orange Police, I have learned my lesson and will never again transgress.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-5149718652966768605?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/5149718652966768605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2010/07/getting-arrested-at-world-cup.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/5149718652966768605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/5149718652966768605'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2010/07/getting-arrested-at-world-cup.html' title='Getting arrested at the World Cup celebration'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_mEl5xoSoWPw/TEOVKkN5I7I/AAAAAAAAAHI/B_r_uDOxRq0/s72-c/SeaOfOrange.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-8583348650404107415</id><published>2010-07-10T07:26:00.000-07:00</published><updated>2010-07-10T07:26:27.876-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zfs'/><title type='text'>ZFS Training in Rotterdam next week</title><content type='html'>Next week I'll be offering an in-depth ZFS and &lt;a href="http://www.nexenta.com/"&gt;NexentaStor&lt;/a&gt; training session in Rotterdam, the Netherlands.&amp;nbsp;&lt;a href="http://www.inprove.nl/"&gt;INPROVE&lt;/a&gt;&amp;nbsp;is hosting the event and we have a full classroom.&amp;nbsp;Though I did not plan for arriving in Amsterdam at the same time as the World Cup finals, I'm sure it will be a festive occasion. I'm sure my Spanish friends will understand that I will be wearing Orange.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-8583348650404107415?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/8583348650404107415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2010/07/zfs-training-in-rotterdam-next-week.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/8583348650404107415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/8583348650404107415'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2010/07/zfs-training-in-rotterdam-next-week.html' title='ZFS Training in Rotterdam next week'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-191313825066172200</id><published>2010-05-08T18:43:00.000-07:00</published><updated>2010-05-08T18:43:27.296-07:00</updated><title type='text'>Data protection beyond the pool</title><content type='html'>Many people are flocking towards ZFS solutions because of the sound, fundamental science behind ZFS and the features it provides. Two features which complete the hybrid storage pool design are separate logs and cache devices.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;i&gt;Separate log&lt;/i&gt; devices allow you to direct synchronous write I/O destined for the ZFS Intent Log (ZIL),&amp;nbsp;away&amp;nbsp;from the main pool and towards devices which are optimized for low-latency writes. One of the best examples of a separate log device, highly optimized for low-latency writes, is the &lt;a href="http://www.ddrdrive.com/"&gt;DDRdrive X1&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;i&gt;Cache&lt;/i&gt; devices allow you to extend the RAM-based Adaptive Replacement Cache (ARC) by adding cache devices as a second-level cache (L2ARC). If the random read performance of the cache devices is much better than the rand read performance of the pool, then cache devices are more cost-effective than adding RAM to enlarge the ARC.&lt;/li&gt;&lt;/ul&gt;The data retention policies of the separate log and cache devices are quite different.&lt;br /&gt;&lt;br /&gt;The cache device contains data that already exists on the pool devices. If a cache device fails, then a read access is treated as a cache miss and the data is retrieved from the pool. Sure, there might be a slight performance hit, but data is not compromised. Therefore, ZFS does not offer data protection (mirroring) for the cache devices.&lt;br /&gt;&lt;br /&gt;Separate log devices contain data that is not yet written to the pool. If the separate log device fails while the pool is imported, then the device is taken offline and writes are sent to the pool. If the entire log device fails when the pool is exported, then ZFS will not allow the pool to be imported because it cannot determine if data has been lost. Hence, for separate log devices, ZFS offers mirroring to protect the data that has not yet been written to the pool.&lt;br /&gt;&lt;br /&gt;Bottom line, if you are very concerned about the data retention of the pool and desire the cost-effective and high performance of the separate log and cache devices, then consider mirroring your separate log devices and don't worry about the cache devices.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-191313825066172200?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/191313825066172200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2010/05/data-protection-beyond-pool.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/191313825066172200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/191313825066172200'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2010/05/data-protection-beyond-pool.html' title='Data protection beyond the pool'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-2363516352497553000</id><published>2010-02-17T15:52:00.000-08:00</published><updated>2010-02-17T15:52:51.970-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='raidz'/><category scheme='http://www.blogger.com/atom/ns#' term='mirroring'/><category scheme='http://www.blogger.com/atom/ns#' term='mttdl'/><category scheme='http://www.blogger.com/atom/ns#' term='zfs'/><title type='text'>ZFS data protection comparison</title><content type='html'>ZFS now offers triple-parity raidz3. Conceptually, raidz3 is an N+3 parity protection scheme. Today, there are few, if any, other implementations of triple parity protection, so when we say "raidz is similar to RAID-5" and "raidz2 is similar to RAID-6" there is no similar allusion for raidz3. I prefer to say "raidz3 is like raidz2 with one additional level of parity protection. But how much better is raidz3 than raidz2? To help answer that question, I used the simple Mean Time to Data Loss (MTTDL) model to calculate the data retention capabilities of the possible configurations of 12 disks under ZFS. To be fair, the same model applies to other RAID implementations, but I'll use the ZFS terminology here.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In this MTTDL model, the configuration includes N total disks. If the data protection scheme is raidz3, then the minimum N = 1 data disk + 3 parity disks = 4. You can add more data disks to increase the overall available space, so if N=6 then you have 3 data disks + 3 parity disks.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The model uses the Mean Time between Failure (MTBF) as specified in a vendor's datasheet. It also uses a Mean Time to Repair (MTTR) which includes both the logistical repair time and any data reconstruction required. The simple model calculates MTTDL as:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;For non-protected schemes (dynamic striping, RAID-0)&lt;/blockquote&gt;&lt;blockquote style="margin-left: 0.79in; margin-right: 0.79in;"&gt;MTTDL[1] = MTBF / N&lt;/blockquote&gt;&lt;blockquote&gt;For single parity schemes (2-way mirror, raidz, RAID-1,RAID-5):&lt;/blockquote&gt;&lt;blockquote style="margin-left: 0.79in; margin-right: 0.79in;"&gt;MTTDL[1] = MTBF&lt;sup&gt;2&lt;/sup&gt; / (N * (N-1) * MTTR)&lt;/blockquote&gt;&lt;blockquote&gt;For double parity schemes (3-way mirror, raidz2, RAID-6):&lt;/blockquote&gt;&lt;blockquote style="margin-left: 0.79in; margin-right: 0.79in;"&gt;MTTDL[1] = MTBF&lt;sup&gt;3&lt;/sup&gt; / (N * (N-1) * (N-2) * MTTR&lt;sup&gt;2&lt;/sup&gt;)&lt;/blockquote&gt;&lt;blockquote&gt;For triple parity schemes (4-way mirror, raidz3):&lt;/blockquote&gt;&lt;blockquote style="margin-left: 0.79in; margin-right: 0.79in;"&gt;MTTDL[1] = MTBF&lt;sup&gt;4&lt;/sup&gt; / (N * (N-1) * (N-2) * (N-3) * MTTR&lt;sup&gt;3&lt;/sup&gt;)&lt;/blockquote&gt;&lt;div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;A graph the results for combinations of 12 disks looks like:&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a href="http://4.bp.blogspot.com/_mEl5xoSoWPw/S3x_V2Ry3RI/AAAAAAAAAHA/ysRKONNsDq0/s1600-h/MTTDL-1-12disks.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="298" src="http://4.bp.blogspot.com/_mEl5xoSoWPw/S3x_V2Ry3RI/AAAAAAAAAHA/ysRKONNsDq0/s400/MTTDL-1-12disks.jpg" width="400" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The results are consistent with previous MTTDL analysis. The 12-disk Stripe has an MTTDL of 6.7 years, which isn't very good (annualized rate = 15%) whereas the 12 disk 4-way stripe MTTDL is 2.75e+13 years (annualized rate = 3.63e-12%) and the 12 disk raidz3 MTTDL is 1.67e+11 years (annualized rate = 5.99e-10%).&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;The theory behind raidz3 will allow more parity disks. But at some point, the system design will be dominated by common failures and not the failure of independent disks. I hope this model will be useful for you to evaluate the data retention of your storage system.&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-2363516352497553000?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/2363516352497553000/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2010/02/zfs-data-protection-comparison.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/2363516352497553000'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/2363516352497553000'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2010/02/zfs-data-protection-comparison.html' title='ZFS data protection comparison'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_mEl5xoSoWPw/S3x_V2Ry3RI/AAAAAAAAAHA/ysRKONNsDq0/s72-c/MTTDL-1-12disks.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-8990090010723457605</id><published>2010-02-04T14:27:00.000-08:00</published><updated>2010-02-05T15:46:01.000-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nexenta'/><category scheme='http://www.blogger.com/atom/ns#' term='zfs'/><category scheme='http://www.blogger.com/atom/ns#' term='nexentastor'/><title type='text'>ZFS training in Atlanta, March 16-18, 2010</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;I will be presenting a &lt;/span&gt;&lt;a href="http://nexenta-atlanta.eventbrite.com/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;3-day training session for systems and storage administrators&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; on &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Zfs"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;ZFS&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; and &lt;/span&gt;&lt;a href="http://www.nexenta.com/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;NexentaStor&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt; in the Atlanta area March 16-18, 2010. The team has put together a fantastic syllabus including in-depth exposure to the latest ZFS and NAS trends.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Attendees can choose to attend the three-day program, or the two-day advanced portion. The course is structured as follows:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Arial, sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 8px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Day 1: Introduction to ZFS and Nexenta Systems Storage Technologies&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Day 2: De-duplication in a VM World&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Day 3: Optimizing NAS Performance&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div style="line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 8px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Attendees should have some familiarity with storage concepts and terminology, but does not assume any knowledge of ZFS or familiarity with the NexentaStor storage appliance.&lt;/span&gt;&lt;/div&gt;&lt;div style="line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 8px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;The course will include hands-on exercises with ZFS and NexentaStor.&lt;/span&gt;&lt;/div&gt;&lt;div style="line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 8px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;Best of all, lunch will be provided each day.&lt;/span&gt;&lt;/div&gt;&lt;div style="line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 8px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;To sign up or view the detailed syllabus, visit the&amp;nbsp;&lt;/span&gt;&lt;a href="http://nexenta-atlanta.eventbrite.com/"&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;nexenta-atlanta.eventbrite.com event registration site&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;&lt;div style="line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 8px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: medium;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-8990090010723457605?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/8990090010723457605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2010/02/zfs-training-in-atlanta-march-15-17.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/8990090010723457605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/8990090010723457605'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2010/02/zfs-training-in-atlanta-march-15-17.html' title='ZFS training in Atlanta, March 16-18, 2010'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-5138786223666544238</id><published>2010-01-31T10:11:00.000-08:00</published><updated>2010-01-31T10:11:01.152-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zfs'/><category scheme='http://www.blogger.com/atom/ns#' term='opensolaris'/><title type='text'>Community helping the community, ala YouTube</title><content type='html'>The video generation is taking hold in the &lt;a href="http://www.opensolaris.org/"&gt;OpenSolaris&lt;/a&gt; community. Recently, &lt;a href="http://www.youtube.com/user/msknight5"&gt;Michelle Knight&lt;/a&gt;, a self-described general lunatic, asked for help on the &lt;a href="http://opensolaris.org/jive/forum.jspa?forumID=80"&gt;OpenSolaris ZFS forum&lt;/a&gt;. But quite unlike most folks who get help and quietly wander away, or (hopefully) post a summary for posterity, she made a video describing what she learned and posted to YouTube. Very cool. Well done, Michelle!&lt;br /&gt;&lt;br /&gt;&lt;object height="360" width="580"&gt;&lt;param name="movie" value="http://www.youtube.com/v/tpzsSptzmyA&amp;hl=en_US&amp;fs=1&amp;rel=0&amp;border=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/tpzsSptzmyA&amp;hl=en_US&amp;fs=1&amp;rel=0&amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="580" height="360"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-5138786223666544238?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/5138786223666544238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2010/01/community-helping-community-ala-youtube.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/5138786223666544238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/5138786223666544238'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2010/01/community-helping-community-ala-youtube.html' title='Community helping the community, ala YouTube'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-8929739971608750691</id><published>2010-01-27T10:44:00.000-08:00</published><updated>2010-01-27T14:15:38.125-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='systems engineering'/><title type='text'>Magic Mouse and Ring Finger Solution</title><content type='html'>I use an &lt;a href="http://www.apple.com/magicmouse/"&gt;Apple Magic Mouse&lt;/a&gt; and really do love it. I use &lt;a href="http://www.adobe.com/products/indesign/family/"&gt;Adobe InDesign CS4&lt;/a&gt; for writing technical documents. I also have a ring finger. Each of these things works well by itself. Together, they don't work well. This is a typical systems engineering problem. Each part works as designed, but together they don't work well.&lt;br /&gt;Now you are probably wondering why these three things don't work together - millions of people use mice, thousands of writers use InDesign, and almost all of the people on Earth have ring fingers. Let me explain.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;The Magic Mouse is so very, very cool because the entire surface is touch sensitive. It is very easy to use and allows you do things you could never do before with a mouse. For instance, many mice have had a little scroll wheel and OSes are designed to use the scroll wheel movement to scroll up and down inside a window. Some mice have little trackballs that allow you to scroll left or right, too. The Magic Mouse is almost like giving your fingers a trackpad on top of the mouse. Implementing a multiple button click function is simply a matter of the programming that determines where your finger is when you press. Very cool. Very habit forming. In just a few short weeks, my hand is already forgetting how to use older mice.&lt;/li&gt;&lt;li&gt;Adobe InDesign is a very powerful publishing product. I've been using FrameMaker since 1987 and find that InDesign has many of the features I've use in FrameMaker, but is even more powerful and flexible. One of the interesting concepts in InDesign is the pasteboard. Your document sits atop the pasteboard. If you want to move a frame, text, image, or other object out of your document quickly, but without deleting the object, then you can just slide it over to the pasteboard beside the page. Only the objects on the page are printed or exported to PDF, so you can use the pasteboard to keep your miscellaneous collection of stuff very easily. The pasteboard is larger than your page, and by default adds about 8 inches to each side of your document. This means that your pasteboard for a letter sized document is around 24 inches wide. Since my screen is not 24 inches wide (is Santa listening? I'll be a good boy) the windows I use have horizontal scroll bars. For the most common case, the page is in the center of the scroll bar. I've spent a few hours trying to figure out how to make the pasteboard thinner, but none of the tricks work.&lt;/li&gt;&lt;li&gt;My ring finger has a tendency to rest on the right side of the mouse while my index and middle fingers wander about the mouse top and click.&lt;/li&gt;&lt;/ol&gt;OK, so now you should be able to recognize the problem. My ring finger is interpreted by the Magic Mouse to do a horizontal scroll and InDesign extends the scrolling area by 60%, most of which is area I rarely use. In other words, while I'm working away, I get suddenly scrolled off into the blank area of the pasteboard. Since the document is in the middle, I have to scroll back to the center, which is harder to do than scrolling full left or full right.&lt;br /&gt;The solution I've found is to put a small bit of painter's tape over the area where my ring finger rests. I could have used duct tape, and that would make a good joke, but I prefer the painters tape for now.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_mEl5xoSoWPw/S2CH7VMNSgI/AAAAAAAAAGg/sVHj9Y0fInM/s1600-h/mm-solved.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_mEl5xoSoWPw/S2CH7VMNSgI/AAAAAAAAAGg/sVHj9Y0fInM/s320/mm-solved.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;So far this is working well. A programmatic way to build dead spots on the Magic Mouse would be a useful feature. InDesign could allow me to control the horizontal size of the pasteboard. All of these programming changes are perhaps not difficult, but will also not be solved soon. For now I can be highly productive without having to horizontally scroll back to center on InDesign.&lt;br /&gt;Now, about those deadlines...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-8929739971608750691?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/8929739971608750691/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2010/01/magic-mouse-and-ring-finger-solution.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/8929739971608750691'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/8929739971608750691'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2010/01/magic-mouse-and-ring-finger-solution.html' title='Magic Mouse and Ring Finger Solution'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_mEl5xoSoWPw/S2CH7VMNSgI/AAAAAAAAAGg/sVHj9Y0fInM/s72-c/mm-solved.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-7834591418642035524</id><published>2010-01-27T09:50:00.000-08:00</published><updated>2010-01-27T14:15:07.744-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sun'/><category scheme='http://www.blogger.com/atom/ns#' term='systems engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Integrated Systems Engineering Redux</title><content type='html'>Today, Oracle is presenting a &lt;a href="http://www.oracle.com/webapps/events/EventsDetail.jsp?p_eventId=108481&amp;amp;src=6806472&amp;amp;src=6806472&amp;amp;Act=22"&gt;webcast describing their strategy for the company going forward after the Sun acquisition&lt;/a&gt;. In the first 20 minutes there was much discussion about delivering integrated systems: applications + database + OS + hardware. This is a tremendous value proposition. It is such a tremendous value proposition that it could have been taken from the slides we put together 8 years ago in Sun's Integrated Systems Engineering group.&lt;br /&gt;We had difficulties with the business of delivering such integrated solutions. Sure, there were a few technical difficulties, but working together with the different engineering groups at Sun and Oracle, we were able to deliver a good technical solution. However, the business challenges of working across different product groups and companies were insurmountable at the time. In the end, the Integrated Systems Engineering group was disbanded and the products were EOLed.&lt;br /&gt;In my position as Chief Architect for the Integrated Systems Engineering group, I had the pleasure of working with many talented engineers and product marketing teams. But the experience taught me that very good technical solutions may not be successful because of the rest of the business activities needed to ensure the right products offering the right value are delivered at the right time to the right market. And those products include much more than a what a systems engineering team can integrate in a lab. This is why I entered the &lt;a href="http://www.marshall.usc.edu/emba/"&gt;EMBA&lt;/a&gt; program at &lt;a href="http://www.usc.edu/"&gt;USC's&lt;/a&gt; &lt;a href="http://www.marshall.usc.edu/"&gt;Marshall School of Business&lt;/a&gt;. I already knew how to integrate complex systems and make them simple to install and manage. But I did not know how to take such a product and make it successful in the market. I'm a lot smarter now.&lt;br /&gt;I wish Oracle well in their future endeavors. The value proposition is good. The need exists. The challenges are difficult. If they can overcome the non-technical barriers, the future looks bright.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-7834591418642035524?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/7834591418642035524/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2010/01/integrated-systems-engineering-redux.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/7834591418642035524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/7834591418642035524'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2010/01/integrated-systems-engineering-redux.html' title='Integrated Systems Engineering Redux'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-748911472406439171</id><published>2010-01-25T10:04:00.000-08:00</published><updated>2010-01-25T10:04:27.453-08:00</updated><title type='text'>National recognition for San Diego County CERT</title><content type='html'>The &lt;a href="http://www.amgentourofcalifornia.com/"&gt;AMGEN Tour of California&lt;/a&gt; bicycle race rode to the top of Palomar Mountain last year. I mentioned it in &lt;a href="http://blog.richardelling.com/2009/02/tour-goes-to-palomar.html"&gt;my blog prior to the race&lt;/a&gt;. This month I am pleased to announce that the &lt;a href="http://www.citizencorps.gov/cert/newsletter/CERT_Final%20Newsletter_v2i3.pdf"&gt;CERT National Newsletter (Volume 2, issue 3)&lt;/a&gt; features a story about the preparation and nearly flawless execution of the event. This was truly a case where dozens of volunteers came together, at short notice, to pull off a significant event involving thousands of people and a nationwide TV audience.&lt;br /&gt;Bill Leininger and the crew from &lt;a href="http://sites.google.com/site/pmvfdcert/"&gt;Palomar Mountain Volunteer Fire Department CERT&lt;/a&gt; demonstrated superb leadership and I am proud to have been able to participate. I'd also like to thank all of the volunteers and groups who came together to make this event a success.&lt;br /&gt;On page 2, you can yours truly (in the red shirt, strategically located near the donuts) during the pre-event briefing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-748911472406439171?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/748911472406439171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2010/01/national-recognition-for-san-diego.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/748911472406439171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/748911472406439171'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2010/01/national-recognition-for-san-diego.html' title='National recognition for San Diego County CERT'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-669555282044960920</id><published>2010-01-15T19:02:00.000-08:00</published><updated>2010-01-15T21:13:20.407-08:00</updated><title type='text'>Looking at I/O Performance with Bubbles</title><content type='html'>&lt;div style="text-align: left;"&gt;I am helping a client work through some performance problems and thought I might share a view with you. The data was collected for 57 seconds during a production run. The problem we are chasing is the usual performance problem: latency. In some cases the latency is close to 100ms, which would make everyone except a floppy disk user unhappy. The view of the data is intended to shed some light on where problems might exist that we need to further explore. Using summary data from tools like iostat, vmstat, mpstat, prstat, or top won't show you anything like this.&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.richardelling.com/Home/videos/ZFS-Bubble-1.swf?attredirects=0"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 219px;" src="http://1.bp.blogspot.com/_mEl5xoSoWPw/S1FJUixPd2I/AAAAAAAAAGU/qoHvRL1pumA/s320/bubble-chart-screenshot.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5427199643237709666" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;a href="http://www.richardelling.com/Home/videos/ZFS-Bubble-1.swf?attredirects=0"&gt;&lt;/a&gt;&lt;div&gt;&lt;a href="http://www.richardelling.com/Home/videos/ZFS-Bubble-1.swf?attredirects=0"&gt;In the bubble chart&lt;/a&gt;, the Y axis is the size of the I/Os. Along the X axis, reads are on the left and writes are on the right. The size of the bubbles is the latency in microseconds. Big bubbles mean big performance problems. Press the play button to see the changes over time.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are two ZFS transaction group (txg) commits: one at 8:49:14 and another at 8:49:44. ZFS will, by default depending on the version, commit the txg every 30 seconds. When the txg commits, you will see a flurry of relatively small (8 KB) write activity. Though this may look really terrible (and it is) remember that txg commits are asynchronous, so you will rarely feel them. But in this sample, some of the txg I/Os take more than 50 milliseconds to complete. In the entire sample, the worst latency was more than 370 milliseconds (more than 1/3 of a second). For a slow HDD, 50 milliseconds might not be so bad. But in this case, the target is an expensive RAID array. More work needed to get to the bottom of this mystery...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you would like to see this sort of analysis for your system, &lt;a href="http://www.richardelling.com/Home/contact-information"&gt;contact me&lt;/a&gt; and we can discuss an engagement.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-669555282044960920?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/669555282044960920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2010/01/looking-at-io-performance-with-bubbles.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/669555282044960920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/669555282044960920'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2010/01/looking-at-io-performance-with-bubbles.html' title='Looking at I/O Performance with Bubbles'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_mEl5xoSoWPw/S1FJUixPd2I/AAAAAAAAAGU/qoHvRL1pumA/s72-c/bubble-chart-screenshot.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-8684027833884914578</id><published>2010-01-12T14:26:00.000-08:00</published><updated>2010-01-12T14:50:59.939-08:00</updated><title type='text'>St. Mac magazine Premier Edition</title><content type='html'>&lt;div&gt;I was doing the holiday cleaning recently and came across a blast from the past. Long ago, when I worked for NASA at the Kennedy Space Center, we were doing some work with an Apple Lisa and an Apple ///. Naturally, when the Macintosh first appeared, it created quite a stir. Along with the rush of announcements and press was the creation of a new magazine, St. Mac. I dusted off a copy of the premier edition. Apparently the magazine didn't last long, &lt;a href="http://www.trailingedge.com/mags.html#stmac"&gt;only 7 issues&lt;/a&gt;, but it brought back a lot of memories. My, how computing has changed since then... why kids today can't even remember when pixels weren't square and how the Mac saved mankind from a world of ellipses.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The cover shows the second generation Lisa. You can tell because the first generation used &lt;a href="http://www.brouhaha.com/~eric/retrocomputing/lisa/twiggy.html"&gt;twiggy&lt;/a&gt; drives and the second used the new removable storage rage, 3.5" floppy disks.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_mEl5xoSoWPw/S0z46cvjAOI/AAAAAAAAAGE/_jOsqBToXnY/s1600-h/St.Mac-Premier-Cover-s.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 249px; height: 320px;" src="http://3.bp.blogspot.com/_mEl5xoSoWPw/S0z46cvjAOI/AAAAAAAAAGE/_jOsqBToXnY/s320/St.Mac-Premier-Cover-s.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5425985334106325218" /&gt;&lt;/a&gt;&lt;div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span"  style="color:#0000EE;"&gt;&lt;span class="Apple-style-span" style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;The table of contents includes a picture of a young &lt;a href="http://en.wikipedia.org/wiki/Bill_Atkinson"&gt;Bill Atkinson&lt;/a&gt;. Bill made square pixels cool.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_mEl5xoSoWPw/S0z464hBIQI/AAAAAAAAAGM/aHWvXJRsFkg/s1600-h/St.Mac-Premier-Contents-s"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 249px; height: 320px;" src="http://3.bp.blogspot.com/_mEl5xoSoWPw/S0z464hBIQI/AAAAAAAAAGM/aHWvXJRsFkg/s320/St.Mac-Premier-Contents-s" border="0" alt="" id="BLOGGER_PHOTO_ID_5425985341561577730" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-8684027833884914578?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/8684027833884914578/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2010/01/st-mac-magazine-premier-edition.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/8684027833884914578'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/8684027833884914578'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2010/01/st-mac-magazine-premier-edition.html' title='St. Mac magazine Premier Edition'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_mEl5xoSoWPw/S0z46cvjAOI/AAAAAAAAAGE/_jOsqBToXnY/s72-c/St.Mac-Premier-Cover-s.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-6922880202171092874</id><published>2010-01-09T10:07:00.000-08:00</published><updated>2010-01-10T18:07:21.789-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zfs zil'/><category scheme='http://www.blogger.com/atom/ns#' term='nexenta'/><category scheme='http://www.blogger.com/atom/ns#' term='zfs'/><category scheme='http://www.blogger.com/atom/ns#' term='opensolaris'/><category scheme='http://www.blogger.com/atom/ns#' term='nexentastor'/><category scheme='http://www.blogger.com/atom/ns#' term='benchmark'/><title type='text'>I/O Reduction and the ZIL</title><content type='html'>I came across an interesting microbenchmark this week. It shows that some workloads can show confusing results, or &lt;a href="http://en.wikipedia.org/wiki/Head_fake"&gt;head fakes&lt;/a&gt;, can lead to difficulty in understanding benchmark results. In this case, a method we use for finding the performance envelope for ZFS is not effective.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Before I dive into the microbenchmark, a few words about the ZFS Intent Log (ZIL). ZFS is a transactional file system, which means that it collects I/O into a transaction group (txg) and commits that txg to persistent storage. In later ZFS implementations, that txg commit occurs every 30 seconds. However, if an application needs to ensure that an I/O is written to persistent storage immediately, often called synchronous writes (though that is arguably not the best descriptive term), then waiting for up to 30 seconds is not an option. This is where the ZIL enters the picture. In the synchronous write case, ZFS will write the record to the ZIL and later commit the record with the txg. This ensures the synchronous write agreement between the application and ZFS is honored -- a good thing. Neil Perrin offers a more detailed description in his famous &lt;i&gt;&lt;a href="http://blogs.sun.com/perrin/entry/the_lumberjack"&gt;lumberjack blog&lt;/a&gt;&lt;/i&gt; posting.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Synchronous writes are the bane of high performance. Really. We see this every day. It causes performance guys to gnash their teeth and cuss. When a microbenchmark wanders along and does a lot of synchronous writes, complaints about how "&lt;insert&gt; sucks" and "I can't believe those file system developers could be so insensitive" come pouring forth.&lt;/insert&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;To determine the performance envelope of a benchmark, it is relatively easy to disable the ZIL. This is neither a safe nor recommended option for production systems or people who like their data. But for benchmarking, it allows a performance engineer to quickly determine the best possible performance for the given system configuration. The ZIL is then re-enabled and the work can concentrate on how to approach that performance goal. Tools like &lt;a href="http://www.richardelling.com/Home/scripts-and-programs-1/zilstat"&gt;zilstat&lt;/a&gt; are designed to help with this endeavor, and can save you a lot of time when you suspect synchronous write performance might be an issue.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But disabling the ZIL can also hide important behavior. That is why this microbenchmark could be a poster child for benchmarking that doesn't do what you expect. Here it is:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new', serif;"&gt;&lt;span class="Apple-style-span" style="white-space: pre;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;while true; do&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;echo "blah" &gt; outputfile&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;done&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When run on an Solaris NFS client with a Solaris NFS server using default NFS settings, this will cause the following to occur:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;outputfile is LOOKUPed&lt;/li&gt;&lt;li&gt;outputfile is OPENed&lt;/li&gt;&lt;li&gt;ACCESS to outputfile is checked&lt;/li&gt;&lt;li&gt;The data is written to the file with WRITE&lt;/li&gt;&lt;li&gt;The data is COMMITted&lt;/li&gt;&lt;li&gt;outputfile is CLOSEd&lt;/li&gt;&lt;/ol&gt;This will also, by default, cause the file to be synchronously written, the so-called "sync-on-close" operation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Argv! This simple microbenchmark actually makes lot of synchronous writes to the file system. &lt;a href="http://www.richardelling.com/Home/scripts-and-programs-1/zilstat"&gt;zilstat&lt;/a&gt; will happily show that the ZIL is working hard when running this microbenchmark. If you run this, then you can experiment with various pool or separate (ZIL) log configurations to your heart's content.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;However, if you disable the ZIL, then the number of I/O operations is reduced to just a handfull, every 30 seconds. Why? Because ZFS is clever enough to recognize that the same file is being overlaid and is only concerned with physically commiting the last one in the transaction group. In other words, the amount of I/O traffic to the pool is dramatically reduced. When this happens, you are no longer measuring the affect of ZIL I/O, you are also measuring the main pool I/O. The results look something like this:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;ZIL enabled, no separate log = 100 iterations/second&lt;/li&gt;&lt;li&gt;ZIL enabled, separate log on a fast SSD = 1,000 iterations/second&lt;/li&gt;&lt;li&gt;ZIL disabled = 10,000 iterations/second&lt;/li&gt;&lt;/ol&gt;In other words the affect of eliminating the pool I/O in addition to the ZIL I/O made the system faster!  Hurray!  But wait just a dog-gone second. That means that the benchmark is basically useless -- it does almost zero physical I/O when the ZIL is disabled.  This is kinda like redirecting all of the data to /dev/null -- a fun trick to amuse your friends at parties, but otherwise completely useless.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The moral of this tale is: beware of microbenchmarks and how they can confuse your understanding of the real system behavior.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;P.S. Don't disable the ZIL.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;P.P.S. I really mean it, don't disable the ZIL.  Seriously. I might cut you some slack for benchmark purposes, but other than that, don't disable the ZIL. Period. End of discussion.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-6922880202171092874?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/6922880202171092874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2010/01/io-reduction-and-zil.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/6922880202171092874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/6922880202171092874'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2010/01/io-reduction-and-zil.html' title='I/O Reduction and the ZIL'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-5924705435260073680</id><published>2010-01-06T09:51:00.000-08:00</published><updated>2010-01-06T10:20:47.590-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jellyfish'/><category scheme='http://www.blogger.com/atom/ns#' term='macadamia'/><category scheme='http://www.blogger.com/atom/ns#' term='orchard'/><category scheme='http://www.blogger.com/atom/ns#' term='ranch'/><title type='text'>My First Macadamia</title><content type='html'>&lt;div&gt;A few years ago I planted some &lt;a href="http://en.wikipedia.org/wiki/Macadamia"&gt;macadamia&lt;/a&gt; trees in the orchard. It takes a few years before they begin to bear fruit. 2009 was the first year that we had blooms. I was very excited!&lt;/div&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_mEl5xoSoWPw/S0TQ6Nh2hXI/AAAAAAAAAFk/3zqcNtJ7-vI/s1600-h/Macadamia+-+1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://1.bp.blogspot.com/_mEl5xoSoWPw/S0TQ6Nh2hXI/AAAAAAAAAFk/3zqcNtJ7-vI/s320/Macadamia+-+1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5423689549743555954" /&gt;&lt;/a&gt;This small cluster of blooms produced 6 nuts. Of these, all disappeared over the summer (I blame the ravens) except one. Last week, I harvested the one, special nut. I brought the nut inside to take pictures, but the new kitten, Jellyfish, was convinced that it was her personal playtoy.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;Jellyfish attacks the unsuspecting nut!&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_mEl5xoSoWPw/S0TRCv89bPI/AAAAAAAAAFs/i2ABQ9zGrQk/s1600-h/Macadamia+-+2.jpg" style="text-decoration: none;"&gt;&lt;img style="text-align: left;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; cursor: pointer; width: 287px; height: 320px; " src="http://2.bp.blogspot.com/_mEl5xoSoWPw/S0TRCv89bPI/AAAAAAAAAFs/i2ABQ9zGrQk/s320/Macadamia+-+2.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5423689696423013618" /&gt;&lt;/a&gt;I had to act fast. Armed with a bit of foam pipe insulation and a hammer, I whacked the nut and extracted the precious seed.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_mEl5xoSoWPw/S0TR2YTIrOI/AAAAAAAAAF0/FN4_SLCevRA/s1600-h/Macadamia+-+3.jpg"&gt;&lt;/a&gt;&lt;div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_mEl5xoSoWPw/S0TR2YTIrOI/AAAAAAAAAF0/FN4_SLCevRA/s1600-h/Macadamia+-+3.jpg" style="text-decoration: none;"&gt;&lt;img style="text-align: left;display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; cursor: pointer; width: 320px; height: 238px; " src="http://4.bp.blogspot.com/_mEl5xoSoWPw/S0TR2YTIrOI/AAAAAAAAAF0/FN4_SLCevRA/s320/Macadamia+-+3.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5423690583426772194" /&gt;&lt;/a&gt;Yummy!  And yes, that is a cow floating above my head. This is a ranch, after all.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_mEl5xoSoWPw/S0TR8JQv2NI/AAAAAAAAAF8/Mc6gCeQsadk/s1600-h/Macadamia+-+4.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 279px;" src="http://2.bp.blogspot.com/_mEl5xoSoWPw/S0TR8JQv2NI/AAAAAAAAAF8/Mc6gCeQsadk/s320/Macadamia+-+4.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5423690682469439698" /&gt;&lt;/a&gt;Nothin' left but the shell. Next year I'm expecting more blooms and nuts, wish me luck.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-5924705435260073680?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/5924705435260073680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2010/01/my-first-macadamia.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/5924705435260073680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/5924705435260073680'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2010/01/my-first-macadamia.html' title='My First Macadamia'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_mEl5xoSoWPw/S0TQ6Nh2hXI/AAAAAAAAAFk/3zqcNtJ7-vI/s72-c/Macadamia+-+1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-5467548268836127983</id><published>2010-01-05T10:53:00.000-08:00</published><updated>2010-01-05T12:01:10.384-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='raidz'/><category scheme='http://www.blogger.com/atom/ns#' term='raid'/><category scheme='http://www.blogger.com/atom/ns#' term='mirroring'/><category scheme='http://www.blogger.com/atom/ns#' term='lisa'/><category scheme='http://www.blogger.com/atom/ns#' term='zfs'/><category scheme='http://www.blogger.com/atom/ns#' term='usenix'/><category scheme='http://www.blogger.com/atom/ns#' term='opensolaris'/><category scheme='http://www.blogger.com/atom/ns#' term='zpool'/><category scheme='http://www.blogger.com/atom/ns#' term='solaris'/><category scheme='http://www.blogger.com/atom/ns#' term='compression'/><title type='text'>ZFS Tutorial at the USENIX LISA09 slides posted</title><content type='html'>I have posted my &lt;a href="http://www.slideshare.net/relling/zfs-tutorial-usenix-lisa09-conference"&gt;slides&lt;/a&gt; for the ZFS Tutorial at the &lt;a href="http://www.usenix.org/events/lisa09/"&gt;USENIX LISA09 conference&lt;/a&gt; on &lt;a href="http://www.slideshare.net/"&gt;slideshare.net&lt;/a&gt;. I apologize for the delay, I've been fighting the beast trying to get the PDF uploaded. I finally gave up and uploaded the keynote presentation. As such, I've also disabled the file download. If you want a copy of the PDF, drop me an e-mail and I'll send it to you.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;These slides are the full deck. During the presentation, I used a subset of the slides, but made the full deck available to the attendees. I hope you find these useful.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you'd like to attend one of my ZFS tutorials, then you can also drop me a line.  I have several in the planning stage and hopefully we can schedule something nearby.&lt;/div&gt;&lt;div style="width:425px;text-align:left" id="__ss_2598099"&gt;&lt;a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/relling/zfs-tutorial-usenix-lisa09-conference" title="ZFS Tutorial USENIX LISA09 Conference"&gt;ZFS Tutorial USENIX LISA09 Conference&lt;/a&gt;&lt;object style="margin:0px" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=zfs-tutorial-lisa09-091127115948-phpapp01&amp;amp;stripped_title=zfs-tutorial-usenix-lisa09-conference"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowScriptAccess" value="always"&gt;&lt;embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=zfs-tutorial-lisa09-091127115948-phpapp01&amp;amp;stripped_title=zfs-tutorial-usenix-lisa09-conference" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;"&gt;View more &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a style="text-decoration:underline;" href="http://www.slideshare.net/relling"&gt;Richard Elling&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-5467548268836127983?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/5467548268836127983/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2010/01/zfs-tutorial-at-usenix-lisa09-slides.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/5467548268836127983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/5467548268836127983'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2010/01/zfs-tutorial-at-usenix-lisa09-slides.html' title='ZFS Tutorial at the USENIX LISA09 slides posted'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-1877544729011268301</id><published>2009-10-26T16:35:00.000-07:00</published><updated>2009-10-26T16:45:52.419-07:00</updated><title type='text'>LISA09 next week</title><content type='html'>The &lt;a href="http://www.usenix.org/events/lisa09/"&gt;USENIX LISA09&lt;/a&gt; conference is next week and I'll be leaving the ranch to travel &lt;span style="font-style:italic;"&gt;back east&lt;/span&gt; to attend. On Monday, November 2 I'll be giving a &lt;a href="http://www.usenix.org/events/lisa09/training/tutonefile.html#Monday"&gt;tutorial on ZFS&lt;/a&gt;. Much has changed since I gave a similar tutorial at the USENIX Technical Conference last June. Somehow I've got to get the content down from 200+ slides into something feasible to deliver as a one-day tutorial. As the LISA audience is more geared towards systems administration, I'll whittle down the technical details and concentrate on more practical applications of the ZFS technology. Afterwards, at the research center (pub) we can cover other details, as needed. Please join us in Baltimore for a week with the talented teams who manage large computer sites!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-1877544729011268301?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/1877544729011268301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2009/10/lisa09-next-week.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/1877544729011268301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/1877544729011268301'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2009/10/lisa09-next-week.html' title='LISA09 next week'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-7250875587514258744</id><published>2009-10-21T13:33:00.000-07:00</published><updated>2009-10-21T16:11:17.471-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zfs'/><category scheme='http://www.blogger.com/atom/ns#' term='opensolaris'/><category scheme='http://www.blogger.com/atom/ns#' term='solaris'/><category scheme='http://www.blogger.com/atom/ns#' term='backups'/><title type='text'>check integrity of ZFS send streams with zstreamdump</title><content type='html'>If you wander through the &lt;a href="http://opensolaris.org/"&gt;OpenSolaris&lt;/a&gt; &lt;a href="http://www.opensolaris.org/jive/forum.jspa?forumID=80"&gt;ZFS-discuss archives&lt;/a&gt; or look at the &lt;a href="http://www.solarisinternals.com/wiki/index.php/ZFS_Best_Practices_Guide"&gt;ZFS Best Practices Guide&lt;/a&gt;, then you can encounter references and debates about whether the zfs send and zfs receive commands are suitable for backups. &lt;a href="http://richardelling.blogspot.com/2009/08/backups-for-file-systems-with-millions.html"&gt;As I've described before&lt;/a&gt;, zfs send and zfs receive can be part of a comprehensive backup strategy for high-transaction environments. But people get nervous when we discuss placing a zfs send stream on persistent storage. The reasoning is that if the stream gets corrupted, then it is useless. There is an &lt;a href="http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6736794"&gt;RFE open to improve the robustness of zfs receive&lt;/a&gt;, but that is little consolation for someone who has lost data. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The fundamental design of ZFS is exposed in zfs send -- the send stream contains an object, not files. This is great for replicating objects, and since ZFS file systems and volumes are objects, it is quite handy. This is why zfs send and zfs receive do not replace the functionality of an enterprise backup system that works on files. So, I expect the technologies to remain complementary for a very long time.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But there are some simple things which can improve management of zfs send streams. It is a good idea to check the integrity of the stream when stored on permanent storage before you try a zfs receive, or just to sleep better at night. You can do that by telling zfs to not actually apply the receive using the "-n" option to zfs receive, but this only returns a boolean response. Something more concrete and descriptive would be nice...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;OpenSolaris build 125 brings the zstreamdump(1m) command, that allows you to examine the contents of a zfs send stream. To demonstrate, I made a quick (diving) pool called "zdiving," copied some data to it, made a snapshot saved as a file, and ran zstreamdump. Observe:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# &lt;b&gt;&lt;i&gt;ramdiskadm -a rd1 200m&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;/dev/ramdisk/rd1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# &lt;b&gt;&lt;i&gt;zpool create zdiving /dev/ramdisk/rd1&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# &lt;b&gt;&lt;i&gt;cp somefile /zdiving&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# &lt;b&gt;&lt;i&gt;zfs snapshot zdiving@today&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# &lt;b&gt;&lt;i&gt;zfs send zdiving@today &gt; zdiving.zstream&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;# &lt;b&gt;&lt;i&gt;zstreamdump &amp;LT; zdiving.zstream&lt;/i&gt;&lt;/b&gt;&lt;i&gt;&lt;/i&gt;&lt;/span&gt;&lt;i&gt;&lt;/i&gt;&lt;/div&gt;&lt;i&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;BEGIN record&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;        version = 1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;        magic = 2f5bacbac&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;        creation_time = 4adf8f3d&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;        type = 2&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;        flags = 0x0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;        toguid = 582cc98ae8f284cb&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;        fromguid = 0&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;        toname = zdiving@today&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;END checksum = 705e7f009f/441064477b71ce/1aacbf27d3a3e8a0/119dd4527bd9c6a3&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;SUMMARY:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;        Total DRR_BEGIN records = 1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;        Total DRR_END records = 1&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;        Total DRR_OBJECT records = 5&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;        Total DRR_FREEOBJECTS records = 791&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;        Total DRR_WRITE records = 5&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;        Total DRR_FREE records = 9&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;        Total records = 812&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;        Total write size = 2560 (0xa00)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;        Total stream length = 256696 (0x3eab8)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;So if you have any zfs send streams lying around, give zstreamdump a try. If you find a checksum mismatch, then please let me know... I'm collecting data on real checksum mismatches found in the wild.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-7250875587514258744?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/7250875587514258744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2009/10/check-integrity-of-zfs-send-streams.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/7250875587514258744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/7250875587514258744'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2009/10/check-integrity-of-zfs-send-streams.html' title='check integrity of ZFS send streams with zstreamdump'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-2314663588063430340</id><published>2009-08-20T10:22:00.000-07:00</published><updated>2009-08-20T11:37:26.510-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><title type='text'>Variance and cloud computing</title><content type='html'>Recently, I was asked about what I've done for cloud computing. Personally, I think "cloud computing" is just the latest marketing buzzword, and represents a passing fad. But the concepts people use when trying to describe the cloud are a good foundation for providing computing services. Many of these concepts have been in place for 25-30 years, at least in the engineering workstation market, but perhaps not widely applied to other markets. At their core, the goal is to reduce cost and complexity by reducing variance -- a noble goal well served by six sigma-like approaches.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For example, in the conversation the problem of rapid deployment or provisioning arose. 20 years ago this month, when I was the Manager of Network Support for the Auburn University College of Engineering, I had the task of taking a classroom full of boxes containing workstations and deploy them to the departments and classrooms prior to school starting. The only sane way to approach this is to reduce the variance between the systems. I produced a golden image of the OS and started cranking out workstations. But we still had variance problems. The network was not yet implemented in every building. So there were some deployments which were unique. Later, when we were able to connect all of the buildings (and eventually, we even connected to the internet :-) then I quickly resolved the unique systems and brought them into the fold. By the time I left Auburn, we could deploy a new workstation in about 20 minutes, including physically unpacking and installing the hardware, with the workstation being fully usable in the ubiquitous environment and connected to the internet. Sometimes, it would take longer than 20 minutes because we allowed the faculty member or staff to choose their hostname -- a process that could take days. Since the hostname was the only variable, it was no wonder that it cost time to resolve. But it is good to have real names instead of numbers for such things. Today, with a well designed "cloud" you could expect to deploy a &lt;i&gt;New Thing&lt;/i&gt; in just a few moments -- after resolving the unique properties such as billing information.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Rapid deployment is a &lt;i&gt;Good Thing&lt;/i&gt;, but it isn't a new thing. We've been doing that for many years. What seems to be new is that people who do not have the net in their DNA are starting to figure it out. I can loosely classify these as PC people, those who have been exposed to the software installation and configuration issues in the disconnected, fat client world -- aka PCs. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;This is where SaaS comes in. The problem with installing software on each and every fat client is that software changes over time. By the time a software vendor becomes successful in the fat client market, they could have dozens of versions of the software installed in the client base. Keeping track of all of the versions, and the features, bugs, and platform support is a nightmare. At Sun we constantly had customers asking for a compatibility matrix, which I call a sparse matrix, because there were so many products and platforms that were never tested together, it was impossible to make sure everything worked together at any one point in time, let alone as they changed over time. The best way to tackle this variance problem is to not install software on the fat client at all. I know, I know, this is the same mantra we sang about 20 years ago when the network was the computer, but it really is all about decreasing costs and complexity by getting rid of variance. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In a SaaS environment, you can roll out a new, improved version of your software and know that all of your customers will be on the same version. This is a huge reduction of variance in the installed base. This is also a huge win for the customer service group in your company. We did many studies at Sun that found the number of bug reports which had known solutions is large. Many enterprise customers are late adopters, which further compounds the problem of variance in the installed base.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So if it takes a marketing buzzword, like "cloud computing" or "SaaS," to help point people in the direction of removing variance, then I can live with it. Reducing variance is a &lt;i&gt;Good Thing&lt;/i&gt;.&lt;/div&gt;&lt;div&gt;Thanks Martha.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-2314663588063430340?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/2314663588063430340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2009/08/variance-and-cloud-computing.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/2314663588063430340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/2314663588063430340'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2009/08/variance-and-cloud-computing.html' title='Variance and cloud computing'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-1559287689274720871</id><published>2009-08-19T15:33:00.000-07:00</published><updated>2009-08-21T14:58:55.956-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zfs mail email backups archive solaris opensolaris'/><title type='text'>Backups for file systems with millions of files</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;Recently, there have been a number of discussions about how to backup an active file system with millions of files. This is a challenge because traditional backup tools do a file system walk -- traversing the file system from top to bottom looking at the modification time for each file. This works well for file systems with a modest number of files. For example, one of my OpenSolaris systems has around 62,000 files in the root file system and backups go at media speed. But when you get into the millions of files with deep heirarchy, the time required to manage the file system walk begins to dominate backup time. This can be a bad thing, especially if you backup to tape.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We didn't notice this problem with UFS because, quite simply, UFS can't handle millions of files in a single file system. But with ZFS becoming mainstream, it does not have this limitation and people are taking advantage of the ease of managing large datasets with ZFS.&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One successful approach to solving this problem uses ZFS snapshots to backup an active file system to a backup file system. For diversity, the backup file system could be located on another disk, array, or host. For cost efficiency, the backup file system can have different properties than the active file system -- compression is often a good idea. The trick is that the active file system can be optimized for high IOPS and the backup file system can be optimized for low cost per byte.&lt;/div&gt;&lt;div&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 98px;" src="http://4.bp.blogspot.com/_mEl5xoSoWPw/So8VHXvtyEI/AAAAAAAAAFY/2D4VOG8FqRE/s320/hi-level-ZFS-backups.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5372536096853706818" /&gt;&lt;/div&gt;&lt;div&gt;This might look familiar to you. Many people have performed backups from a replica of the production data. Most of those implementations perform the replication at the block level. ZFS can replicate at the file system level -- allowing policy or configuration changes at the block level, such as different RAID configurations or data compression.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;With block-level replicators, such as the Sun StorageTek Availability Suite, the replica has no knowledge of the context of the data. The replica's view is block-for-block identical to the original. With ZFS replicas, the file systems can have different data retention policies. For example, the production site may have a snapshot retention policy of 24 hours and the replica may have a retention policy of 31 days. As long as there is a latest, common snapshot between the production site and replica, any later snapshots can be replicated. Try doing that on a block-level replicator!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There is much more to this story. In particular, retention policies and performance optimization can get very complex. I'm working on a good example which goes into more detail and discusses performance concerns... more on that later...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-1559287689274720871?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/1559287689274720871/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2009/08/backups-for-file-systems-with-millions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/1559287689274720871'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/1559287689274720871'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2009/08/backups-for-file-systems-with-millions.html' title='Backups for file systems with millions of files'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_mEl5xoSoWPw/So8VHXvtyEI/AAAAAAAAAFY/2D4VOG8FqRE/s72-c/hi-level-ZFS-backups.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-4370723037831580968</id><published>2009-08-14T09:45:00.000-07:00</published><updated>2009-08-14T13:53:45.813-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zfs opensolaris solaris compression'/><title type='text'>Justifying new compression algorithms in ZFS?</title><content type='html'>Denis Ahrens recently &lt;a href="http://www.opensolaris.org/jive/thread.jspa?threadID=110321&amp;amp;tstart=0"&gt;posted a compression comparison of LZO and LZJB to the OpenSolaris ZFS forum&lt;/a&gt;. This is interesting work and there are plenty of opportunities for research and development of new and better ways of compressing data. But when does it make sense to actually implement a new compression scheme in ZFS?&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The first barrier is the religilous arguments surrounding licensing. I'd rather not begin to go down that rat hole. Suffice to say, if someone really wants to integrate, they will integrate.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The second barrier is patents. Algorithms can be patented, and in the US patents have real value ($). This is another rat hole, so let's assume that monies are exchanged and the lawyers are held at bay.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The third barrier is integration into the OS. Changes to a file system, especially a file system used for boot, take time to integrate with all of the other parts of the OS: installation, backup, upgrades, boot loaders, etc. This isn't especially hard, but it does take time and involves interacting with many different people.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now we can get down to the nitty-gritty engineering challenges.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Today, disks use a 512 byte sector size. This is the smallest size you can write to the disk. So compressing below 512 bytes gains nothing. Similarly, if the compression on a larger record does not reduce the overall size by 512 bytes, then it isn't worth compressing. Also, compression algorithms can increase the size of a record, depending on the data and algorithm. ZFS implements the policy that if compression does not reduce the record's size by more than 12.5% (1/8), then the record will be written uncompressed. This prevents inflation and provides a minimum limit for evaluating compression effectiveness. The smallest record size of interest is 8 blocks of 512 bytes, or 4 kBytes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ZFS compresses each record of a file rather than the whole file. If a file contains some compressible bits and some uncompressible bits, then the file can be compressed, depending on the distribution of compressible bits in the file. This seems like an odd thing to say, but it is needed to understand that the maximum record size is 128 kBytes. When evaluating a compression algorithm for ZFS, the record sizes to be tested should range from 4 kBytes to 128 kBytes. In &lt;a href="http://denisy.dyndns.org/lzo_vs_lzjb/"&gt;Denis' example&lt;/a&gt;, the test data is in the 200 MBytes to 801 MBytes range. Interesting, but it would be better to measure with the same policy that ZFS implements. Also, two of Denis' tests were on a tarball comprised of files. Again, this is interesting, but will not be representative of the compression of the untarred files, especially files smaller than 4 kBytes.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Now we can build a test profile that compares the effectiveness of compression for ZFS. The records should range from 4 kBytes to 128 kBytes. To do this easily with existing files, they could be split, compressed and the results compared for each split after applying ZFS' policies. The results should also be compared at the sector size, not the file length. To demonstrate, I'll use an example. I took the zfs(1m) man page and split it into 4 kByte files. Then I compressed it with compress(1) and gzip(1). For gzip, I used the -6 option, which is the default for ZFS when gzip compression is specified.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;table cols="7" width="100%" border="1" cellpadding="0" cellspacing="0"&gt; &lt;tbody&gt;&lt;tr&gt;  &lt;td&gt;&lt;br /&gt;  &lt;/td&gt;  &lt;td colspan="2"&gt;&lt;p align="CENTER"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;original&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td colspan="2"&gt;&lt;p align="CENTER"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;compress&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td colspan="2"&gt;&lt;p align="CENTER"&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;gzip -6&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td height="18"&gt;&lt;p align="CENTER"&gt;&lt;span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;file&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td&gt;&lt;p align="CENTER"&gt;&lt;span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;length&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td&gt;&lt;p align="CENTER"&gt;&lt;span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;sectors&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td&gt;&lt;p align="CENTER"&gt;&lt;span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;length&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td&gt;&lt;p align="CENTER"&gt;&lt;span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;sectors&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td&gt;&lt;p align="CENTER"&gt;&lt;span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;length&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td&gt;&lt;p align="CENTER"&gt;&lt;span&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="font-family:arial;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;sectors&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td height="18"&gt;&lt;p align="LEFT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;xaa&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4096" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4096&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="8" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1688" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1688&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="945" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;945&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="2" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td height="18"&gt;&lt;p align="LEFT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;xab&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4096" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4096&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="8" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="2198" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;2198&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="5" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1664" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1664&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td height="18"&gt;&lt;p align="LEFT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;xac&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4096" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4096&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="8" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="2217" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;2217&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="5" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1615" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1615&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td height="18"&gt;&lt;p align="LEFT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;xad&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4096" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4096&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="8" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="2081" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;2081&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="5" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1438" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1438&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="3" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td height="18"&gt;&lt;p align="LEFT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;xae&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4096" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4096&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="8" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="2161" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;2161&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="5" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1468" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1468&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="3" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td height="18"&gt;&lt;p align="LEFT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;xaf&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4096" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4096&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="8" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="2170" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;2170&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="5" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1544" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1544&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td height="18"&gt;&lt;p align="LEFT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;xag&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4096" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4096&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="8" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="2174" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;2174&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="5" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1386" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1386&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="3" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td height="18"&gt;&lt;p align="LEFT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;xah&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4096" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4096&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="8" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="2163" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;2163&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;td sdval="5" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1442" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1442&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="3" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td height="18"&gt;&lt;p align="LEFT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;xai&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4096" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4096&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="8" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="2154" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;2154&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="5" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1477" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1477&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="3" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td height="18"&gt;&lt;p align="LEFT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;xaj&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4096" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4096&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="8" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="2279" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;2279&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="5" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1747" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1747&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td height="18"&gt;&lt;p align="LEFT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;xak&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4096" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4096&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="8" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="2100" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;2100&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="5" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1299" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1299&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="3" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td height="18"&gt;&lt;p align="LEFT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;xal&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4096" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4096&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="8" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="2066" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;2066&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="5" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1335" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1335&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="3" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td height="18"&gt;&lt;p align="LEFT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;xam&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4096" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4096&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="8" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="2177" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;2177&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="5" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1481" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1481&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="3" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td height="18"&gt;&lt;p align="LEFT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;xan&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4096" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;096&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="8" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="2056" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;2056&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="5" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1326" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1326&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="3" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td height="18"&gt;&lt;p align="LEFT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;xao&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4096" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4096&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="8" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="2025" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;2025&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1206" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1206&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="3" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td height="18"&gt;&lt;p align="LEFT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;xap&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4096" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4096&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="8" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="2073" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;2073&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="5" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1388" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1388&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="3" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td height="18"&gt;&lt;p align="LEFT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;xaq&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4096" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4096&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="8" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1960" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1960&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1279" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1279&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="3" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td height="18"&gt;&lt;p align="LEFT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;xar&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4096" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4096&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="8" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1897" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1897&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1272" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1272&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="3" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td height="18"&gt;&lt;p align="LEFT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;xas&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4096" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4096&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="8" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1766" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1766&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1135" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1135&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="3" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td height="18"&gt;&lt;p align="LEFT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;xat&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4096" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4096&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="8" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="2221" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;2221&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="5" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;5&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1478" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1478&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="3" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td height="18"&gt;&lt;p align="LEFT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;xau&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="3721" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;3721&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="8" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1820" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1820&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="4" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;4&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="1056" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;1056&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="3" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;  &lt;td height="18"&gt;&lt;p align="LEFT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;zfs.1m&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="85641" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;85641&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="168" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;168&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="31464" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;31464&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="62" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;62&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="20582" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;20582&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt;  &lt;td sdval="41" sdnum="1033;"&gt;&lt;p align="RIGHT"&gt;&lt;span style="font-family:Arial, sans-serif;"&gt;&lt;span style="font-size:85%;"&gt;41&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It is clear that gzip -6 does a better job compressing for space on these text files. I won't measure the performance costs for this example, but in general gzip -6 uses more CPU resources than compress. The real improvements in space are not readily comparable, though. A bit of spreadsheet summing reveals:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;table frame="VOID" cellspacing="0" cols="4" rules="NONE" border="1"&gt;  &lt;colgroup&gt;&lt;col width="100"&gt;&lt;col width="100"&gt;&lt;col width="100"&gt;&lt;col width="100"&gt;&lt;/colgroup&gt;  &lt;tbody&gt;   &lt;tr&gt;    &lt;td width="100" height="18" align="CENTER"&gt;&lt;br /&gt;&lt;/td&gt;    &lt;td width="100" align="CENTER"&gt;&lt;b&gt;split files&lt;/b&gt;&lt;/td&gt;    &lt;td width="100" align="CENTER"&gt;&lt;b&gt;single file&lt;/b&gt;&lt;/td&gt;    &lt;td width="100" align="CENTER"&gt;&lt;b&gt;all files&lt;/b&gt;&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td height="18" align="CENTER"&gt;compress&lt;/td&gt;    &lt;td align="CENTER" sdval="0.589285714285714" sdnum="1033;0;0%"&gt;59%&lt;/td&gt;    &lt;td align="CENTER" sdval="0.369047619047619" sdnum="1033;0;0%"&gt;37%&lt;/td&gt;    &lt;td align="CENTER" sdval="0.479166666666667" sdnum="1033;0;0%"&gt;48%&lt;/td&gt;   &lt;/tr&gt;   &lt;tr&gt;    &lt;td height="18" align="CENTER"&gt;gzip -6&lt;/td&gt;    &lt;td align="CENTER" sdval="0.392857142857143" sdnum="1033;0;0%"&gt;39%&lt;/td&gt;    &lt;td align="CENTER" sdval="0.244047619047619" sdnum="1033;0;0%"&gt;24%&lt;/td&gt;    &lt;td align="CENTER" sdval="0.318452380952381" sdnum="1033;0;0%"&gt;32%&lt;/td&gt;   &lt;/tr&gt;  &lt;/tbody&gt; &lt;/table&gt;&lt;br /&gt;&lt;div&gt;This shows that the space savings from compression on a single, large file is much better than for smaller files. This also reiterates the issue with compression in general -- you can't accurately predict how well it will work in advance.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In conclusion, the work required to add a compressor to ZFS is largely dominated by non-technical issues. But proper evaluation of the technical issues is also needed to be sure that the engineering results can justify the time and expense to tackle the non-technical issues. This can be done by experiments prior to coding to the ZFS interfaces. Denis and others, are interested in improving ZFS which is very cool. I think you should also help improve ZFS, or at least use it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-4370723037831580968?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/4370723037831580968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2009/08/justifying-new-compression-algorithms.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/4370723037831580968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/4370723037831580968'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2009/08/justifying-new-compression-algorithms.html' title='Justifying new compression algorithms in ZFS?'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-1670633999969415061</id><published>2009-08-13T11:00:00.000-07:00</published><updated>2009-08-13T15:04:48.883-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='btrfs'/><category scheme='http://www.blogger.com/atom/ns#' term='sun'/><category scheme='http://www.blogger.com/atom/ns#' term='zfs'/><category scheme='http://www.blogger.com/atom/ns#' term='opensolaris'/><category scheme='http://www.blogger.com/atom/ns#' term='solaris'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Whither Btrfs?</title><content type='html'>&lt;div&gt;Is the best technology the pathway to success? Nope. In this post, I'll take a strategic look at the future of the &lt;a href="http://oss.oracle.com/projects/btrfs/"&gt;Btrfs&lt;/a&gt; file system.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Using B-trees (or modified B-trees) for space allocation has been the rage among file system designers in the past few years. Some of the more notable efforts are ZFS, Btrfs, Reiser4, and NILFS. The availability of open source operating systems, especially BSD and Linux, has enabled explorations of interesting new ways to manage storage and implement file systems. This is a good thing. But being technologically cool and successful does not foretell commercial success. For the purpose of evaluating file systems, I'll define commercially successful as having a large installed base for decades. The list of commercially successful file systems is fairly small: FAT, NTFS, HFS+, UFS, and ext2/3 are perhaps the most commercially successful general-purpose file systems today. The key to commercial success is to provide good value and have a good delivery channel.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Btrfs was &lt;a href="http://lkml.org/lkml/2007/6/12/242"&gt;announced&lt;/a&gt; by Oracle in June 2007 and is being integrated into the Linux kernel. It offers some of the more interesting features of other file systems built on B-tree notions: snapshots, efficient backups, copy-on-write, multiple file systems in a single logical volume (called subvolumes), dynamic inode allocation, multiple device support, internal mirroring, etc. These are all cool features and represent a viable technology direction. But technological feats often run into barriers to adoption which prevent them from becoming commercially successful.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The most important barrier to adoption is the delivery channel. Clearly, Microsoft dominates the industry as it carefully controls the deliver channel of software onto approximately 90% of the computer systems volume. Microsoft owns (is the proprietor of) NTFS and FAT which dominate the market. The next major vendor by volume is Apple, who owns HFS+ that is used as the default file system for OSX. The largest Linux channels, Red Hat and SuSE, use ext2/3 and seem to be planning to use ext4 in the future. Changing the default file system for a popular OS is a very expensive, time-consuming, and disruptive event, which is why OS vendors will spend a lot of time and money to fix and incrementally improve the default file system when possible. The life cycle for a default file system is measured in decades. The development of a new file system takes time, too -- on the order of 5-6 years seems to be typical as measured by having enough stable new features that the value of migration is greater than the inertia of the legacy. The barrier here is time to maturity and time to become the default in the channel. Introduced in 2007, we can expect to see Btrfs be mature in the 2012 timeframe. But what about the prospects of becoming the default in the channel?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Oracle has been trying to reduce their costs by eliminating the OS vendor for many years. Until recently, their efforts were to completely eliminate the OS vendor (raw iron) or to take away Linux from Red Hat (so-called Oracle Enterprise Linux, aka Larry Linux). Neither has been very successful. But Oracle's acquisition of Sun Microsystems changes the industry structure in many ways. Now, Oracle will have an entire solution stack: software, hardware, and services. The solution stack represents a channel for Oracle to deliver innovations, such as a spiffy new file system. Herein lies the problem for Btrfs: Oracle will now own ZFS. This means:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Btrfs is not mature enough to become the default file system for OEL. ZFS is more than 5 years old and stable enough to become the default file system for Solaris 10 and OpenSolaris. &lt;/li&gt;&lt;li&gt;It makes little sense for Oracle to continue funding two, competing file system projects -- one trying to match features with the other. ZFS has approximately 45 associated patents, and patents have real value ($) in the US.&lt;/li&gt;&lt;li&gt;Tossing Btrfs to the open-source winds is not likely to improve its schedule or channel prospects. &lt;/li&gt;&lt;/ul&gt;There are a couple of scenarios that could still play out -- Oracle could break the GPLv2 barrier that prevents Linux from accepting ZFS in the kernel or Oracle could take a more competitive stance against Red Hat and Novell by leveraging [Open]Solaris. Either way I don't see a good business case for Oracle to continue to invest in Btrfs. What do you think?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-1670633999969415061?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/1670633999969415061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2009/08/whither-btrfs.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/1670633999969415061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/1670633999969415061'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2009/08/whither-btrfs.html' title='Whither Btrfs?'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-5024811110611564435</id><published>2009-08-03T21:05:00.000-07:00</published><updated>2009-08-03T21:15:04.084-07:00</updated><title type='text'>Purple Rain</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_mEl5xoSoWPw/Sne1rc8lxEI/AAAAAAAAAFQ/IWxTgv4FsgA/s1600-h/Ramona-purple-rain2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 189px;" src="http://4.bp.blogspot.com/_mEl5xoSoWPw/Sne1rc8lxEI/AAAAAAAAAFQ/IWxTgv4FsgA/s320/Ramona-purple-rain2.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5365957239144563778" /&gt;&lt;/a&gt;&lt;br /&gt;We were eating dinner this evening out on the deck (hot wings, one of my favorites) when nature created a beautiful sight, purple rain.  Some tropical moisture flowed into the San Diego area today and made some beautiful clouds. A few dropped out some rain, though most of it was virga. As the Sun was setting, the colors were just right for a few moments and I was able to snap a picture of the purple rain over Ramona.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-5024811110611564435?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/5024811110611564435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2009/08/purple-rain.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/5024811110611564435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/5024811110611564435'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2009/08/purple-rain.html' title='Purple Rain'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_mEl5xoSoWPw/Sne1rc8lxEI/AAAAAAAAAFQ/IWxTgv4FsgA/s72-c/Ramona-purple-rain2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-8318631474436016692</id><published>2009-07-07T15:58:00.000-07:00</published><updated>2009-07-07T16:07:11.376-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zfs zil'/><title type='text'>new zilstat beta testers wanted</title><content type='html'>I've made a change to zilstat which will show how much data is written to the ZIL between txg commits.  The old behaviour of time-based reporting is still available.&lt;br /&gt;&lt;br /&gt;The way I implemented this was to allow you to specify "txg" as an interval instead of a numerical interval in seconds. However, since there may be multiple pools, zilstat will also require that you specify a pool when you want to look at the txg intervals. I don't know of an easy way to make the output intuitively obvious with multiple pools, but you can run multiple concurrent zilstats to look at multiple pools.&lt;br /&gt;&lt;br /&gt;The output looks something like this&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;span style="font-size:85%;"&gt;zilstat.ksh -tp stuff txg 10&lt;br /&gt;waiting for txg commit...&lt;br /&gt;TIME                        txg    N-Bytes  N-Bytes/s N-Max-Rate    B-Bytes  B-Bytes/s B-Max-Rate    ops  &lt;=4kB 4-32kB &gt;=32kB&lt;br /&gt;2009 Jul  7 15:51:35    3812765          0          0          0          0          0          0      0      0      0      0&lt;br /&gt;2009 Jul  7 15:52:05    3812766      10216        340      10216     151552       5051     151552      2      0      1      1&lt;br /&gt;2009 Jul  7 15:52:35    3812767     109576       3652     109576     524288      17476     524288      4      0      0      4&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: arial;"&gt;&lt;span style="font-family: verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;I'm looking for a few beta testers with interesting sync workloads who want to try it out before I post it.  If you are interested, post a comment or drop me an e-mail at &lt;a href="mailto:Richard.Elling@RichardElling.com"&gt;Richard.Elling@RichardElling.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-8318631474436016692?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/8318631474436016692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2009/07/new-zilstat-beta-testers-wanted.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/8318631474436016692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/8318631474436016692'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2009/07/new-zilstat-beta-testers-wanted.html' title='new zilstat beta testers wanted'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-4040200474633699579</id><published>2009-04-22T10:07:00.000-07:00</published><updated>2009-04-22T10:30:04.462-07:00</updated><title type='text'>Oracle Appliances</title><content type='html'>Earlier today there was a conversation on the &lt;a href="http://www.linkedin.com/groups?gid=61513"&gt;Cloud Computing group&lt;/a&gt; where Christopher Steel wrote, "&lt;span style="font-style: italic;"&gt;I also [see] a play for Oracle to get into the Database appliance space. With the Sun acquisition, they now have the hardware, OS, and support pieces to delivery out-of-the-box &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;enterprise Database solution.&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;I got a tickle out of this because back in 2002, I was Chief Architect for Sun's Enterprise Engineering group where we designed appliances. &lt;a href="http://www.linkedin.com/profile?viewProfile=&amp;amp;key=1751990"&gt;Ted Persky&lt;/a&gt; and I published a &lt;a href="http://www.sun.com/blueprints"&gt;Sun BluePrint Online&lt;/a&gt; article &lt;a href="http://www.sun.com/blueprints/0302/suntone.pdf"&gt;describing our Oracle - Veritas - Sun (VOS) designed appliance for running Oracle RAC&lt;/a&gt;. Technically, this was a challenge because none of the major products used (Solaris, VxVM, Oracle RAC, and required patches) were suited for installation in a factory. So we had to make the glue to put them together for a factory process. Anyone who has ever done this by hand will understand the difficulty of the task, and would have appreciated seeing how well the system worked out of the box -- you could go from out-of-the-box to fully operational RAC cluster in about 30 minutes!&lt;br /&gt;&lt;br /&gt;Introducing such a product in 2002 was challenging enough for an appliance built with major components from multiple companies. But the biggest barrier to market acceptance was that nothing was happening in 2002. Nothing. Nada. Nil. Nichts. The dot-com boom had busted and nobody was buying anything.  The product never went anywhere and was ultimately shelved.&lt;br /&gt;&lt;br /&gt;So what is different today? Oracle is buying Sun and getting into the hardware business. Veritas was bought by Semantic and technologies like &lt;a href="http://www.opensolaris.org/os/community/zfs/"&gt;ZFS&lt;/a&gt;, ASM, and QFS are putting the squeeze on VxVM. The recession means that nothing is happening again.  What can I say, but it is just the circle of life...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-4040200474633699579?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/4040200474633699579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2009/04/oracle-appliances.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/4040200474633699579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/4040200474633699579'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2009/04/oracle-appliances.html' title='Oracle Appliances'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-6347823300285914780</id><published>2009-04-19T16:28:00.000-07:00</published><updated>2009-04-19T16:33:07.148-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zfs'/><category scheme='http://www.blogger.com/atom/ns#' term='usenix'/><category scheme='http://www.blogger.com/atom/ns#' term='zil'/><title type='text'>ZFS Tutorial at the USENIX Technical Conference</title><content type='html'>&lt;span class="Apple-style-span"   style="border-collapse: collapse;   -webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family:Arial;font-size:12px;"&gt;&lt;div&gt;&lt;span style="font-size:100%;"&gt;I will be conducting a tutorial on &lt;a href="http://en.wikipedia.org/wiki/Zfs" target="_blank" rel="nofollow" style="color: rgb(0, 102, 204); outline-style: none; outline-width: initial; outline-color: initial; "&gt;ZFS&lt;/a&gt; at the &lt;a href="http://www.usenix.org/events/usenix09" rel="nofollow" style="color: rgb(0, 102, 204); outline-style: none; outline-width: initial; outline-color: initial; "&gt;USENIX Technical Conference in San Diego on June 14, 2009&lt;/a&gt;. I hope you can attend!  Here is the blurb in the conference agenda.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;&lt;a name="s2" style="color: rgb(0, 102, 204); outline-style: none; outline-width: initial; outline-color: initial; "&gt;&lt;span&gt;S2&lt;/span&gt;&lt;/a&gt; &lt;b&gt;ZFS: A File System for Modern Hardware &lt;span&gt;NEW!&lt;/span&gt; &lt;/b&gt;  &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Who should attend:&lt;/b&gt; Systems engineers, integrators, and administrators who are interested in deploying ZFS on Solaris, Mac OS X, or FreeBSD. Participants should be familiar with storage devices, RAID systems, logical volume managers, backup, and file system features. Special emphasis will be placed on integration considerations for virtualization, NAS, and databases.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;File systems developed in the mid 20th century were severely constrained by the storage hardware available at the time. ZFS was conceived with an eye toward the hardware of the future and how storage would evolve. This perspective on the future presented an opportunity to rethink how file systems use storage hardware. The result of this endeavor is a new way of managing data which can evolve as the hardware changes, while remaining compatible with earlier notions of file system use. Along the way, new concepts such as the &lt;a href="http://download.intel.com/design/flash/nand/SolarisZFS_SolutionBrief.pdf" rel="nofollow" style="color: rgb(0, 102, 204); outline-style: none; outline-width: initial; outline-color: initial; "&gt;Hybrid Storage Pool&lt;/a&gt; provide new opportunities for optimization, efficiency, and data protection. In this tutorial, ZFS will be examined from the bottom up, to build a solid understanding of the data-hardware interface, and then from the top down, to provide insight into the best ways to use ZFS for applications.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Take back to work:&lt;/b&gt; A solid understanding of the concepts behind ZFS and how to make the best decisions when implementing storage at your site.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;&lt;b&gt;Topics include:&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;ul style="margin-right: 10px; "&gt;&lt;li style="padding-top: 1px; padding-right: 0px; padding-bottom: 1px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;Evolution of hardware and file systems&lt;/span&gt;&lt;/li&gt;&lt;li style="padding-top: 1px; padding-right: 0px; padding-bottom: 1px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;Storage pools&lt;/span&gt;&lt;/li&gt;&lt;ul style="margin-right: 10px; "&gt;&lt;li style="padding-top: 1px; padding-right: 0px; padding-bottom: 1px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;RAID data protection&lt;/span&gt;&lt;/li&gt;&lt;li style="padding-top: 1px; padding-right: 0px; padding-bottom: 1px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;Import/export and shared storage&lt;/span&gt;&lt;/li&gt;&lt;li style="padding-top: 1px; padding-right: 0px; padding-bottom: 1px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;Pool parameters and features&lt;/span&gt;&lt;/li&gt;&lt;li style="padding-top: 1px; padding-right: 0px; padding-bottom: 1px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;On-disk format&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li style="padding-top: 1px; padding-right: 0px; padding-bottom: 1px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;Data sets&lt;/span&gt;&lt;/li&gt;&lt;ul style="margin-right: 10px; "&gt;&lt;li style="padding-top: 1px; padding-right: 0px; padding-bottom: 1px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;Volumes&lt;/span&gt;&lt;/li&gt;&lt;li style="padding-top: 1px; padding-right: 0px; padding-bottom: 1px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;POSIX-compliant file systems&lt;/span&gt;&lt;/li&gt;&lt;li style="padding-top: 1px; padding-right: 0px; padding-bottom: 1px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;Snapshots&lt;/span&gt;&lt;/li&gt;&lt;li style="padding-top: 1px; padding-right: 0px; padding-bottom: 1px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;Replication&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li style="padding-top: 1px; padding-right: 0px; padding-bottom: 1px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;Practical considerations and best practices&lt;/span&gt;&lt;/li&gt;&lt;ul style="margin-right: 10px; "&gt;&lt;li style="padding-top: 1px; padding-right: 0px; padding-bottom: 1px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;Deployment and migration&lt;/span&gt;&lt;/li&gt;&lt;li style="padding-top: 1px; padding-right: 0px; padding-bottom: 1px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;Virtualization&lt;/span&gt;&lt;/li&gt;&lt;li style="padding-top: 1px; padding-right: 0px; padding-bottom: 1px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;Sharing&lt;/span&gt;&lt;/li&gt;&lt;li style="padding-top: 1px; padding-right: 0px; padding-bottom: 1px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;Performance, observability, and tuning&lt;/span&gt;&lt;/li&gt;&lt;li style="padding-top: 1px; padding-right: 0px; padding-bottom: 1px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;Data protection&lt;/span&gt;&lt;/li&gt;&lt;li style="padding-top: 1px; padding-right: 0px; padding-bottom: 1px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;Hybrid storage pools&lt;/span&gt;&lt;/li&gt;&lt;li style="padding-top: 1px; padding-right: 0px; padding-bottom: 1px; padding-left: 0px; "&gt;&lt;span style="font-size:100%;"&gt;Backup, restore, and archiving&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-6347823300285914780?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/6347823300285914780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2009/04/zfs-tutorial-at-usenix-technical.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/6347823300285914780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/6347823300285914780'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2009/04/zfs-tutorial-at-usenix-technical.html' title='ZFS Tutorial at the USENIX Technical Conference'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-2290064001159442994</id><published>2009-03-25T17:22:00.000-07:00</published><updated>2009-03-25T17:27:35.771-07:00</updated><title type='text'>Its a boy!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_mEl5xoSoWPw/ScrLH8lh3NI/AAAAAAAAAEU/mwGjsV5es04/s1600-h/Henrietta-calf2.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 224px; height: 320px;" src="http://1.bp.blogspot.com/_mEl5xoSoWPw/ScrLH8lh3NI/AAAAAAAAAEU/mwGjsV5es04/s320/Henrietta-calf2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5317285647447350482" /&gt;&lt;/a&gt;&lt;br /&gt;Henrietta gave birth to a shiny new baby boy early this morning. He just missed sharing a birthday with me by a few hours. He looks a lot like his daddy, Lucky, who is a purebred Hereford. We're so proud.  Mommy and baby are doing fine.&lt;br /&gt;&lt;br /&gt;We're expecting a few more brothers or sisters to arrive soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-2290064001159442994?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/2290064001159442994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2009/03/its-boy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/2290064001159442994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/2290064001159442994'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2009/03/its-boy.html' title='Its a boy!'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_mEl5xoSoWPw/ScrLH8lh3NI/AAAAAAAAAEU/mwGjsV5es04/s72-c/Henrietta-calf2.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-6740580633718080125</id><published>2009-02-21T21:51:00.000-08:00</published><updated>2009-02-21T22:12:03.409-08:00</updated><title type='text'>Tour goes to Palomar</title><content type='html'>This year the &lt;a href="http://www.amgentourofcalifornia.com/homepage.html"&gt;AMGEN Tour of California&lt;/a&gt; is (finally) coming to San Diego County to &lt;a href="http://www.amgentourofcalifornia.com/Route/stages/stage8.html"&gt;climb Palomar Mountain&lt;/a&gt;. Palomar Mountain is not too far from the Ranch, and the &lt;a href="http://www.palomarmountain.com/pmvfd/"&gt;Palomar Volunteer Fire Department&lt;/a&gt; has put out the call for volunteers to help the department with whatever might happen as thousands of race fans converge on the mountain. The &lt;a href="http://www.roars.net"&gt;Ramona Outback Amateur Radio Society&lt;/a&gt; and &lt;a href="http://www.ramona-cert.org"&gt;Ramona-CERT&lt;/a&gt; is providing volunteers to help with communications for the department. I've spent quite a few hours recently with the fine folks on Palomar Mountain helping to coordinate communications for the event.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Today, we held a pre-race communications exercise as part of the 2009 &lt;a href="http://www.sdcounty.ca.gov/oes/community/oes_jl_CERT.html"&gt;San Diego County CERT&lt;/a&gt; Spring Exercise. Dozens of hams and CERT folks surveyed and characterized communications capabilities on the mountain. What is surprising to many people who don't regularly travel to the back country is that cell phone service is likely to be non-existent. And if you have a need for emergency response, you are likely to be an hour, not minutes, from the nearest hospital. There are many dangerous areas, such as high cliffs, sharp curves, and places where you could have an accident and not be found for some time. By providing extra eyes and ears on the mountain while thousands of fans arrive to witness the Tour of California, we're hoping for an accident-free event.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you happen to be in the crowd coming to the mountain, prepare to arrive early. There are only two roads which are practical for getting to the top and the highway patrol is planning to monitor them closely. Fortunately, the Palomar Mountain Volunteer Fire Department is also sponsoring a bar-b-que, so be sure to stop by and visit.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I look forward to seeing everyone who climbs the mountain, even those arriving in cars.  Stop by and visit for a while. And who knows, you might see yourself on &lt;a href="http://www.versus.com"&gt;Versus&lt;/a&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-6740580633718080125?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/6740580633718080125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2009/02/tour-goes-to-palomar.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/6740580633718080125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/6740580633718080125'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2009/02/tour-goes-to-palomar.html' title='Tour goes to Palomar'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-9153966540696057335</id><published>2009-02-07T21:02:00.000-08:00</published><updated>2009-02-07T22:18:12.275-08:00</updated><title type='text'>zilstat improved</title><content type='html'>&lt;span style="font-family:arial;"&gt;I've improved upon the first release of &lt;a href="http://www.goldensrule.com/zilstat-intro"&gt;zilstat&lt;/a&gt; by adding a few columns to show the distribution of operations by size. To understand why this might be important for your situation, I refer to the source &lt;a href="http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/fs/zfs/zfs_log.c#486"&gt;code comments&lt;/a&gt;&lt;/span&gt; for&lt;span style="font-family:arial;"&gt;&lt;i&gt; zfs_immediate_write_sz&lt;/i&gt;&lt;/span&gt;&lt;span style="font-family:arial;"&gt; (link good until the source changes :-)&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;a name="486"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;486         /*&lt;/span&gt;&lt;br /&gt;&lt;a name="487"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;487          * Writes are handled in three different ways:&lt;/span&gt;&lt;br /&gt;&lt;a name="488"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;488          *&lt;/span&gt;&lt;br /&gt;&lt;a name="489"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;489          * WR_INDIRECT:&lt;/span&gt;&lt;br /&gt;&lt;a name="490"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;490          *    In this mode, if we need to commit the write later, then the block&lt;/span&gt;&lt;br /&gt;&lt;a name="491"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;491          *    is immediately written into the file system (using dmu_sync),&lt;/span&gt;&lt;br /&gt;&lt;a name="492"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;492          *    and a pointer to the block is put into the log record.&lt;/span&gt;&lt;br /&gt;&lt;a name="493"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;493          *    When the txg commits the block is linked in.&lt;/span&gt;&lt;br /&gt;&lt;a name="494"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;494          *    This saves additionally writing the data into the log record.&lt;/span&gt;&lt;br /&gt;&lt;a name="495"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;495          *    There are a few requirements for this to occur:&lt;/span&gt;&lt;br /&gt;&lt;a name="496"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;496          *      - write is greater than zfs_immediate_write_sz&lt;/span&gt;&lt;br /&gt;&lt;a name="497"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;497          *      - not using slogs (as slogs are assumed to always be faster&lt;/span&gt;&lt;br /&gt;&lt;a name="498"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;498          *        than writing into the main pool)&lt;/span&gt;&lt;br /&gt;&lt;a name="499"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;499          *      - the write occupies only one block&lt;/span&gt;&lt;br /&gt;&lt;a name="500"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;500          * WR_COPIED:&lt;/span&gt;&lt;br /&gt;&lt;a name="501"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;501          *    If we know we'll immediately be committing the&lt;/span&gt;&lt;br /&gt;&lt;a name="502"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;502          *    transaction (FSYNC or FDSYNC), the we allocate a larger&lt;/span&gt;&lt;br /&gt;&lt;a name="503"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;503          *    log record here for the data and copy the data in.&lt;/span&gt;&lt;br /&gt;&lt;a name="504"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;504          * WR_NEED_COPY:&lt;/span&gt;&lt;br /&gt;&lt;a name="505"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;505          *    Otherwise we don't allocate a buffer, and *if* we need to&lt;/span&gt;&lt;br /&gt;&lt;a name="506"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;506          *    flush the write later then a buffer is allocated and&lt;/span&gt;&lt;br /&gt;&lt;a name="507"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;507          *    we retrieve the data using the dmu.&lt;/span&gt;&lt;br /&gt;&lt;a name="508"&gt;&lt;/a&gt;    &lt;span style="font-family:courier new;"&gt;508          */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;&lt;a href="http://www.goldensrule.com/zilstat-intro"&gt;zilstat&lt;/a&gt; can see the size of the write and compare it to &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;i&gt;zfs_immediate_write_sz&lt;/i&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;, but it is not so easy to implement the rest of the logic. To get past this difficulty, lets return to the original reason for writing zilstat in the first place: answer the question, “how much ZIL write activity is generated by my workload and will a separate log help?”&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;To get there from here, we could take a look at the size distribution of the ZIL writes. I've implemented this in an updated version of &lt;a href="http://www.goldensrule.com/zilstat-intro"&gt;zilstat&lt;/a&gt; as follows:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;pre&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;Itty-bitty writes, those less than 4 kBytes. These might suggest a workload which is updating a lot of small files synchronously or perhaps a lot of metadata writes (though not all metadata writes may fit in small spaces).&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt; &lt;/li&gt;&lt;li&gt;&lt;pre&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;Medium-sized writes, 4-32 kBytes. It might be more difficult to pin these down, so they get a bin.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt; &lt;/li&gt;&lt;li&gt;&lt;pre&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;Larger writes, &amp;gt; 32 kBytes. If you do not have a separate log, then these will be written to the pool and not the ZIL.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: left;"&gt;&lt;pre&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;Using these bins will allow better observability into the work to moved around by adding a separate log. Here is what a sample output looks like:&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;table width="100%" border="1" cellpadding="4" cellspacing="3"&gt;&lt;br /&gt;&lt;col width="256*"&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;br /&gt;&lt;td valign="TOP" width="100%"&gt;   &lt;p style="margin-bottom: 0in;"&gt;&lt;span style="font-family:Courier New,monospace;"&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;# &lt;/b&gt;./zilstat.ksh -t 60&lt;br /&gt; TIME                    N-Bytes  N-Bytes/s N-Max-Rate    B-Bytes  B-Bytes/s B-Max-Rate    ops  &lt;=4kB 4-32kB &gt;=32kB&lt;br /&gt;2009 Feb  6 14:25:22          0          0          0          0          0          0      0      0      0      0&lt;br /&gt;2009 Feb  6 14:26:22     287368       4789     283064     618496      10308     524288      7      0      2      5&lt;br /&gt;2009 Feb  6 14:27:22      10304        171      10304      94208       1570      94208      2      0      0      2&lt;br /&gt;2009 Feb  6 14:28:22     223120       3718     213152     618496      10308     544768      7      0      2      5&lt;br /&gt;2009 Feb  6 14:29:22          0          0          0          0          0          0      0      0      0      0&lt;br /&gt;2009 Feb  6 14:30:22       3336         55       1264      28672        477      12288      7      7      0      0&lt;br /&gt;2009 Feb  6 14:31:22          0          0          0          0          0          0      0      0      0      0&lt;br /&gt;2009 Feb  6 14:32:22     149768       2496     145480     294912       4915     282624      8      1      2      5&lt;br /&gt;2009 Feb  6 14:33:22        248          4        248       4096         68       4096      1      1      0      0&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="font-size:100%;"&gt;For this workload, it looks like large synchronous writes are more common than small ones and these will go directly to the pool, since I do not have a separate log on any of my pools. I really can't draw many conclusions from this sample, because the rate is quite low. More experiments with busier workloads may reveal some best practices guidelines. Let me know what you discover.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-9153966540696057335?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/9153966540696057335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2009/02/zilstat-improved.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/9153966540696057335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/9153966540696057335'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2009/02/zilstat-improved.html' title='zilstat improved'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-6521382536849190241</id><published>2009-01-30T09:33:00.000-08:00</published><updated>2009-01-30T13:06:45.280-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zfs zil'/><title type='text'>zilstat</title><content type='html'>&lt;span style="font-family:Arial, sans-serif;font-size:85%;"&gt;A few weeks ago I had a workload which I suspected had a fair amount of synchronous writes on a ZFS file system. The general recommendation for this case is to use a separate ZIL log, preferably on a device which has a nonvolatile write cache or a write-optimized SSD. However, once you add a separate log to a pool, you cannot easily remove it. So before you make that move, it is a better idea to look at your workload and answer the question, "how much ZIL write activity is generated by my workload?"&lt;br /&gt;&lt;br /&gt;The result of this pondering is a script I call &lt;a href="http://www.goldensrule.com/zilstat-intro"&gt;zilstat&lt;/a&gt;. You can get it &lt;a href="http://www.goldensrule.com/zilstat-intro"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-6521382536849190241?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/6521382536849190241/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2009/01/zilstat.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/6521382536849190241'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/6521382536849190241'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2009/01/zilstat.html' title='zilstat'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-7242544120355814201</id><published>2009-01-25T18:49:00.000-08:00</published><updated>2009-01-25T21:21:41.714-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zfs cmt niagara'/><title type='text'>Parallel ZFS send/receive</title><content type='html'>&lt;span style="font-family: lucida grande;"&gt;I've been doing some work recently centered around how to backup a continuously updated directory structure. The workload generates large numbers of files and directories over time. UFS would have no chance of handling this workload, but ZFS seems to handle it quite well. The current data shows that we can use ZFS send/receive to backup this data efficiently, even when large workloads are present. There are some tricks needed, though.&lt;br /&gt;&lt;br /&gt;But first, a quick review of ZFS file systems. ZFS is designed with a different philosophy than many other file systems. In ZFS, physical devices are assigned to a storage pool. File systems (plural) are created in the pool. In traditional file system design, there is a 1:1 relationship between the file system and a physical device or physical device look-alike (which is how RAID systems are traditionally implemented). In all modern file systems, directories (sometimes called folders) are used to manage collections of files. In ZFS, file systems work similarly. In some of the early ZFS documents, you might notice words to the effect of "in ZFS file systems are as easy to manage as directories." To a large extent, this is true: it is as easy to create a ZFS file system as it is to create a directory and for the vast majority of applications, there is no perceptible difference between a heirarchy of ZFS file systems or directories.&lt;br /&gt;&lt;br /&gt;However easy it is to create ZFS file systems, they do increase the complexity of systems administration. Many tools for managing files and backups treat the file system boundary differently than directories. To help systems administrators maintain sanity, I recommend using file systems when you need to implement a different policy. For example, you may wish to make a file system read-only instead of read-write. The most common policy seems to be quotas and ZFS today implements quotas only on file systems. A complete list of the possible policies you might consider is available by looking at the parameters you can set on a file system:&lt;br /&gt;&lt;br /&gt;        &lt;span style="font-family: courier new;"&gt;# zfs get all my/file/system&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The results of my testing on ZFS replication using send/receive adds another reason to use file systems: sends can be done in parallel. This has subtle, but important implications. In my test workload, new files and directories are constantly being created. I used the ZFS auto-snapshot feature to make regularly scheduled snapshots. I then experimented with rsync and zfs send/receive to copy the data to a backup pool. I found:&lt;br /&gt;&lt;/span&gt;&lt;ul style="font-family: lucida grande;"&gt;&lt;li&gt;Both rsync and ZFS send/receive can make incremental backups&lt;/li&gt;&lt;li&gt;Both rsync and ZFS send/receive are I/O bound in performance. rsync also has the ability to manage its bandwidth, which ZFS send does not, yet (this can be managed by an entity placed in the pipeline, though). However, in this workload, the backup was iops bound, not bandwidth bound, so rsync throttling would probably not work well.&lt;/li&gt;&lt;li&gt;Both rsync and ZFS send/receive work on a per-filesystem basis. This is an option for rsync, but an inherent constraint for ZFS.  Sends can be recursive, with the -R option, though that will also replicate the file system parameters -- more on that later.&lt;/li&gt;&lt;li&gt;rsync will traverse the directory structure and stat(2) every file. For my workload, this would get slower and slower over time because there would be millions of more files added over time. The performance of these stats will be impacted worse by iop-bound workloads, such as mine. Note: DNLC size is important for my workload and &lt;a href="http://docs.sun.com/app/docs/doc/817-0404/chapter2-35?a=view"&gt;requires tuning&lt;/a&gt;.&lt;span style="font-family: lucida grande;"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: lucida grande;"&gt;ZFS send/receive can send differences in the file system dataset, which doesn't really care about&lt;/span&gt; files or directories.&lt;/li&gt;&lt;li&gt;ARC size can impact backup performance. The ongoing workload is iop-bound with many application reads and writes occurring continuously while the backup is being made. Recent writes will likely still be in the ARC, as long as the ARC is large enough. For my system, careful monitoring of the ARC size confirmed that I could devote a substantially large amount of RAM for the ARC while meeting application requirements. No L2ARC was used, mostly because operations constraints limited me to using Solaris 10 10/08, which does not have the L2ARC feature. Backups using ZFS send/receive should be even more efficient with a reasonably large L2ARC -- 100+ GBytes.&lt;/li&gt;&lt;li&gt;Over time, I believe rsync will get totally bogged down traversing the directory structure and stat'ing files whereas ZFS send/receive will take nominally the same time -- based on the amount of changes during the time interval.&lt;/li&gt;&lt;li&gt;If something goes amiss, and for some reason the backups are not completed for a long period of time, then it will take a long time to catch up, for either choice. For this workload, the data tends to be added and removed, not reused. For a reuse case, such as you might find with a database, more work will have to be&lt;span style="font-family: lucida grande;"&gt; done to fully understand the implications of incremental, real-time replication.&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-family: lucida grande;"&gt;The big trick to get this to work well is the parallelism obtained by backing up multiple file systems in parallel. The bottleneck for the parallel replication is the iops load which will increase for rsync over time, while remain more-or-less constant for ZFS send/receive. Having an iops-bounded workload means that latency is more important than bandwidth, and while one of the parallel sends is waiting, another can be working. In a sense, this is very similar to the way that chip multithreading (CMT) works, but ZFS is waiting on disks, not memory.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: lucida grande;"&gt;There is a lot more work to be done here, but I feel this is a pretty positive start. It may take months or years to really get my workload to a state where the steady state is such that it can be fully characterized. I look forward to seeing how it goes.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-7242544120355814201?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/7242544120355814201/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2009/01/parallel-zfs-sendreceive.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/7242544120355814201'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/7242544120355814201'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2009/01/parallel-zfs-sendreceive.html' title='Parallel ZFS send/receive'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-8270327689745164833</id><published>2009-01-25T18:18:00.000-08:00</published><updated>2009-01-25T18:38:33.270-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reliability'/><title type='text'>Its a conspiracy...</title><content type='html'>The other day &lt;a href="http://richardelling.blogspot.com/2009/01/pop-what-was-that.html"&gt;I blogged about some blown capacitors on my graphics card&lt;/a&gt;. Well, around the same time, my wife noticed a strange burning smell near her computer. Sure enough, it smelled like burned electronics. Since there is a bunch of electronics near her desk and everything seemed to be working ok, it took a while to track down the source of the smell. &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_mEl5xoSoWPw/SX0fBUm-jRI/AAAAAAAAAAc/6OR-6dDtJ8s/s1600-h/blown-fan.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 159px;" src="http://3.bp.blogspot.com/_mEl5xoSoWPw/SX0fBUm-jRI/AAAAAAAAAAc/6OR-6dDtJ8s/s320/blown-fan.jpg" alt="" id="BLOGGER_PHOTO_ID_5295422844430093586" border="0" /&gt;&lt;/a&gt;Argv!  Another blown graphics card. This time the fan motor blew and sent the fan tumbling around inside the case. The card seemed to keep working ok, though it is not clear how long that would have been the case.  Fortunately, she doesn't stress the 3-D graphics too much, except for the occasional screen blanker.&lt;br /&gt;But now I think there is a conspiracy... how could two different graphics cards from different vendors, in different computers, connected to different power conditioners, both fail at around the same time -- and yet keep working for a while?  It must've been related to those strange lights and humming noise we saw moving rapidly over the hilltops... no, those were F/A-18s from Miramar... time to call the ghostbusters...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-8270327689745164833?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/8270327689745164833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2009/01/its-conspiracy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/8270327689745164833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/8270327689745164833'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2009/01/its-conspiracy.html' title='Its a conspiracy...'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_mEl5xoSoWPw/SX0fBUm-jRI/AAAAAAAAAAc/6OR-6dDtJ8s/s72-c/blown-fan.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-1468373227012282460</id><published>2009-01-23T10:46:00.000-08:00</published><updated>2009-01-23T10:59:33.535-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reliability'/><title type='text'>POP!  What was that???</title><content type='html'>I was sitting in my office yesterday afternoon, with Rosie, our Australian Shepherd, asleep at my feet, when I heard a loud POP!  It sounded like a fire cracker.  Rosie didn't budge, which is no longer surprising as she has been losing her hearing lately. I looked around to see if I could find something amiss. Nothing. No smoke. No funny smells. No new holes in the window. Nothing. So I went about my work as usual.&lt;br /&gt;Today, when I went into the office and sat down to read the morning's e-mail, my monitors were all goofed up. Argv! This looks like what I would expect from failed hardware: gobbledegook on the screen. So I pulled the video card and the problem is self-evident.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_mEl5xoSoWPw/SXoSik6_N3I/AAAAAAAAAAU/3kVUCCK82lg/s1600-h/blown-caps.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_mEl5xoSoWPw/SXoSik6_N3I/AAAAAAAAAAU/3kVUCCK82lg/s320/blown-caps.jpg" alt="" id="BLOGGER_PHOTO_ID_5294564697163380594" border="0" /&gt;&lt;/a&gt;The tops of three capacitors were blown off! I'm not really surprised the capacitors blew -- that happens on these cheap devices. What surprised me is that I worked well into the evening yesterday with no problems. I presume that when I retired for the evening and the screenblank kicked in, that was the end of proper functioning. Fortunately, I also have plenty of spares hanging around... always be prepared for failures.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-1468373227012282460?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.richardelling.com/feeds/1468373227012282460/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.richardelling.com/2009/01/pop-what-was-that.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/1468373227012282460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/1468373227012282460'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2009/01/pop-what-was-that.html' title='POP!  What was that???'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_mEl5xoSoWPw/SXoSik6_N3I/AAAAAAAAAAU/3kVUCCK82lg/s72-c/blown-caps.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1111328281312116171.post-2120563860943553261</id><published>2009-01-23T10:43:00.000-08:00</published><updated>2009-01-23T10:46:25.691-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sun'/><title type='text'>Cross over and link back</title><content type='html'>I'm continuing &lt;a href="http://blogs.sun.com/relling"&gt;my previous blog&lt;/a&gt; on this new site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1111328281312116171-2120563860943553261?l=blog.richardelling.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/2120563860943553261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1111328281312116171/posts/default/2120563860943553261'/><link rel='alternate' type='text/html' href='http://blog.richardelling.com/2009/01/cross-over-and-link-back.html' title='Cross over and link back'/><author><name>Richard Elling</name><uri>http://www.blogger.com/profile/15596339461577430423</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
