<?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-2442718768303240982</id><updated>2011-12-06T08:31:19.388-08:00</updated><category term='linux'/><category term='oss'/><category term='pxe boot'/><category term='boot'/><category term='grub'/><category term='introduction'/><category term='netflix'/><category term='customer focus'/><category term='fog'/><category term='sockets'/><category term='os'/><category term='moat'/><category term='berkeley sockets api'/><category term='bsd'/><category term='strategy'/><category term='storage'/><category term='performance'/><category term='freebsd'/><category term='clonezilla'/><category term='ghost'/><category term='fabbri tech'/><category term='pxe'/><title type='text'>Fabbri Tech</title><subtitle type='html'>Occasional posts about computer stuff.  &lt;small&gt;Brilliant name inspired by &lt;a href="http://jeffr_tech.livejournal.com/"&gt;Jeff&lt;/a&gt;.&lt;/small&gt;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://fabbritech.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2442718768303240982/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://fabbritech.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>A. Fabbri</name><uri>http://www.blogger.com/profile/15116718258307072633</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_Djyj_Xz6VgA/SjmILiiBs6I/AAAAAAAAAAs/JpsPU2RU0js/S220/Photo+3.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2442718768303240982.post-2739424665703104155</id><published>2011-09-19T13:42:00.000-07:00</published><updated>2011-10-05T23:01:11.436-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='strategy'/><category scheme='http://www.blogger.com/atom/ns#' term='netflix'/><category scheme='http://www.blogger.com/atom/ns#' term='customer focus'/><category scheme='http://www.blogger.com/atom/ns#' term='moat'/><title type='text'>Why Netflix / Quickster Split is a Strategic Error</title><content type='html'>It is easy to be a critic.  When a business starts with a disruptive, customer-focused service, but then starts to make questionable decisions after they are big and successful, I almost feel a duty to call it out.&lt;br /&gt;&lt;br /&gt;I've been a big fan of Netflix for years.  They've been really sucking at making customers happy lately, though.    I recently posted the following comment to the &lt;a href="http://www.fastcompany.com//1781226/why-reed-hastings-should-be-applauded-for-netflix-split"&gt;Fast Company&lt;/a&gt; article supporting Netflix's changes.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;br /&gt;It sounds like a good decision from the business side.&lt;br /&gt;&lt;br /&gt;For the customer, and for Netflix's competitive moat, it is a mistake IMO.&lt;br /&gt;&lt;br /&gt;Having one queue to manage all your movies is a major value of Netflix.  Other streaming services may come and go but if you've invested time curating your "want to watch" list on Netflix, it keeps you loyal to the service.&lt;br /&gt;&lt;br /&gt;Customers don't want two bills, two queues.  It is a totally brain dead move. It decreases usability.&lt;br /&gt;&lt;br /&gt;Customers want a single place to manage and watch all movies.  Any device.  Any media.  DVD is guaranteed to be an important part as long as studios play hardball with licensing fees.  Does anyone think that is going to stop happening?&lt;br /&gt;&lt;br /&gt;Everyone knows Netflix's streaming catalog is lacking in major ways.  And they are dropping some content (Starz Play).&lt;br /&gt;&lt;br /&gt;So this reorg seems like an obvious brain-dead move to me.  If I have to manage my movie list somewhere else now, why not just pick a competitor.  &lt;br /&gt;&lt;br /&gt;All of this is on top of a history of pissing off customers more and more.&lt;br /&gt;&lt;br /&gt;Netflix needs to do one simple thing, ask "What does the customer want?".&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2442718768303240982-2739424665703104155?l=fabbritech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabbritech.blogspot.com/feeds/2739424665703104155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fabbritech.blogspot.com/2011/09/why-netflix-quickster-split-is-major.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2442718768303240982/posts/default/2739424665703104155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2442718768303240982/posts/default/2739424665703104155'/><link rel='alternate' type='text/html' href='http://fabbritech.blogspot.com/2011/09/why-netflix-quickster-split-is-major.html' title='Why Netflix / Quickster Split is a Strategic Error'/><author><name>AJ</name><uri>http://www.blogger.com/profile/06555714415134556962</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_IKa_uh3_fMA/SfZ41HkkcMI/AAAAAAAAAAM/IUFDFdbGuBc/S220/foam_rich_jones.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2442718768303240982.post-7314340138540056186</id><published>2010-05-07T16:07:00.000-07:00</published><updated>2010-05-07T16:19:47.265-07:00</updated><title type='text'>Must-have Apps and Settings for OS X</title><content type='html'>&lt;i&gt;This entry lists applications and settings I think are essential for OS X, as a unix/linux software developer.&lt;/i&gt;&lt;br /&gt;My work MacBook Pro's drive just died--so I'm starting over with a fresh OS install.  I realized there are quite a few things I have to install and tweak before I'm comfortable working on this platform.  (Example OS was 10.5.x Leopard).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Settings&lt;/b&gt;&lt;br /&gt;* Caps Lock -&gt; Ctrl.  System Prefs -&gt; Keyboard and Mouse.&lt;br /&gt;* Dock customization. (Make smaller, move to right, auto hide, remove crap such as imovie, spaces.)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Software&lt;/b&gt;&lt;br /&gt;* Install Xcode.  &lt;a href="http://developer.apple.com/technologies/xcode.html"&gt;xcode @ apple&lt;/a&gt;.  You'll have to jump through an annoying registration process and then endure a huge download.  &lt;i&gt;Apple is the new Microsoft&lt;/i&gt;.&lt;br /&gt;* Install &lt;a href="http://www.macports.org/install.php"&gt;Mac Ports&lt;/a&gt; (depends on Xcode).&lt;br /&gt;* &lt;a href="http://manytricks.com/witch/"&gt;Witch&lt;/a&gt;.  No longer free, but old version still is? so I can alt-tab *windows* not just *applications*.  OS X annoyance: you're supposed to use the mouse all the time even though it is an order of magnitude slower than the keyboard.&lt;br /&gt;* Other apps: Adium, Chrome, Caffeine, iStat Menus, VLC, graphviz.&lt;br /&gt;* Use mac ports to install a bunch of other stuff I always use in terminal: wget ...&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Work in progress.. stay tuned&lt;/i&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2442718768303240982-7314340138540056186?l=fabbritech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabbritech.blogspot.com/feeds/7314340138540056186/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fabbritech.blogspot.com/2010/05/must-have-apps-and-settings-for-os-x.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2442718768303240982/posts/default/7314340138540056186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2442718768303240982/posts/default/7314340138540056186'/><link rel='alternate' type='text/html' href='http://fabbritech.blogspot.com/2010/05/must-have-apps-and-settings-for-os-x.html' title='Must-have Apps and Settings for OS X'/><author><name>AJ</name><uri>http://www.blogger.com/profile/06555714415134556962</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_IKa_uh3_fMA/SfZ41HkkcMI/AAAAAAAAAAM/IUFDFdbGuBc/S220/foam_rich_jones.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2442718768303240982.post-1125128386122043991</id><published>2010-04-30T18:11:00.000-07:00</published><updated>2010-05-10T15:14:54.458-07:00</updated><title type='text'>Script to count lines of C or C++ code [trivial]</title><content type='html'>Here we have a simple script to count lines of C or C++ code in the given directory tree.  Save as count-code-lines.sh, and run like this:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# count-code-lines.sh /path/to/code&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Here's the simple script:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;#!/bin/bash &lt;br /&gt;find $1 \( -name "*.[ch]" -o -name "*.cpp" -o -name "*.hpp" \&lt;br /&gt;        -o -name "*.py" \) \&lt;br /&gt;        -exec wc \{\} \; | sort -n &gt; wc.out&lt;br /&gt;awk '{ total_lines += $1 } END { print total_lines }' wc.out &gt; wc.total&lt;br /&gt;TOT=`cat wc.total`&lt;br /&gt;echo "$1: $TOT" &lt;br /&gt;rm -f wc.out wc.total&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2442718768303240982-1125128386122043991?l=fabbritech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabbritech.blogspot.com/feeds/1125128386122043991/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fabbritech.blogspot.com/2010/04/script-to-count-lines-of-c-or-c-code.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2442718768303240982/posts/default/1125128386122043991'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2442718768303240982/posts/default/1125128386122043991'/><link rel='alternate' type='text/html' href='http://fabbritech.blogspot.com/2010/04/script-to-count-lines-of-c-or-c-code.html' title='Script to count lines of C or C++ code [trivial]'/><author><name>AJ</name><uri>http://www.blogger.com/profile/06555714415134556962</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://1.bp.blogspot.com/_IKa_uh3_fMA/SfZ41HkkcMI/AAAAAAAAAAM/IUFDFdbGuBc/S220/foam_rich_jones.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2442718768303240982.post-6282226208462887714</id><published>2009-07-27T21:33:00.000-07:00</published><updated>2010-05-11T16:23:34.382-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='performance'/><category scheme='http://www.blogger.com/atom/ns#' term='freebsd'/><category scheme='http://www.blogger.com/atom/ns#' term='sockets'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='berkeley sockets api'/><category scheme='http://www.blogger.com/atom/ns#' term='bsd'/><title type='text'>Part 3: Extending Sockets for Better Performance: Memory Management</title><content type='html'>&lt;i&gt;Continued from  &lt;a href="http://www.blogger.com/post-create.g?blogID=2442718768303240982"&gt;Part 2&lt;/a&gt;.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt; Improving Memory Management of the Sockets API&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The way the legacy sockets API is defined prevents applications from realizing zero-copy networking.  A couple of straightforward changes to the API would allow us to relieve the host of the burden of useless memory copies.  There are a couple of areas of pain, the biggest being the receive API:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;RECV(P)&lt;br /&gt;     recv - receive a message from a connected socket&lt;br /&gt;SYNOPSIS&lt;br /&gt;     #include &lt;sys/socket.h&gt;&lt;br /&gt;     ssize_t recv(int socket, void *buffer, size_t length, int flags);&lt;br /&gt;&lt;/sys/socket.h&gt;&lt;/pre&gt;&lt;br /&gt;The call to recv() is synchronous by default; it will block until data is available.  Using O_NONBLOCK on the file descriptor allows one to avoid blocking, but this is not sufficient to achieve zero-copy.  Consider these use cases:&lt;br /&gt;&lt;br /&gt;1. There is data available when we call recv().  Recv() will return after copying the data into *buffer.&lt;br /&gt;2. There is no data available to receive.&lt;br /&gt;&lt;blockquote&gt;a. Default case; we block until data arrives.&lt;br /&gt;b. O_NONBLOCK is set; we return EAGAIN, ignoring *buffer.&lt;/blockquote&gt;&lt;br /&gt;To do zero-copy receiving, is necessary (but not sufficient) that the network stack knows about the *buffer before data arrives.  (Optimally, the NIC should be ready to DMA into *buffer.)  I'll call this the pre-posted receive buffers requirement.  This is only possible in case 2. a. above, which is not the use case of a performance-critical application.  This is why zero copy receive is not feasible with the current socket API.&lt;br /&gt;&lt;br /&gt;Consider three simple ways to meet the pre-posted receive requirement:&lt;br /&gt;&lt;br /&gt;A. Callee allocation:  The network stack owns receive buffer allocation.  The new recv() interface does not take a pointer to a caller-supplied buffer, but instead returns a pointer to a buffer that it allocates.  The application can later return the receive buffer to the network stack.&lt;br /&gt;&lt;br /&gt;B. Caller allocation: The application owns receive buffer allocation, but pre-posts receive buffers.  Two sub-possiblities:&lt;br /&gt;&lt;blockquote&gt;i. There is no pre-registration of buffers required, just pre-posting (the new recv() enqueues a buffer and returns).&lt;br /&gt;ii. The application "registers" receive buffers once before using them to pre-post receives.&lt;/blockquote&gt;&lt;br /&gt;If we consider A, B.i. and B.ii., we have three possibilities for a better receive interface in order of increasing complexity.  Any of these are superior to the existing recv() interface.  Some applications prefer to own buffer allocation, and even do scatter/gather and so on, but even forcing applications to do A (callee allocation) would at the worst require the application to copy the data where it really wants it, which is no worse off than the existing API.  Of the two caller allocation cases B.ii., requiring applications to register their network buffers before posting them, allows the network stack to prepare for DMA outside of the fast path.   This helps keep the receive path very lean and fast at the cost of a more complex API.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Send Memory Management&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Memory management requirements for a fast send path are similar to the receive path, without the pre-posting requirement.  There is still a choice between callee (A) or caller-managed (B) buffer allocation.  For the callee-owned allocation case, the application simply calls into the network stack instead of malloc to get/free network buffers.  The B-case (caller managed buffers) can be optimized again by pre-registering application buffers before calling send(), such that the network stack can quickly DMA from host memory without expensive setup (pinning pages, translating addresses, etc.).  Again, any of these possibilities is superior to the existing API from a performance perspective.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2442718768303240982-6282226208462887714?l=fabbritech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabbritech.blogspot.com/feeds/6282226208462887714/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fabbritech.blogspot.com/2009/07/part-3-extending-sockets-for-better.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2442718768303240982/posts/default/6282226208462887714'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2442718768303240982/posts/default/6282226208462887714'/><link rel='alternate' type='text/html' href='http://fabbritech.blogspot.com/2009/07/part-3-extending-sockets-for-better.html' title='Part 3: Extending Sockets for Better Performance: Memory Management'/><author><name>A. Fabbri</name><uri>http://www.blogger.com/profile/15116718258307072633</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_Djyj_Xz6VgA/SjmILiiBs6I/AAAAAAAAAAs/JpsPU2RU0js/S220/Photo+3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2442718768303240982.post-2051259465475161090</id><published>2009-07-26T21:28:00.000-07:00</published><updated>2010-05-11T16:22:46.101-07:00</updated><title type='text'>Part 2: Extending Sockets for Better Performance: Existing Work</title><content type='html'>&lt;p&gt;&lt;br /&gt;In &lt;a href="http://fabbritech.blogspot.com/2009/07/extending-sockets-api-for-better.html"&gt;Part 1&lt;/a&gt;, I summarized why the &lt;a href="http://en.wikipedia.org/wiki/Berkeley_sockets"&gt;Berkeley Sockets API&lt;/a&gt; needs to be changed to improve application performance.&lt;br /&gt;&lt;br /&gt;In this entry, I'll attempt to cover some of the work that has already been done on the topic.  Please do leave a comment with any additional references you know about.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;b&gt;EXS - Extended Sockets&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;/b&gt;A friend from Intel sent me these links.  First, see the end of this &lt;a href="http://www.iol.unh.edu/services/testing/iwarp/faq.php"&gt;iWarp FAQ&lt;/a&gt;.  It explains what &lt;a href="http://www.openfabrics.org"&gt;OFED&lt;/a&gt; is and implies EXS is going to be implemented on top of it (which I have not seen).  The actual &lt;a href="http://www.opengroup.org/icsc/uploads/40/6415/ES_API_1_0.pdf"&gt;specification [pdf]&lt;/a&gt; is available at&lt;br /&gt; &lt;a href="http://www.opengroup.org/icsc/documents.tpl?CALLER=documents.tpl&amp;amp;dcat=&amp;amp;S=gdc_title&amp;amp;H=&amp;amp;G=&amp;amp;R=desc&amp;amp;C=45&amp;amp;D=0"&gt;opengroup.org&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Paper by Ulrich Drepper @ Red Hat&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://people.redhat.com/drepper/newni.pdf"&gt;The Need for Asynchronous, Zero-Copy Network I/O&lt;/a&gt;. &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Next Steps&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Now that I've identified the problem (sockets API performance), and cited some existing work, we're ready to start discussing features. &amp;nbsp;My &lt;a href="http://fabbritech.blogspot.com/2009/07/part-3-extending-sockets-for-better.html"&gt;next post&lt;/a&gt; discusses memory (buffer) management.&amp;nbsp;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2442718768303240982-2051259465475161090?l=fabbritech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabbritech.blogspot.com/feeds/2051259465475161090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fabbritech.blogspot.com/2009/07/in-part-1-i-summarized-why-berkeley.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2442718768303240982/posts/default/2051259465475161090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2442718768303240982/posts/default/2051259465475161090'/><link rel='alternate' type='text/html' href='http://fabbritech.blogspot.com/2009/07/in-part-1-i-summarized-why-berkeley.html' title='Part 2: Extending Sockets for Better Performance: Existing Work'/><author><name>A. Fabbri</name><uri>http://www.blogger.com/profile/15116718258307072633</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_Djyj_Xz6VgA/SjmILiiBs6I/AAAAAAAAAAs/JpsPU2RU0js/S220/Photo+3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2442718768303240982.post-7879448254482852619</id><published>2009-07-24T21:24:00.000-07:00</published><updated>2010-05-11T16:21:58.921-07:00</updated><title type='text'>Extending the Sockets API for Better Performance</title><content type='html'>&lt;span style="font-weight:bold;"&gt;The Problem&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Since the &lt;a href="http://en.wikipedia.org/wiki/Berkeley_sockets"&gt;BSD sockets API&lt;/a&gt; was introduced eons ago, it has become apparent that the API is not designed optimally for high-performance applications.  The primary problems with the existing sockets API are&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;No support for zero-copy.&lt;/li&gt;&lt;li&gt;Synchronous interfaces.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Other issues are corollaries to those problems:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Lack of network stack-managed buffers (follows from 1 above).&lt;/li&gt;&lt;li&gt;Lack of asynchronous event mechanism (follows from 2 above).&lt;/li&gt;&lt;li&gt;Are there other issues I'm not thinking of at the moment?&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The Implications&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The main implication of the performance problems with the sockets API is that applications are unable to realize the performance and efficiency of modern networks.  Pushing packets at wire speed with 10GbE or 40GbE takes a significant amount of CPU, memory, and system bus resources.&lt;br /&gt;&lt;br /&gt;Because of the limitations of the current sockets API;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The value of fast networks (i.e. 10 Gigabit Datacenter Ethernet) is reduced.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;My &lt;a href="http://fabbritech.blogspot.com/2009/07/in-part-1-i-summarized-why-berkeley.html"&gt;next post&lt;/a&gt; suggests how we can fix this problem...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2442718768303240982-7879448254482852619?l=fabbritech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabbritech.blogspot.com/feeds/7879448254482852619/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fabbritech.blogspot.com/2009/07/extending-sockets-api-for-better.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2442718768303240982/posts/default/7879448254482852619'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2442718768303240982/posts/default/7879448254482852619'/><link rel='alternate' type='text/html' href='http://fabbritech.blogspot.com/2009/07/extending-sockets-api-for-better.html' title='Extending the Sockets API for Better Performance'/><author><name>A. Fabbri</name><uri>http://www.blogger.com/profile/15116718258307072633</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_Djyj_Xz6VgA/SjmILiiBs6I/AAAAAAAAAAs/JpsPU2RU0js/S220/Photo+3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2442718768303240982.post-9146802821923688662</id><published>2009-07-09T15:13:00.000-07:00</published><updated>2009-07-09T17:42:01.009-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grub'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='boot'/><title type='text'>Make GRUB Boot Something Once</title><content type='html'>I'm currently building and installing various risky kernels on a remote RedHat linux server.  I leave a known-good kernel as the default boot option for the Grub boot loader, otherwise I would need physical access to the machine if the new kernel doesn't boot.  I depend on remote serial access to be able to select new (risky) kernels once upon boot.&lt;br /&gt;&lt;br /&gt;Unfortunately, I have a flaky serial port that is not allowing me to make a choice when Grub loads.  As  a workaround, it would be wonderful to be able to change the default boot option *for just one boot*.  For example, keep kernel #1 as the real default boot option, but tell grub to use #2 as a default just once.&lt;br /&gt;&lt;br /&gt;Luckily this is very easy to do.  Here's how I did it:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;[root@localhost ~]# echo "savedefault --default=2 --once" | grub --batch&lt;br /&gt;[root@localhost ~]# reboot&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2442718768303240982-9146802821923688662?l=fabbritech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabbritech.blogspot.com/feeds/9146802821923688662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fabbritech.blogspot.com/2009/07/make-grub-boot-something-once.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2442718768303240982/posts/default/9146802821923688662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2442718768303240982/posts/default/9146802821923688662'/><link rel='alternate' type='text/html' href='http://fabbritech.blogspot.com/2009/07/make-grub-boot-something-once.html' title='Make GRUB Boot Something Once'/><author><name>A. Fabbri</name><uri>http://www.blogger.com/profile/15116718258307072633</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_Djyj_Xz6VgA/SjmILiiBs6I/AAAAAAAAAAs/JpsPU2RU0js/S220/Photo+3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2442718768303240982.post-5460811409029196032</id><published>2009-06-18T15:11:00.000-07:00</published><updated>2009-06-18T15:49:01.894-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fog'/><category scheme='http://www.blogger.com/atom/ns#' term='ghost'/><category scheme='http://www.blogger.com/atom/ns#' term='oss'/><category scheme='http://www.blogger.com/atom/ns#' term='clonezilla'/><category scheme='http://www.blogger.com/atom/ns#' term='pxe boot'/><title type='text'>Open Source Ghost Alternatives (Part 2)</title><content type='html'>&lt;i&gt;Continued from &lt;a href="http://fabbritech.blogspot.com/2009/06/open-source-ghost-alternative.html"&gt;Open Source Ghost Alternative Part 1&lt;/a&gt;.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Here I evaluate each disk image management application in terms of the requirements from part 1.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Clonezilla&lt;/b&gt;&lt;br /&gt;1. Whole disk: maybe. Clonezilla claims it can handle a whole disk at a time, yet it seems to be partition-oriented.&lt;br /&gt;2. PXE-based installer: yes.&lt;br /&gt;3. Easy to set up: maybe.&lt;br /&gt;4. Client chooses install image: No.  You must set the mode on the server.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;g4u(ghost for unix)&lt;/b&gt;&lt;br /&gt;1. Whole disk: yes.  g4u gives an option to clone/restore whole disk.&lt;br /&gt;2. PXE-based installer: not by default.  There are instructions how to extract the kernel from the bootable (live cd) installer and set it up on a PXE server but I couldn't easily read the document.&lt;br /&gt;3. Easy to set up: yes.. looks pretty slick for simple cloning and restoring from FTP servers.&lt;br /&gt;4. Client chooses install image: Yes.  You specify a url of the image to download.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Partition Image&lt;/b&gt;&lt;br /&gt;This is actually one of the tools included in Clonezilla and thus supports a subset of its features.&lt;br /&gt;1. Whole disk: no.  Have to do each partition.  One benefit is that it is filesystem-aware and efficient WRT unused blocks.&lt;br /&gt;2. PXE-based installer: no.  Use clonezilla for that.&lt;br /&gt;3. Easy to set up: yes, looks simple.&lt;br /&gt;4. Client chooses install image: yes. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;FOG(free open-source ghost)&lt;/b&gt;&lt;br /&gt;FOG sounds fairly slick, except the fact that in only supports windows images.  Thus, I won't even consider it.  Funny, the server only runs on linux though.&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;The goal of this project is to have a stable, user-friendly method to image Windows based workstations. &lt;/i&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2442718768303240982-5460811409029196032?l=fabbritech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabbritech.blogspot.com/feeds/5460811409029196032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fabbritech.blogspot.com/2009/06/open-source-ghost-alternatives-part-2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2442718768303240982/posts/default/5460811409029196032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2442718768303240982/posts/default/5460811409029196032'/><link rel='alternate' type='text/html' href='http://fabbritech.blogspot.com/2009/06/open-source-ghost-alternatives-part-2.html' title='Open Source Ghost Alternatives (Part 2)'/><author><name>A. Fabbri</name><uri>http://www.blogger.com/profile/15116718258307072633</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_Djyj_Xz6VgA/SjmILiiBs6I/AAAAAAAAAAs/JpsPU2RU0js/S220/Photo+3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2442718768303240982.post-3119453394750600136</id><published>2009-06-17T19:43:00.000-07:00</published><updated>2009-06-17T19:56:03.412-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='os'/><category scheme='http://www.blogger.com/atom/ns#' term='ghost'/><category scheme='http://www.blogger.com/atom/ns#' term='pxe'/><category scheme='http://www.blogger.com/atom/ns#' term='pxe boot'/><category scheme='http://www.blogger.com/atom/ns#' term='storage'/><title type='text'>Open Source Ghost Alternative</title><content type='html'>Today I've been looking for an open-source tool which can simplify the process of creating a disk image (a set of partitions with stuff on them), saving a copy somewhere, and then installing that image on some machine.  My requirements are, loosely:&lt;ul&gt;&lt;li&gt;1. Handle a whole disk, not just one partition at a time.&lt;/li&gt;&lt;li&gt;2. Support reimaging (installing) via a PXE-booted installer.&lt;/li&gt;&lt;/ul&gt;Nice-to-have features are&lt;ul&gt;&lt;li&gt;3. Easy to set up.&lt;/li&gt;&lt;li&gt;4. Ability to choose an image after PXE booting the machine to be reimaged.&lt;/li&gt;&lt;/ul&gt;The options I have found so far are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://clonezilla.org/"&gt;Clonezilla&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.feyrer.de/g4u/"&gt;g4u&lt;/a&gt; (ghost for unix)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.partimage.org/Main_Page"&gt;Partition Image&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.fogproject.org/"&gt;FOG&lt;/a&gt; (free open-source ghost)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;In the next post I will compare these applications in terms of my desired features...&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2442718768303240982-3119453394750600136?l=fabbritech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabbritech.blogspot.com/feeds/3119453394750600136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fabbritech.blogspot.com/2009/06/open-source-ghost-alternative.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2442718768303240982/posts/default/3119453394750600136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2442718768303240982/posts/default/3119453394750600136'/><link rel='alternate' type='text/html' href='http://fabbritech.blogspot.com/2009/06/open-source-ghost-alternative.html' title='Open Source Ghost Alternative'/><author><name>A. Fabbri</name><uri>http://www.blogger.com/profile/15116718258307072633</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_Djyj_Xz6VgA/SjmILiiBs6I/AAAAAAAAAAs/JpsPU2RU0js/S220/Photo+3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2442718768303240982.post-145882098757956448</id><published>2009-06-17T17:20:00.000-07:00</published><updated>2009-06-17T17:23:50.163-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='introduction'/><category scheme='http://www.blogger.com/atom/ns#' term='fabbri tech'/><title type='text'>Welcome to Fabbri Tech</title><content type='html'>Hi this is Aaron.  I'm starting a new blog as I want a place to write about work and technology.  No comedy videos.  No &lt;a href="http://icanhascheezburger.com/"&gt;lolcats&lt;/a&gt;.  Just nerdy little notes of things I'm working on at the moment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2442718768303240982-145882098757956448?l=fabbritech.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://fabbritech.blogspot.com/feeds/145882098757956448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://fabbritech.blogspot.com/2009/06/welcome-to-fabbri-tech.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2442718768303240982/posts/default/145882098757956448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2442718768303240982/posts/default/145882098757956448'/><link rel='alternate' type='text/html' href='http://fabbritech.blogspot.com/2009/06/welcome-to-fabbri-tech.html' title='Welcome to Fabbri Tech'/><author><name>A. Fabbri</name><uri>http://www.blogger.com/profile/15116718258307072633</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/_Djyj_Xz6VgA/SjmILiiBs6I/AAAAAAAAAAs/JpsPU2RU0js/S220/Photo+3.jpg'/></author><thr:total>0</thr:total></entry></feed>
