Friday, December 28, 2018

responding to a purged thread on bandwidth

A thread on bandwidth usage was deleted by a mod. I had written out all of this, but before I could finish typing it and submit it, the thread was locked. I felt others here might get some value out of it, so i'm starting a new post with my response as the other thread is locked.

This was the original thread: https://www.reddit.com/r/networking/comments/aaapzi/how_much_reserve_bandwidth_for_videoconferencing/

I'm currently using a curved formula for estimating per-user internet connectivity average bandwidth requirements.

  • y= 0.0001x2 + 1.4x + 30

https://i.imgur.com/kdQmmom.png

Users = 10, bandwidth ~= 44Mbps ~= 4Mbps/user Users = 100, bandwidth ~= 171Mbps ~= 1.7Mbps/user Users = 500, bandwidth ~= 755Mbps ~= 1.52Mbps/user Users = 1000, bandwidth ~=1530Mbps ~= 1.51Mbps/user Users = 5000, bandwidth ~=9530Mbps ~= 1.91Mbps/user Users = 10000, bandwidth ~= 24030Mbps ~= 2.4Mbps/user 

Explanation of my values:

1.4x: This is a basic Mbps per user estimate for concurrent usage. 1.4Mbps is higher than you probably need, but my formula is based around my network's observed usage and includes more than just VC and streaming.

0.0001x2: This represents the "network effect" of multiple users all having the software installed, whether they are using it or not. i've estimated 10Kbps of network traffic per user, per user, for various "chatty" things like wireless printers or bonjour bullshit. at 100 users, this is negligible. at 1000 users it starts to have an effect, totaling about 100Mbps network wide. at 10,000 users, network-wide "background chatter" is a considerable portion of overall network throughput. certainly not a majority, but a consideration.

In my environment, all users' machines are more-or-less talking to all-users machines, so it might make more sense for you to adjust this portion of the formla to:

0.0001x * min(x,254), because it's unlikely in most networks for any end-user machine to be trying to talk to more than 254 devices (subnet size, or devices at an individual site, or whatever).

30: This simply baselines the network circuit at 30Mbps.

1 users? 31Mbps per user. 2 users? 16Mbps per user. 3 users? 11Mbps per user. 4 users? 9Mbps per user. 5 users? 7Mbps per user.

However, with 5 users and 7Mbps per user, realistically, 3 users are working on word documents, 1 user is watching youtube (3Mbps) and 1 user is downloading a torrent from TPB (35Mbps).

So, I throw 30 in there as a basic buffer against people sizing circuits for "only a small branch office with 10 users, they only need 15Mbps, right? "

I would suggest for typical usage this formula:

  • $A = percentage of active users. (ex. 100 users, 15 max active, $A = 0.15)
  • $B = max theoretical bandwidth of single active user (say Netflix @ 4Mbps + video conf @ 8Mbps, $B = 12Mbps)
  • $C = bandwidth floor AKA peak download minimum (the smallest circuit you would want, or, the speed you need a single download to operate at. say 25Mbps? 50? 100? I use 30)
  • $D = amount of bandwidth of "chatty" applications. I'm looking at you, bonjour. if you have 3 devices and you measure 400kbps of chatter total, average, then there are 3 device-to-device paths, so $D = 400/3 = 133Kbps = 0.133Mbps. If you have 50 devices and you measure 5Mbps of chatter total, average, then there are [N*N-1]/2 = 1,225 device-to-device pairs, so 5Mbps/1225 = 4Kbps = 0.0004, so $D = 0.0004. I use 0.0001.
  • $E = number of devices that could possibly talk to eachother per site. If you have 100,000,000 users, you don't have 1 site. This is the number of devices that could possibly talk to eachother directly, through unicast. if you have 5000 users at a site, enter 5k. if you have 50 users at a site, enter 50.
  • y = $D * X * min( X , $E) + $A * $B * X + $C

So, for example:

if you have 20% active users at any given time (no more than 1/5 of your employees are actually "using" the bandwidth at the same point in time), 1 user maxes out at 7Mbps of video conferencing data usage, you never install less than 50Mbps per site, you observe 6Kbps per-user-per-user of "chatty" other bullshit traffic, your sites are limited to 1000 people, then you get this:

  • A = 0.2
  • B = 7
  • C = 50
  • D = 0.0006
  • E = 1000
  • Formula = y = $D * x * min( x , $E) + $A * $B * x + $C
  • substituted = Y = 0.0006 * x * min( X , 1000) + 0.2 * 7 * x+ 50
  • simplified = Y = 0.0006x * min( X , 1000) + 1.4x + 50

ok, so we get this formula based on those example constraints:

Bandwidth needed = 0.0006x * min( X , 1000) + 1.4x + 50, where X is the number of users at a site.

That looks like this:

https://i.imgur.com/YM4Tidt.png

Users = 1, bandwidth ~= 51Mbps ~= 51Mbps/user Users = 10, bandwidth ~= 64Mbps ~= 6.4Mbps/user Users = 100, bandwidth ~= 196Mbps ~= 2Mbps/user Users = 1000, bandwidth ~=2050Mbps ~= 2.05Mbps/user Users = 5000, bandwidth ~= 10Gbps ~= 2Mbps/user 


No comments:

Post a Comment