<?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-5036371192078491568</id><updated>2012-02-27T23:49:49.456+01:00</updated><category term='netfilter'/><category term='linux'/><category term='mpeg2'/><category term='Jim Getty'/><category term='tcpdump. libpcap'/><category term='QoS'/><category term='pcap'/><category term='kernel'/><category term='broadband'/><category term='buffer-bloat'/><category term='ADSL'/><category term='mpeg2ts'/><category term='Jim Gettys'/><category term='iptables'/><category term='wireshark'/><category term='bufferbloat'/><category term='adsl-optimizer'/><title type='text'>NetOptimizer</title><subtitle type='html'>Linux Kernel Network Developer - making stuff scale</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://netoptimizer.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5036371192078491568/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://netoptimizer.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>NetOptimizer</name><uri>http://www.blogger.com/profile/15536846981722319158</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_1FTeRb8raZE/SypDQTqSRgI/AAAAAAAAAFA/ZAGkD34InU0/S220/davem_jdb_dont_use_windows.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>4</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5036371192078491568.post-5699885808365802405</id><published>2011-05-11T16:47:00.004+02:00</published><updated>2011-05-11T17:01:00.403+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='netfilter'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='mpeg2'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='mpeg2ts'/><category scheme='http://www.blogger.com/atom/ns#' term='iptables'/><title type='text'>Announcing: The IPTV-Analyzer</title><content type='html'>&lt;div&gt;I'm happy to announce the first official release of the IPTV-Analyzer project, as an Open Source project.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; Homepage: &lt;a href="http://www.iptv-analyzer.org/wiki/index.php/Main_Page"&gt; http://www.iptv-analyzer.org&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt; Git tree: &lt;a href="https://github.com/netoptimizer/IPTV-Analyzer"&gt;https://github.com/netoptimizer/IPTV-Analyzer&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The IPTV-Analyzer is a continuous/real-time tool for analyzing the contents of MPEG2 Transport Stream (TS) packets, which is commonly used for IPTV multicast signals. The main purpose is continuous quality measurement, with a focus on detecting MPEG2 TS/CC packet drops.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The core component is an iptables (Linux) kernel module, named "mpeg2ts".  This kernel module performs the real-time Deep Packet Inspection of the MPEG2-TS packets. Its highly performance optimized, written for parallel processing across CPU cores (via RCU locking) and hash tables are used for handling large number of streams. Statistics are exported via the proc filesystem (scalability is achieved via use of the seq_file proc API).  It scales to hundreds of IPTV channels, even on small ATOM based CPUs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Please send bugreports, patches, improvement, comments or insults to: &lt;b&gt;hawk@comx.dk&lt;/b&gt;&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/5036371192078491568-5699885808365802405?l=netoptimizer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netoptimizer.blogspot.com/feeds/5699885808365802405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netoptimizer.blogspot.com/2011/05/announcing-iptv-analyzer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5036371192078491568/posts/default/5699885808365802405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5036371192078491568/posts/default/5699885808365802405'/><link rel='alternate' type='text/html' href='http://netoptimizer.blogspot.com/2011/05/announcing-iptv-analyzer.html' title='Announcing: The IPTV-Analyzer'/><author><name>NetOptimizer</name><uri>http://www.blogger.com/profile/15536846981722319158</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_1FTeRb8raZE/SypDQTqSRgI/AAAAAAAAAFA/ZAGkD34InU0/S220/davem_jdb_dont_use_windows.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5036371192078491568.post-6051652082467524859</id><published>2011-01-10T15:11:00.002+01:00</published><updated>2011-01-10T15:26:20.015+01:00</updated><title type='text'>Bufferbloat: Wireless is worse than expected</title><content type='html'>Jim Gettys also pointed out, that &lt;a href="http://gettys.wordpress.com/2010/12/02/home-router-puzzle-piece-two-fun-with-wireless/"&gt;bufferbloat also exists on Wifi wireless connections[1]&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I didn't take his word for it, but tested it my self.  And the result was &lt;span style="font-weight: bold;"&gt;far worse than I expected&lt;/span&gt;!  In optimal conditions sitting next to the Wifi AP, I can easily introduce a 600 ms delay (0.6 sec), and moving further away I quickly see latency approaching 1 sec.  See Gettys tests&lt;a href="http://gettys.wordpress.com/2010/12/02/home-router-puzzle-piece-two-fun-with-wireless/"&gt;[1]&lt;/a&gt; for more info.&lt;br /&gt;&lt;br /&gt;This bufferbloat issue is going to get worse, as we get more bandwidth on our broadband connections.  This means that we have not see problem at its full extend yet.&lt;br /&gt;&lt;blockquote&gt;Thus, lets fix it before it gets out of hand!&lt;/blockquote&gt;&lt;br /&gt;An interesting property of Wifi bufferbloat is, that the queue/bloat happens on you own machine (when uploading).&lt;br /&gt;&lt;blockquote style="font-weight: bold;"&gt;Linux is to blame, big time!&lt;br /&gt;&lt;/blockquote&gt;An some point we/the Linux kernel developers, increased the default transmit queue length (txqueuelen), from 100 packets to 1000 packets (happend when the netcards went from 100Mbit/s to 1000Mbit/s).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The major problem here is, that wireless devices also inherited this default txqueuelen setting of 1000 packets.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This is fortunately easily fixed/adjusted via e.g the command:&lt;br /&gt;&lt;blockquote&gt;ifconfig wlan0 txqueuelen 10&lt;/blockquote&gt;But unfortunately, this does not remove all the TX bufferbloat in the system.  The Wifi driver and hardware also have significant TX buffering, as Getty also &lt;a href="http://gettys.wordpress.com/2011/01/03/aggregate-bufferbloat-802-11-and-3g-networks/"&gt;describes[2]&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Setting the txqueuelen to 1, I still experienced an average delay of 96ms and max 116ms, when linking 24 Mbit/s.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;24 Mbit/s * 116 ms = 348000 bytes&lt;br /&gt;= 232 packets (with 1500 bytes packets)&lt;/blockquote&gt;Thus, a hardware bufferbloat on minimum 232 packets.  Gettys report his wifi hardware has 255 packets in hardware.&lt;br /&gt;&lt;br /&gt;Fixing the hardware Wifi bufferbloat, is harder at we need to fix each individual driver and most of them not exported the functionality to tools like ethtool).&lt;br /&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;"&gt;We need to at least mitigate the wifi bufferbloat, to some sane level.&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;Next we can talk about choosing a queueing stategy AQM for wifi networks.&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;a href="%5B1%5D%20http://gettys.wordpress.com/2010/12/02/home-router-puzzle-piece-two-fun-with-wireless/"&gt;[1] http://gettys.wordpress.com/2010/12/02/home-router-puzzle-piece-two-fun-with-wireless/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://gettys.wordpress.com/2011/01/03/aggregate-bufferbloat-802-11-and-3g-networks/"&gt;[2] http://gettys.wordpress.com/2011/01/03/aggregate-bufferbloat-802-11-and-3g-networks/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5036371192078491568-6051652082467524859?l=netoptimizer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netoptimizer.blogspot.com/feeds/6051652082467524859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netoptimizer.blogspot.com/2011/01/bufferbloat-wireless-is-worse-than.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5036371192078491568/posts/default/6051652082467524859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5036371192078491568/posts/default/6051652082467524859'/><link rel='alternate' type='text/html' href='http://netoptimizer.blogspot.com/2011/01/bufferbloat-wireless-is-worse-than.html' title='Bufferbloat: Wireless is worse than expected'/><author><name>NetOptimizer</name><uri>http://www.blogger.com/profile/15536846981722319158</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_1FTeRb8raZE/SypDQTqSRgI/AAAAAAAAAFA/ZAGkD34InU0/S220/davem_jdb_dont_use_windows.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5036371192078491568.post-8686522007644586602</id><published>2010-12-30T14:40:00.001+01:00</published><updated>2011-01-09T22:04:54.861+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='adsl-optimizer'/><category scheme='http://www.blogger.com/atom/ns#' term='buffer-bloat'/><category scheme='http://www.blogger.com/atom/ns#' term='bufferbloat'/><category scheme='http://www.blogger.com/atom/ns#' term='broadband'/><category scheme='http://www.blogger.com/atom/ns#' term='ADSL'/><category scheme='http://www.blogger.com/atom/ns#' term='QoS'/><category scheme='http://www.blogger.com/atom/ns#' term='Jim Getty'/><category scheme='http://www.blogger.com/atom/ns#' term='Jim Gettys'/><title type='text'>Buffer Bloat: The calculations</title><content type='html'>&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;The&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;buffer-bloat&lt;/span&gt;&lt;/span&gt; blog posts by &lt;a href="http://en.wikipedia.org/wiki/Jim_Gettys"&gt;Jim &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;Gettys&lt;/span&gt;&lt;/a&gt;&lt;a href="http://gettys.wordpress.com/2010/12/03/introducing-the-criminal-mastermind-bufferbloat/"&gt;[1]&lt;/a&gt;&lt;a href="http://gettys.wordpress.com/2010/12/06/whose-house-is-of-glasse-must-not-throw-stones-at-another/"&gt;[2]&lt;/a&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;are&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;very&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;interesting&lt;/span&gt;, and relevant for &lt;span style="font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;everybody&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;with&lt;/span&gt; a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;broadband&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;connection&lt;/span&gt;&lt;/span&gt; (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;especially&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;asymmetric&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;links&lt;/span&gt;).  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;They&lt;/span&gt;  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;are&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;well&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;written&lt;/span&gt;, but &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;also&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;too&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;long&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;too&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_21"&gt;many&lt;/span&gt; posts.&lt;br /&gt;&lt;br /&gt;In &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_22"&gt;this&lt;/span&gt; blog post, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_23"&gt;I'll&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;explain&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_25"&gt;what&lt;/span&gt; is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_26"&gt;going&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_27"&gt;on&lt;/span&gt;, by &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_28"&gt;showing&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_29"&gt;how&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_30"&gt;you&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_31"&gt;can&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_32"&gt;calculate&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_33"&gt;your&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_34"&gt;own&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_35"&gt;latency&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_36"&gt;issues.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_37"&gt;The&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_38"&gt;issue&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_39"&gt;raised&lt;/span&gt; by &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_40"&gt;Gettys&lt;/span&gt;, is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_41"&gt;that&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_42"&gt;buffer-bloat&lt;/span&gt;&lt;/span&gt; (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_43"&gt;too&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_44"&gt;big&lt;/span&gt; buffers &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_45"&gt;on&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_46"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_47"&gt;network&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_48"&gt;path&lt;/span&gt;) has &lt;span style="font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_49"&gt;fundamentally&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_50"&gt;broken&lt;/span&gt; Internet &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_51"&gt;broadband&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_52"&gt;connections&lt;/span&gt;&lt;/span&gt; &lt;a href="http://gettys.wordpress.com/2010/12/06/whose-house-is-of-glasse-must-not-throw-stones-at-another/"&gt;[2]&lt;/a&gt;.&lt;br /&gt;As &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_53"&gt;buffer-bloat&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_54"&gt;can&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_55"&gt;introduce&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_56"&gt;enough&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_57"&gt;latency&lt;/span&gt; to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_58"&gt;cripple&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_59"&gt;your&lt;/span&gt;  line.  Basically killing &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_60"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_61"&gt;possibility&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_62"&gt;of&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_63"&gt;interactive&lt;/span&gt; and realtime services, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_64"&gt;being&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_65"&gt;delivered&lt;/span&gt; (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_66"&gt;e.g.&lt;/span&gt; by &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_67"&gt;companies&lt;/span&gt;) over &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_68"&gt;your&lt;/span&gt;  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_69"&gt;broadband&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_70"&gt;connection.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_71"&gt;I'm&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_72"&gt;very&lt;/span&gt; happy to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_73"&gt;see&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_74"&gt;that&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_75"&gt;Getty&lt;/span&gt;s is bring &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_76"&gt;this&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_77"&gt;issue&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_78"&gt;up&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_79"&gt;again.&lt;/span&gt;&lt;/blockquote&gt;Back in 2005, I &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_80"&gt;discovered&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_81"&gt;the&lt;/span&gt; same &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_82"&gt;issues&lt;/span&gt; as &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_83"&gt;Gettys.&lt;/span&gt;  I &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_84"&gt;wrote&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_85"&gt;my&lt;/span&gt; masters &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_86"&gt;thesis&lt;/span&gt;&lt;a href="http://www.adsl-optimizer.dk/thesis/"&gt;[3]&lt;/a&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_87"&gt;about&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_88"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_89"&gt;issue&lt;/span&gt;, and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_90"&gt;even&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_91"&gt;created&lt;/span&gt; an &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_92"&gt;Open&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_93"&gt;Source&lt;/span&gt;  "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_94"&gt;mitigation&lt;/span&gt;" solution &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_95"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_96"&gt;ADSL-optimizer&lt;/span&gt;&lt;a href="http://www.adsl-optimizer.dk/"&gt;[4]&lt;/a&gt;.  It &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_97"&gt;seems&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_98"&gt;my&lt;/span&gt; solution has not &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_99"&gt;gained&lt;/span&gt; a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_100"&gt;wider&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_101"&gt;use.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_102"&gt;The&lt;/span&gt; major &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_103"&gt;contribution&lt;/span&gt; for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_104"&gt;my&lt;/span&gt; side, is to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_105"&gt;take&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_106"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_107"&gt;ADSL&lt;/span&gt; overhead &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_108"&gt;into&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_109"&gt;account&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_110"&gt;when&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_111"&gt;doing&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_112"&gt;QoS&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_113"&gt;packet&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_114"&gt;shaping.&lt;/span&gt;  &lt;span style="font-size:85%;"&gt;(&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_115"&gt;Everything&lt;/span&gt; is in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_116"&gt;mainline&lt;/span&gt;, just &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_117"&gt;use&lt;/span&gt;/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_118"&gt;add&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_119"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_120"&gt;TC&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_121"&gt;options&lt;/span&gt;  "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_122"&gt;linklayer&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_123"&gt;adsl&lt;/span&gt;" and "overhead", &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_124"&gt;if&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_125"&gt;you&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_126"&gt;already&lt;/span&gt; have a Linux &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_127"&gt;box&lt;/span&gt;  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_128"&gt;doing&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_129"&gt;QoS&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_130"&gt;on&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_131"&gt;your&lt;/span&gt; line.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_132"&gt;The&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_133"&gt;issue&lt;/span&gt; is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_134"&gt;that&lt;/span&gt;:&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-size:130%;"&gt;A single TCP &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_135"&gt;upload&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_136"&gt;cause&lt;/span&gt; a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_137"&gt;delay&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_138"&gt;of&lt;/span&gt; 1.2 &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_139"&gt;seconds&lt;/span&gt; (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_140"&gt;on&lt;/span&gt; a 512 Kbit/s &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_141"&gt;ADSL&lt;/span&gt; line)&lt;/span&gt;&lt;/blockquote&gt;&lt;span style="font-size:85%;"&gt;(&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_142"&gt;see&lt;/span&gt; &lt;a href="http://www.adsl-optimizer.dk/thesis/main_final_hyper.pdf"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_143"&gt;thesis&lt;/span&gt;[3] page 21&lt;/a&gt;).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_144"&gt;Lets&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_145"&gt;calculate&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_146"&gt;what&lt;/span&gt; is happening, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_147"&gt;without&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_148"&gt;going&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_149"&gt;into&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_150"&gt;details&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_151"&gt;of&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_152"&gt;why&lt;/span&gt; TCP/IP &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_153"&gt;miss-behaves&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_154"&gt;cause&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_155"&gt;queues&lt;/span&gt; to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_156"&gt;build&lt;/span&gt; (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_157"&gt;details&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_158"&gt;are&lt;/span&gt; in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_159"&gt;my&lt;/span&gt;  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_160"&gt;thesis&lt;/span&gt;[3]).&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_161"&gt;Before&lt;/span&gt; starting &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_162"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_163"&gt;calculations&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_164"&gt;here&lt;/span&gt; is a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_165"&gt;beautiful&lt;/span&gt; &lt;span style="font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_166"&gt;cite&lt;/span&gt; by Jim &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_167"&gt;Getty&lt;/span&gt;&lt;/span&gt;s[1]:&lt;br /&gt;&lt;blockquote&gt;"Large &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_168"&gt;network&lt;/span&gt; buffers &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_169"&gt;can&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_170"&gt;be&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_171"&gt;thought&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_172"&gt;of&lt;/span&gt; as '&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_173"&gt;dark&lt;/span&gt; buffers', &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_174"&gt;analogous&lt;/span&gt; to '&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_175"&gt;dark&lt;/span&gt; matter' in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_176"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_177"&gt;universe&lt;/span&gt;; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_178"&gt;they&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_179"&gt;are&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_180"&gt;undetectable&lt;/span&gt; under &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_181"&gt;many&lt;/span&gt;/most &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_182"&gt;circumstances&lt;/span&gt;, and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_183"&gt;you&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_184"&gt;can&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_185"&gt;detect&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_186"&gt;them&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_187"&gt;only&lt;/span&gt; by &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_188"&gt;indirect&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_189"&gt;means.&lt;/span&gt;  Buffers do not &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_190"&gt;cause&lt;/span&gt; problems &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_191"&gt;when&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_192"&gt;they&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_193"&gt;are&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_194"&gt;empty.&lt;/span&gt;  But &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_195"&gt;when&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_196"&gt;they&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_197"&gt;fill&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_198"&gt;they&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_199"&gt;introduce&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_200"&gt;additional&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_201"&gt;latency&lt;/span&gt; (and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_202"&gt;create&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_203"&gt;other&lt;/span&gt; problems, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_204"&gt;possibly&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_205"&gt;very&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_206"&gt;severe&lt;/span&gt;) to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_207"&gt;other&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_208"&gt;traffic&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_209"&gt;sharing&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_210"&gt;the&lt;/span&gt; link."&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Given &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_211"&gt;the&lt;/span&gt; line speed and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_212"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_213"&gt;delay&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_214"&gt;we&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_215"&gt;can&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_216"&gt;calculate&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_217"&gt;the&lt;/span&gt; buffer &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_218"&gt;size&lt;/span&gt;&lt;br /&gt;(&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_219"&gt;this&lt;/span&gt; is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_220"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_221"&gt;bandwidth-delay&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_222"&gt;product&lt;/span&gt;).  Due to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_223"&gt;ADSL&lt;/span&gt; overhead &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_224"&gt;the&lt;/span&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_225"&gt;effective&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_226"&gt;bandwidth&lt;/span&gt; is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_227"&gt;actually&lt;/span&gt; 454 Kbit/s &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_228"&gt;of&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_229"&gt;the&lt;/span&gt; 512 Kbit/s line,&lt;br /&gt;and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_230"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_231"&gt;measured&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_232"&gt;delay&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_233"&gt;was&lt;/span&gt; 1138 ms.&lt;br /&gt;&lt;blockquote&gt;454 Kbit/s * 1138 ms = 64581 bytes&lt;/blockquote&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_234"&gt;This&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_235"&gt;corresponds&lt;/span&gt; to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_236"&gt;the&lt;/span&gt; TCP &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_237"&gt;window-size.&lt;/span&gt;  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_238"&gt;Thus&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_239"&gt;this&lt;/span&gt; is not &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_240"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_241"&gt;maximum&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_242"&gt;buffer-size&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_243"&gt;of&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_244"&gt;the&lt;/span&gt; modem. (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_245"&gt;Use&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_246"&gt;several&lt;/span&gt; TCP &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_247"&gt;connection&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_248"&gt;or&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_249"&gt;UDP&lt;/span&gt; to find &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_250"&gt;your&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_251"&gt;maximum&lt;/span&gt; ping &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_252"&gt;RTT&lt;/span&gt;, and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_253"&gt;calc&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_254"&gt;your&lt;/span&gt; buffer &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_255"&gt;size&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_256"&gt;Where&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_257"&gt;does&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_258"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_259"&gt;delay&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_260"&gt;come&lt;/span&gt; from?!&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_261"&gt;The&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_262"&gt;delay&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_263"&gt;consists&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_264"&gt;of&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_265"&gt;different&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_266"&gt;components&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_267"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_268"&gt;important&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_269"&gt;one&lt;/span&gt; in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_270"&gt;our&lt;/span&gt; case is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_271"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_272"&gt;transmission&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_273"&gt;delay&lt;/span&gt; (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_274"&gt;combined&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_275"&gt;with&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_276"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_277"&gt;packets&lt;/span&gt; in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_278"&gt;queue&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_279"&gt;The&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_280"&gt;transmission&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_281"&gt;delay&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_282"&gt;of&lt;/span&gt; a 1500 bytes (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_283"&gt;MTU&lt;/span&gt;) &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_284"&gt;packet&lt;/span&gt; is:&lt;br /&gt;&lt;blockquote&gt;1500 bytes / 454 Kbit/s = 26.34 ms&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_285"&gt;Thus&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_286"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_287"&gt;experienced&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_288"&gt;delay&lt;/span&gt; is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_289"&gt;the&lt;/span&gt; time it &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_290"&gt;takes&lt;/span&gt; to &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_291"&gt;empty&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_292"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_293"&gt;packets&lt;/span&gt; in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_294"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_295"&gt;queue&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_296"&gt;which&lt;/span&gt; is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_297"&gt;greatly&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_298"&gt;dependend&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_299"&gt;on&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_300"&gt;the&lt;/span&gt; line speed.&lt;br /&gt;&lt;blockquote&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_301"&gt;E.g.&lt;/span&gt; 64000 bytes / 454 Kbit/s = 1127 ms.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_302"&gt;With&lt;/span&gt; a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_303"&gt;RTT&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_304"&gt;delay&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_305"&gt;of&lt;/span&gt; 150 ms, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_306"&gt;your&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_307"&gt;interactive&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_308"&gt;SSH&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_309"&gt;connection&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_310"&gt;will&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_311"&gt;feel&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_312"&gt;sluggish.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;(A side note &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_313"&gt;on&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_314"&gt;ADSL&lt;/span&gt; is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_315"&gt;that&lt;/span&gt;; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_316"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_317"&gt;processing&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_318"&gt;delay&lt;/span&gt; in &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_319"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_320"&gt;ADSL&lt;/span&gt; modem &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_321"&gt;can&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_322"&gt;get&lt;/span&gt; as large as 60 ms, and is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_323"&gt;caused&lt;/span&gt; by &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_324"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_325"&gt;interleaving&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_326"&gt;depth&lt;/span&gt;, but &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_327"&gt;its&lt;/span&gt; "&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_328"&gt;fortunately&lt;/span&gt;" a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_329"&gt;constant&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_330"&gt;fixed&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_331"&gt;delay&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_332"&gt;on&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_333"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_334"&gt;path&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_335"&gt;Increasing&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_336"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_337"&gt;bandwidth&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_338"&gt;will&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_339"&gt;reduce&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_340"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_341"&gt;latency&lt;/span&gt;, but &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_342"&gt;its&lt;/span&gt; not &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_343"&gt;the&lt;/span&gt;&lt;br /&gt;solution.  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_344"&gt;Besides&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_345"&gt;ADSL&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_346"&gt;technology&lt;/span&gt; is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_347"&gt;often&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_348"&gt;limited&lt;/span&gt; to a 1024 Kbit/s&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_349"&gt;upstream&lt;/span&gt; link.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_350"&gt;The&lt;/span&gt; Point:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;"&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_351"&gt;ISPs&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_352"&gt;SHOULD&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_353"&gt;configure&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_354"&gt;the&lt;/span&gt; buffer &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_355"&gt;size&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_356"&gt;based&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_357"&gt;upon&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_358"&gt;the&lt;/span&gt; link &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_359"&gt;bandwidth&lt;/span&gt;"&lt;/span&gt;&lt;/blockquote&gt;&lt;br /&gt;I have a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_360"&gt;feeling&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_361"&gt;that&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_362"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_363"&gt;ISP&lt;/span&gt; just &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_364"&gt;configure&lt;/span&gt; a default &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_365"&gt;queue&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_366"&gt;size&lt;/span&gt;, and tune &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_367"&gt;the&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_368"&gt;queue&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_369"&gt;size&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_370"&gt;based&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_371"&gt;upon&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_372"&gt;max&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_373"&gt;throughput&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_374"&gt;on&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_375"&gt;their&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_376"&gt;largest&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_377"&gt;product.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_378"&gt;The&lt;/span&gt; line I did &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_379"&gt;my&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_380"&gt;measurements&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_381"&gt;on&lt;/span&gt;, I &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_382"&gt;could&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_383"&gt;see&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_384"&gt;delay&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_385"&gt;on&lt;/span&gt; 3.3 &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_386"&gt;sec&lt;/span&gt;, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_387"&gt;thus&lt;/span&gt;  a &lt;span style="font-weight: bold;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_388"&gt;buffer-bloat&lt;/span&gt;&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_389"&gt;size&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_390"&gt;of&lt;/span&gt; 187332 bytes (454 Kbit/s * 3300 ms), &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_391"&gt;or&lt;/span&gt; 125  &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_392"&gt;packets&lt;/span&gt; at 1500 bytes (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_393"&gt;MTU&lt;/span&gt;). &lt;span style="font-style: italic;"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_394"&gt;Simply&lt;/span&gt; crazy!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;For more &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_395"&gt;details&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_396"&gt;on&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_397"&gt;formulas&lt;/span&gt; and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_398"&gt;calculation&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_399"&gt;see&lt;/span&gt; &lt;a href="http://www.adsl-optimizer.dk/thesis/main_final_hyper.pdf"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_400"&gt;thesis&lt;/span&gt;&lt;/a&gt; page 19 to 27.&lt;br /&gt;&lt;br /&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_401"&gt;Links&lt;/span&gt;:&lt;br /&gt;&lt;a href="http://gettys.wordpress.com/2010/12/03/introducing-the-criminal-mastermind-bufferbloat/"&gt;[1] Jim &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_402"&gt;Getty&lt;/span&gt;s: &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_403"&gt;introducing-the-criminal-mastermind-bufferbloat&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://gettys.wordpress.com/2010/12/06/whose-house-is-of-glasse-must-not-throw-stones-at-another/"&gt;[2] Jim &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_404"&gt;Getty&lt;/span&gt;s: &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_405"&gt;whose-house-is-of-glasse-must-not-throw-stones-at-another&lt;/span&gt;&lt;br /&gt;&lt;/a&gt;&lt;a href="http://www.adsl-optimizer.dk/thesis/"&gt;[3] http://www.adsl-optimizer.dk/thesis/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.adsl-optimizer.dk/"&gt;[4] http://www.adsl-optimizer.dk/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Jim_Gettys"&gt;[5] http://en.wikipedia.org/wiki/Jim_Gettys&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5036371192078491568-8686522007644586602?l=netoptimizer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netoptimizer.blogspot.com/feeds/8686522007644586602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netoptimizer.blogspot.com/2010/12/buffer-bloat-calculations.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5036371192078491568/posts/default/8686522007644586602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5036371192078491568/posts/default/8686522007644586602'/><link rel='alternate' type='text/html' href='http://netoptimizer.blogspot.com/2010/12/buffer-bloat-calculations.html' title='Buffer Bloat: The calculations'/><author><name>NetOptimizer</name><uri>http://www.blogger.com/profile/15536846981722319158</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_1FTeRb8raZE/SypDQTqSRgI/AAAAAAAAAFA/ZAGkD34InU0/S220/davem_jdb_dont_use_windows.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5036371192078491568.post-8123334680361214371</id><published>2010-09-29T22:00:00.000+02:00</published><updated>2010-10-01T16:56:41.396+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tcpdump. libpcap'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='pcap'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='wireshark'/><title type='text'>tcpdump vs VLAN tags</title><content type='html'>In this post I will explain &lt;span style="font-weight: bold;"&gt;why&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; tcpdump sometimes doesn't show the VLAN&lt;/span&gt; (802.1q) tags, when dumping network traffic.&lt;br /&gt;&lt;br /&gt;The issue is related to libpcap and VLAN hardware acceleration in the Linux kernel.&lt;br /&gt;&lt;br /&gt;Patrick McHardy, fixed the kernel in version 2.6.27, and also fixed libpcap.&lt;br /&gt;His patches for libpcap has the subject:&lt;br /&gt;&lt;blockquote&gt;"libpcap: VLAN acceleration support".&lt;/blockquote&gt;Which got accepted, back in Aug 2008.&lt;br /&gt;&lt;br /&gt;So whats the problem?&lt;br /&gt;&lt;br /&gt;The problem is that tcpdumping VLAN IDs works under Ubuntu, but NOT under Debian.&lt;br /&gt;&lt;br /&gt;I'm running a new kernel 2.6.35 on the Debian machine (which has the support &gt;2.6.27).  So I downloaded the libpcap and tcpdump source and compiled it manually, &lt;span style="font-style: italic;"&gt;BUT it still didn't work&lt;/span&gt;!?! (even with the latest libpcap 1.1.1).&lt;br /&gt;&lt;blockquote&gt;This was strange!&lt;/blockquote&gt;Digging into the cause of the issue, I found that is related to an old include file on the Debian system.&lt;br /&gt;&lt;br /&gt;/&lt;span style="font-family:courier new;"&gt;usr/include/linux/if_packet.h&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This old header file, cause the libpcap configure command to disable the libpcap VLAN feature. When running configure for libpcap, look for:&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-family:courier new;"&gt;checking if tpacket_auxdata struct has tp_vlan_tci member... no&lt;/span&gt;"&lt;br /&gt;&lt;br /&gt;Remember &lt;span style="font-style: italic;"&gt;this issue related to all programs using libpcap&lt;/span&gt;, which also includes &lt;span style="font-style: italic;"&gt;Wireshark&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;I hope confused VLAN dump users, will find this blogpost...&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;b&gt;Update&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The binary tcpdump on Debian Squeeze actually works with hardware accelerated VLAN, although you have specify option '-e' to make it show the VLAN tags.&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;BUT here it gets really strange...&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;It will NOT work if you compile libpcap and tcpdump you self, on Debian Squeeze (GCC 4.4.5).&lt;/div&gt;&lt;div&gt;The header file if_packet.h contains the correct structs, but libpcap's configure command will refuse to enable the VLAN code, as the check (of if_packet.h) fails.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The problem this time is related to the compiler version.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;GCC 4.4 does not indirectly include the type of u_int, which the configure code choose to use for this test.  Thus, the if_packet check fails due to the error: ‘u_int’ undeclared, which it interpreted as no VLAN support.  Thus, the reason the binary works on Squeeze is that the maintainer has compiled it with an older version of GCC. Argh!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;When I find the time, I'll post some patches to the maintainer of libpcap.&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/5036371192078491568-8123334680361214371?l=netoptimizer.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://netoptimizer.blogspot.com/feeds/8123334680361214371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://netoptimizer.blogspot.com/2010/09/tcpdump-vs-vlan-tags.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5036371192078491568/posts/default/8123334680361214371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5036371192078491568/posts/default/8123334680361214371'/><link rel='alternate' type='text/html' href='http://netoptimizer.blogspot.com/2010/09/tcpdump-vs-vlan-tags.html' title='tcpdump vs VLAN tags'/><author><name>NetOptimizer</name><uri>http://www.blogger.com/profile/15536846981722319158</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://4.bp.blogspot.com/_1FTeRb8raZE/SypDQTqSRgI/AAAAAAAAAFA/ZAGkD34InU0/S220/davem_jdb_dont_use_windows.jpg'/></author><thr:total>4</thr:total></entry></feed>
