Skip to content

Musings of an Anonymous Geek

Made with only the finest 1's and 0's

Menu
  • About
  • Search Results
Menu

The Bandwidth Delay Product

Posted on January 8, 2009February 15, 2013 by bkjones

I’ve actually needed to perform this calculation in the past, but never knew it had a proper name! The value produced by this simple calculation will tell you how much of your network pipe you can actually fill at any given point in time. To figure this out, you need two values: the available bandwidth, and the latency (or delay) between the two communicating hosts.

In this example, I’ll figure out my BDP between my server in the basement, and this blog.

First, I’ll use ‘ping’ to figure out the “delay” value:

jonesy@canvas:~$ ping www.protocolostomy.com
PING www.protocolostomy.com (74.53.92.66) 56(84) bytes of data
64 bytes from web36.webfaction.com (74.53.92.66): icmp_seq=1 ttl=252 time=57.2 ms
64 bytes from web36.webfaction.com (74.53.92.66): icmp_seq=2 ttl=252 time=57.4 ms
64 bytes from web36.webfaction.com (74.53.92.66): icmp_seq=3 ttl=252 time=57.3 ms
64 bytes from web36.webfaction.com (74.53.92.66): icmp_seq=4 ttl=252 time=57.3 ms
64 bytes from web36.webfaction.com (74.53.92.66): icmp_seq=5 ttl=252 time=57.2 ms
64 bytes from web36.webfaction.com (74.53.92.66): icmp_seq=6 ttl=252 time=57.1 ms
64 bytes from web36.webfaction.com (74.53.92.66): icmp_seq=7 ttl=252 time=57.0 ms
64 bytes from web36.webfaction.com (74.53.92.66): icmp_seq=8 ttl=252 time=57.0 ms
64 bytes from web36.webfaction.com (74.53.92.66): icmp_seq=9 ttl=252 time=56.9 ms
64 bytes from web36.webfaction.com (74.53.92.66): icmp_seq=10 ttl=252 time=56.8 ms
64 bytes from web36.webfaction.com (74.53.92.66): icmp_seq=11 ttl=252 time=56.7 ms
64 bytes from web36.webfaction.com (74.53.92.66): icmp_seq=12 ttl=252 time=56.7 ms

This is a nice set of values, all hovering around 57ms. I’ll use 57 as my RTT. For my available bandwidth, I guess I could just use my ISPs advertised speed of 6Mbps upload and 3Mbps download. Let’s see what my BDP looks like in that scenario.

(6,000,000 b/s * 0.57s)  = ~342kb/s

(342 kb/s) / 8 = 42KiB/s

So, if there were no other components involved, I could potentially move 42 kilobytes per second across my connection. However, there are other components involved, most notably the send and receive buffers in the Linux kernel. In kernels prior to 2.6.7, these buffers were really configured by default to strike a balance between good performance for local network connections and low system overhead (e.g. CPU and memory used to process connections and packets). They were not optimized for moving large data sets over long-haul paths. However, more recent kernels now automatically tune the values so that you should receive excellent performance in machines with over 1GB RAM and a BDP of under 4MB. I only just learned that this is the case – I had been searching around for my notes from 2001 about echoing values into files under /proc/sys/net, and using the sysctl variables…. no more!

If you want to see if your system has autotuning enabled, check to see if /proc/sys/net/ipv4/tcp_moderate_rcvbuf is set to “1”, by cat’ing the file. The corresponding ‘sndbuf’ file is essentially irrelevant since sender-side autotuning has been enabled since the early 2.4 kernels.

Of course, I don’t actually see this kind of performance. This was a quick and dirty test using the worst possible tool for the job: scp. Tools like ssh and scp add lots and lots of overhead at various levels due to protocol overhead and (especially) encryption. So given that, my performance really isn’t bad. I’ll see how high I can get it and post my results next week, just for giggles. 🙂

Share this:

  • Click to share on Twitter (Opens in new window)
  • Click to share on Reddit (Opens in new window)
  • Click to share on Tumblr (Opens in new window)
  • Click to share on Facebook (Opens in new window)

Contact Me

You should follow me on Twitter

Recent Posts

  • User Activation With Django and Djoser
  • Python Selenium Webdriver Notes
  • On Keeping A Journal and Journaling
  • What Geeks Could Learn From Working In Restaurants
  • What I’ve Been Up To
  • PyCon Talk Proposals: All You Need to Know And More
  • Sending Alerts With Graphite Graphs From Nagios
  • The Python User Group in Princeton (PUG-IP): 6 months in
  • The Happy Idiot
  • pyrabbit Makes Testing and Managing RabbitMQ Easy

Categories

  • Apple
  • Big Ideas
  • Books
  • CodeKata
  • Database
  • Django
  • Freelancing
  • Hacks
  • journaling
  • Leadership
  • Linux
  • LinuxLaboratory
  • Loghetti
  • Me stuff
  • Other Cool Blogs
  • PHP
  • Productivity
  • Python
  • PyTPMOTW
  • Ruby
  • Scripting
  • Sysadmin
  • Technology
  • Testing
  • Uncategorized
  • Web Services
  • Woodworking

Archives

  • May 2021
  • December 2020
  • January 2014
  • September 2012
  • August 2012
  • February 2012
  • November 2011
  • October 2011
  • June 2011
  • April 2011
  • February 2011
  • January 2011
  • December 2010
  • November 2010
  • September 2010
  • July 2010
  • June 2010
  • May 2010
  • April 2010
  • March 2010
  • February 2010
  • January 2010
  • December 2009
  • November 2009
  • October 2009
  • September 2009
  • August 2009
  • July 2009
  • June 2009
  • May 2009
  • April 2009
  • March 2009
  • February 2009
  • January 2009
  • December 2008
  • November 2008
  • October 2008
  • September 2008
  • August 2008
  • July 2008
  • June 2008
  • May 2008
  • April 2008
  • March 2008
  • February 2008
  • January 2008
  • December 2007
  • November 2007
  • October 2007
  • September 2007
  • August 2007
  • July 2007
  • June 2007
  • May 2007
  • April 2007
  • March 2007
  • February 2007
  • January 2007
  • December 2006
  • November 2006
  • September 2006
  • August 2006
  • July 2006
  • June 2006
  • April 2006
  • March 2006
  • February 2006
  • January 2006
  • December 2005
  • November 2005
  • October 2005
  • September 2005
  • August 2005
  • July 2005
  • June 2005
  • May 2005
  • April 2005
  • March 2005
  • February 2005
  • January 2005
  • December 2004
  • November 2004
  • October 2004
  • September 2004
  • August 2004
© 2023 Musings of an Anonymous Geek | Powered by Minimalist Blog WordPress Theme