House - Dynamic Bandwidth Throttling in a Client Server ...


Published on

  • Be the first to comment

  • Be the first to like this

No Downloads
Total views
On SlideShare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide
  • Gamer needs to be a server We need a lot of bandwidth Early during Shadowrun, design wanted guarentee that they could do 16 players and really wanted to do more Not able to guarentee Design was not done, not sure what would require updating and how often Reality is that we always need to be smart about how we update
  • Home environment is hostile Machines can move
  • How do we adjust bandwidth? How do we adjust game state replication? When/why do we migrate? How we ensure hosts / how do we pick?
  • Connection Control Global Control History Control
  • Goal set by Global Control UDP Padding
  • Packet Loss Subsequent Acks Timeouts Counters to filter out spurious
  • Global Control Divide bandwidth among connections Grow till exceed and then backoff Ability to look at behavior across connections
  • More then 50% in recovery Single bad connection does not cause signal Could prohibit growth, but we account for that
  • Even distribution for the most part Some need extra due to voice Bandwidth might be limited for bad connections
  • Bad connection Counter accumulates every period with congestion Decrements every period without Thresh means its bad – in dog house Can recover Bandwidth limited No longer restricts growth
  • History Control Continuity Over Time Grow while able to deliver Back down if fail Measurements occur during periods
  • Period starts when goal is set Period canceled if goal is changed Ends when goal is met for some time Success if no recoveries - recorded Unknown if some recovers – no recorded Failure if too many recoveries - recorded
  • All success and failures recorded Circular buffer Holds hours of play From history can calculate reliable percentage / failure percentage
  • Reliable Bandwidth == ReliablePercentage >= 95%
  • Reliable bandwidth used as goal No history get conservative value Step up bandwidth will be tried
  • FailurePercentage less then or equal to 5% Consecutive successes after first step up will continue to step up Failure will cause it to fall back to lower bandwidth
  • After failure, many successes needed to try again 1 in 20 ratio picked – 2 hours of play
  • Good connection, Open Nat, Good Ping Default used Success Recorded Step up tried Success Recorded
  • Step up again will continue Till failure Connections will hit RTT thresholds Latency spike across all connections Some lag in game will occur All connections in recovery
  • Global control will notice majority recoveries causing recovery This will happen multiple times This will lead to failure Another step up will not occur for 20 periods
  • Hiccup will be filtered at either connection of global level Sustained problem will be recorded If continues will trash history Player no longer reliable and will essentially be removed from pool
  • Reliable bandwidth primary consideration Best reflects player/box ability to cope Must be able to meet game needs If best can’t be found, considers other possibilities in bands
  • Pool built from criteria Tie breakers applied Ping, Nat Type, Host reliability
  • Importance of type Time of last Client importance
  • Updates sent based on priority Time intensive task Both dev wise and runtime Requires iteration / tweaking / gameplay Critical for polish
  • Host migration Big debate for Shadowrun Halo 2 approach appears to encourage bad behavior Went with host initiated migration only – removing ability / incentive
  • Searches by good hosts put themselves into games without good hosts
  • Home sucks History identifies good hosts Design for consistency instead of rapid global adjustment Consistent good hosts picked / rewarded
  • Quick to respond to changing conditions Bad hosts eliminated relative quickly Games likely to disband anyway
  • Beta – good results Good hosts found time and time again when reset Bad hosts culled quickly
  • House - Dynamic Bandwidth Throttling in a Client Server ...

    1. 2. Dynamic Bandwidth Throttling Bart House, Development Lead, Microsoft
    2. 3. The Problem <ul><li>Client / Server games require server </li></ul><ul><li>Server uses high outbound bandwidth </li></ul><ul><ul><li>Bandwidth to update N clients at 30Hz </li></ul></ul><ul><ul><ul><li>Bandwidth = N * N * per-client-update * 30 </li></ul></ul></ul><ul><ul><ul><li>Bandwidth for 15 clients with just 5 byte update Bandwidth = 15 * 15 * 40 * 30 = 270kbps </li></ul></ul></ul><ul><ul><li>Average home connection <300kbps </li></ul></ul><ul><ul><li>We never have enough bandwidth </li></ul></ul><ul><ul><li>Can not update ideally for large games </li></ul></ul>
    3. 4. The Problem (cont.) <ul><li>Home machine is in a hostile environment </li></ul><ul><ul><li>Many devices compete for bandwidth </li></ul></ul><ul><ul><ul><li>Voice over IP can quickly saturate bandwidth </li></ul></ul></ul><ul><ul><ul><li>High bandwidth browsing and downloading </li></ul></ul></ul><ul><ul><ul><ul><li>WoW patches, P2P downloads, etc… </li></ul></ul></ul></ul><ul><ul><ul><li>And the problem will only get worse </li></ul></ul></ul><ul><ul><ul><ul><li>MP3 players downloading in the background wirelessly </li></ul></ul></ul></ul><ul><ul><li>Many Xboxes are connected wirelessly </li></ul></ul><ul><li>Home machine can move </li></ul><ul><ul><li>Team LAN parties </li></ul></ul>
    4. 5. Questions we will answer <ul><li>How do we adjust bandwidth utilization to match bandwidth availability? </li></ul><ul><ul><li>This is the bulk of the talk </li></ul></ul><ul><li>As available bandwidth changes, how do we adjust game state replication? </li></ul><ul><li>What do we do when a machine can no longer host? </li></ul><ul><li>When matchmaking, how do we ensure someone can host the game? </li></ul>
    5. 6. Adjusting Bandwidth <ul><li>Adjusting is done at three different levels </li></ul><ul><ul><li>Connection Control </li></ul></ul><ul><ul><ul><li>Server to client connection </li></ul></ul></ul><ul><ul><ul><li>Takes care of rapid adjustments due to client specific problems </li></ul></ul></ul><ul><ul><li>Global Control </li></ul></ul><ul><ul><ul><li>Server adjusts all client connections simultaneously </li></ul></ul></ul><ul><ul><ul><li>Adjustments for problems across multiple clients </li></ul></ul></ul><ul><ul><ul><ul><li>Problems most likely due to local bottleneck </li></ul></ul></ul></ul><ul><ul><li>History Control </li></ul></ul><ul><ul><ul><li>Server adjust overall bandwidth target as conditions change and evidence builds </li></ul></ul></ul><ul><ul><ul><li>Provides continuity during a game </li></ul></ul></ul><ul><ul><ul><li>Allows for growth and adjustment over course of multiple games </li></ul></ul></ul><ul><ul><ul><li>Provides basis for estimating future performance </li></ul></ul></ul>
    6. 7. Connection Control <ul><li>Bandwidth between two sever and client </li></ul><ul><li>Try to reach and maintain goal bandwidth </li></ul><ul><ul><li>Goal bandwidth is set by Global Control </li></ul></ul><ul><li>All traffic is UDP based </li></ul><ul><ul><li>Reliable messaging built on top </li></ul></ul><ul><ul><li>Not part of talk today </li></ul></ul><ul><li>Bandwidth is always used </li></ul><ul><ul><li>Packets are handed up to game to fill </li></ul></ul><ul><ul><li>Unused packet space is padded </li></ul></ul><ul><ul><li>Ensures bandwidth is available when needed </li></ul></ul>
    7. 8. Congestion Control <ul><li>When congestion is detected </li></ul><ul><ul><li>Reduce current bandwidth </li></ul></ul><ul><ul><li>When congestion has cleared, increase current bandwidth over time until goal is reached </li></ul></ul><ul><ul><li>Maintain bandwidth at goal </li></ul></ul><ul><li>Two signals for congestion control </li></ul><ul><ul><li>Increase in measured RTT </li></ul></ul><ul><ul><li>Packet loss due to timeout or subsequent acknowledgements </li></ul></ul>
    8. 9. Congestion Control States <ul><li>Maintain State </li></ul><ul><ul><li>Remain in this state if goal is reached </li></ul></ul><ul><ul><li>Transition to Growth if able to maintain current bandwidth for some period of time </li></ul></ul><ul><li>Recovery State </li></ul><ul><ul><li>Entered when congestion is detected </li></ul></ul><ul><ul><li>Transition to Maintain when able to achieve current bandwidth and when RTT has stabilized </li></ul></ul>
    9. 10. Congestion Control States <ul><li>Growth State </li></ul><ul><ul><li>Growth rate established when target was set </li></ul></ul><ul><ul><ul><li>Allows for rapidly growing connections when appropriate </li></ul></ul></ul><ul><ul><li>Growth is stopped when congestion is detected </li></ul></ul><ul><ul><ul><li>Recovery state is entered </li></ul></ul></ul><ul><ul><li>Growth is stopped if measured throughput fails to come close to current bandwidth </li></ul></ul><ul><ul><ul><li>Maintain state is entered </li></ul></ul></ul><ul><ul><li>Growth occurs in steps </li></ul></ul><ul><ul><ul><li>Next step taken when measured throughput comes close enough to current bandwidth </li></ul></ul></ul><ul><ul><li>RTT threshold used for congestion warning signal </li></ul></ul><ul><ul><ul><li>Established when state is entered </li></ul></ul></ul><ul><ul><ul><li>Adjusted as packet sizes increase </li></ul></ul></ul>
    10. 11. RTT <ul><li>Primary congestion control signal </li></ul><ul><li>To calculate RTT </li></ul><ul><ul><li>Timestamp in every packet </li></ul></ul><ul><ul><ul><li>Allowed us to see changes in RTT more quickly </li></ul></ul></ul><ul><ul><li>Used low pass filter to calculate smooth RTT </li></ul></ul><ul><li>Baseline RTT established in Maintain state </li></ul><ul><li>Significant deviation from baseline used a signal of congestion </li></ul>
    11. 12. Packet-loss <ul><li>Two types of packet-loss </li></ul><ul><ul><li>Loss due to subsequent acknowledgement </li></ul></ul><ul><ul><ul><li>If we get multiple subsequent acknowledgements we take this as an indication of a packet loss </li></ul></ul></ul><ul><ul><li>Loss due to timeout </li></ul></ul><ul><ul><ul><li>Packet failed to be acknowledged after some period of time </li></ul></ul></ul><ul><ul><ul><li>Timeout calculated from filtered RTT </li></ul></ul></ul><ul><li>Only causes a congestion control signal if multiple events encountered over an interval of time </li></ul><ul><ul><li>Spurious packet loss does not trigger control signal </li></ul></ul>
    12. 13. Global Control <ul><li>The server keeps a current goal bandwidth which is divided among all client connections </li></ul><ul><li>Attempt to reach goal by growing bandwidth backing off when bandwidth is exceeded </li></ul><ul><li>Ability to look at behavior across multiple connections allows detection of bad connections </li></ul>
    13. 14. Global Control States <ul><li>Recovery State </li></ul><ul><ul><li>Entered when bandwidth is exceeded </li></ul></ul><ul><ul><li>Slow Adjustment is entered when fully recovered </li></ul></ul><ul><li>Rapid Growth State </li></ul><ul><ul><li>Quick adjustments are made until bandwidth is exceeded or goal is encountered </li></ul></ul><ul><li>Slow Adjustment State </li></ul><ul><ul><li>Small incremental growth until bandwidth is exceeded or goal is reached </li></ul></ul><ul><li>Goal Reached State </li></ul><ul><ul><li>Goal bandwidth is maintained until bandwidth is exceeded </li></ul></ul>
    14. 15. Global Recovery State <ul><li>Continue to reduce current global bandwidth as long as bandwidth is being exceeded </li></ul><ul><li>Reduction occurs at regular interval </li></ul><ul><li>Percentage reduction applied until some minimum </li></ul><ul><li>Current bandwidth is reduced immediately when state is entered </li></ul><ul><ul><li>Amount of reduction is less when entered from rapid growth </li></ul></ul>
    15. 16. Global Slow/Rapid Growth <ul><li>Grow bandwidth in steps </li></ul><ul><li>Each step is a small/large percentage of current global bandwidth </li></ul><ul><li>Next step taken when global bandwidth is measured and maintained over a period of time </li></ul><ul><li>Growth continues until bandwidth is exceeded or goal is reached </li></ul>
    16. 17. Detecting Bandwidth Overuse <ul><li>If over 50% of the connections are in there recovery control state we assume that the bandwidth is exceeded </li></ul><ul><li>Single bad connection can affect global control </li></ul><ul><ul><li>Will not cause bandwidth exceeded signal </li></ul></ul><ul><ul><li>But can prohibit growth of bandwidth due to failure to deliver its share of throughput </li></ul></ul>
    17. 18. Dividing Bandwidth <ul><li>Even bandwidth distribution among client connections </li></ul><ul><li>Extra bandwidth given based on need </li></ul><ul><ul><li>Some clients act as voice repeaters and thus require additional bandwidth </li></ul></ul><ul><li>Bandwidth might be limited for bad connections </li></ul>
    18. 19. Bad Connections <ul><li>Any connection that accumulates congestion signals over time is eventually marked as bad </li></ul><ul><ul><li>We keep a counter that accumulates for every period that experienced a congestion period and decrements for every period that did not </li></ul></ul><ul><li>Bandwidth to that connection is limited </li></ul><ul><li>It’s throughput is no longer taken into consideration when determining whether goal bandwidth is met </li></ul><ul><ul><li>All traffic sent is added to total throughput since we can’t rely on acknowledgements from connection </li></ul></ul>
    19. 20. History Control <ul><li>Global bandwidth is adjusted over time </li></ul><ul><li>Global goal bandwidth </li></ul><ul><ul><li>Adjusted up linearly </li></ul></ul><ul><ul><ul><li>If the host is able to consistently maintain it </li></ul></ul></ul><ul><ul><li>Adjusted down exponentially </li></ul></ul><ul><ul><ul><li>If the host fails to maintain it </li></ul></ul></ul><ul><li>Bandwidth History Period </li></ul><ul><ul><li>Global goal held constant </li></ul></ul><ul><ul><li>Periods used as quantum of measurement </li></ul></ul>
    20. 21. Bandwidth History Periods <ul><li>Starts when a global goal bandwidth is set </li></ul><ul><li>Period ends when: </li></ul><ul><ul><li>Goal changes and the period is canceled </li></ul></ul><ul><ul><ul><li>For instance due to a client leaving </li></ul></ul></ul><ul><ul><li>Goal reached and held for a period of time </li></ul></ul><ul><ul><ul><li>No global control recoveries occurred </li></ul></ul></ul><ul><ul><ul><ul><li>Period is considered successful </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Successful result recorded with goal bandwidth </li></ul></ul></ul></ul><ul><ul><ul><li>Some global control recoveries occurred </li></ul></ul></ul><ul><ul><ul><ul><li>Period is neither successful or failed </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Nothing is recorded </li></ul></ul></ul></ul><ul><ul><li>Failure occurs </li></ul></ul><ul><ul><ul><li>Goal not reached given sufficient time </li></ul></ul></ul><ul><ul><ul><li>Multiple global control recoveries occurred </li></ul></ul></ul>
    21. 22. Bandwidth History <ul><li>Successful/failed periods are recorded </li></ul><ul><li>Recorded in circular buffer </li></ul><ul><ul><li>Large enough to hold many hours of play </li></ul></ul><ul><li>Stored using per-user live storage </li></ul><ul><ul><li>History is tied both to box and the player </li></ul></ul><ul><li>From the history, we can calculate: </li></ul><ul><ul><li>Reliability percentage for some bandwidth </li></ul></ul><ul><ul><li>Failure percentage given some bandwidth </li></ul></ul>
    22. 23. Reliability Percentage <ul><li>Give some bandwidth X, how reliable has this machine been at delivering that bandwidth </li></ul><ul><ul><li>Success(X) / (Success(X) + Failure(X))*100 </li></ul></ul><ul><ul><ul><li>Success(X) is the number of successful periods at or above bandwidth X </li></ul></ul></ul><ul><ul><ul><li>Where Failure(X) is the number of failed periods at or below bandwidth X </li></ul></ul></ul>
    23. 24. Failure Percentage <ul><li>Given some bandwidth X, how often have we failed to deliver that bandwidth </li></ul><ul><ul><li>Failure(X) / (TotalSuccess + Failure(X))*100 </li></ul></ul><ul><ul><ul><li>Where TotalSuccess is the total number of successful periods regardless of bandwidth </li></ul></ul></ul>
    24. 25. Reliable Bandwidth <ul><li>Greatest bandwidth X such that ReliabilityPercentage(X) >= 95% </li></ul><ul><li>Stated another way </li></ul><ul><ul><li>What bandwidth should we pick to ensure that we will only get a 1 in 20 chance of having a failure to maintain that bandwidth </li></ul></ul><ul><li>We want to ensure overall consistency in game play </li></ul>
    25. 26. Use of Reliable Bandwidth <ul><li>Almost always used as global goal </li></ul><ul><li>Two exceptions </li></ul><ul><ul><li>When no history is present </li></ul></ul><ul><ul><ul><li>Conservative estimate is used </li></ul></ul></ul><ul><ul><ul><li>Enough to be considered when picking host </li></ul></ul></ul><ul><ul><ul><li>But not too much </li></ul></ul></ul><ul><ul><ul><li>Below average home connection speed </li></ul></ul></ul><ul><ul><ul><li>Reduce chance of poor game play at game start </li></ul></ul></ul>
    26. 27. Trying Higher Bandwidth <ul><li>Only consider one step higher </li></ul><ul><ul><li>A bandwidth that is one step higher then our reliable bandwidth </li></ul></ul><ul><li>Will use this higher bandwidth if: </li></ul><ul><ul><li>FailurePercentage(X) <= 5% </li></ul></ul><ul><li>Success or failure will be recorded </li></ul><ul><li>Logic runs again </li></ul>
    27. 28. Trying Higher Bandwidths <ul><li>Consider this case </li></ul><ul><ul><li>Recent failure at 320kbps (stepped up) </li></ul></ul><ul><ul><li>Connection speed at 300kbps </li></ul></ul><ul><ul><li>ReliableBandwidth at 300kbps </li></ul></ul><ul><ul><li>FailurePercentage(320) > 5% </li></ul></ul><ul><li>What happens </li></ul><ul><ul><li>300kbps will be used repeatedly </li></ul></ul><ul><ul><li>Each success slowly reduces FailurePercentage(320) </li></ul></ul><ul><ul><li>Eventuall, FailurePercentage(320) <= 5% </li></ul></ul><ul><ul><li>320kbps will be tried </li></ul></ul><ul><ul><li>Failure will be record </li></ul></ul><ul><ul><li>This will repeat trying 320 once in every 2 hours </li></ul></ul>
    28. 29. Bandwidth Control In Action <ul><li>Lets consider some typical scenarios </li></ul><ul><ul><li>No history but good connection </li></ul></ul><ul><ul><li>No history but bad bandwidth </li></ul></ul><ul><ul><li>Good history but temporary problem </li></ul></ul>
    29. 30. No History Good Connection <ul><li>A client with no history will default to assuming a reasonable reliable bandwidth </li></ul><ul><ul><li>Assumption is enough to host a moderate size game </li></ul></ul><ul><ul><li>If host has good pings to other clients and open NAT, it is likely they will be picked to serve </li></ul></ul><ul><li>Global Goal Bandwidth will use default </li></ul><ul><ul><li>Default is conservative </li></ul></ul><ul><ul><li>Below average home connection </li></ul></ul><ul><ul><li>Goal will be achievable > 50% of the time </li></ul></ul><ul><ul><li>Bandwidth period will be recorded as a success </li></ul></ul><ul><ul><li>Next bandwidth step will immediately be tried </li></ul></ul><ul><ul><ul><li>FailurePercentage(x) is always 0% until a failure </li></ul></ul></ul>
    30. 31. No History Good Connection <ul><li>Cont. </li></ul><ul><ul><li>Higher bandwidth will likely succeed </li></ul></ul><ul><ul><li>Another success recorded </li></ul></ul><ul><ul><li>Higher and higher bandwidths will be tried </li></ul></ul><ul><ul><li>Eventually bandwidth will approach actual </li></ul></ul><ul><ul><li>Latency spike on all connections will occur </li></ul></ul><ul><ul><li>RTT congestion signal will trigger </li></ul></ul><ul><ul><li>Connection control recovery state entered across all connections </li></ul></ul>
    31. 32. No History Good Connection <ul><li>Cont. </li></ul><ul><ul><li>Majority congestion problems </li></ul></ul><ul><ul><ul><li>Global recovery state will be entered </li></ul></ul></ul><ul><ul><li>After recovery </li></ul></ul><ul><ul><ul><li>Slow growth will then be follwed by another recovery </li></ul></ul></ul><ul><ul><li>Multiple recoveries will cause period failure </li></ul></ul><ul><ul><li>Reported failure will stop increases </li></ul></ul><ul><ul><li>Another step up will not occur for a while </li></ul></ul><ul><ul><li>Bandwidth usage stabilizes just below actual bandwidth </li></ul></ul>
    32. 33. No History Bad Bandwidth <ul><li>Initial guess is too high </li></ul><ul><li>Congestion will be seen immediately </li></ul><ul><li>First period will be reported as a failure </li></ul><ul><li>Step down bandwidth is tried next </li></ul><ul><li>If this fails, step downs are increased exponentially </li></ul><ul><li>Eventually bandwidth will be set below actual bandwidth </li></ul><ul><li>Bandwidth will stabilize here </li></ul>
    33. 34. Good History Hiccups Occur <ul><li>Bandwidth is stable below actual bandwidth </li></ul><ul><li>Something happens </li></ul><ul><ul><li>Available bandwidth is lowered </li></ul></ul><ul><li>If it occurs very briefly </li></ul><ul><ul><li>Connections will briefly experience congestion </li></ul></ul><ul><ul><li>Bandwidth across all connections will be dropped </li></ul></ul><ul><ul><li>Single global recovery will occur </li></ul></ul><ul><ul><li>Period will not fail </li></ul></ul><ul><li>If it occurs over a sustained period of time </li></ul><ul><ul><li>Failure will be recorded </li></ul></ul><ul><ul><li>Reduced bandwidth used next </li></ul></ul><ul><ul><li>Reductions will continue </li></ul></ul><ul><ul><li>RelaibleBandwidth is significantly reduced </li></ul></ul><ul><ul><li>This is what we want </li></ul></ul>
    34. 35. Picking Best Host <ul><li>Reliable bandwidth is primary factor </li></ul><ul><li>Reflects ability of that box under that players control to reliable deliver (at least 95% of the time) bandwidth </li></ul><ul><li>Basing the estimate on a long history captures the ability of the player and box to survive in the hostile home environment </li></ul>
    35. 36. Picking Best Host (cont.) <ul><li>We build a pool of hosts from those that have a reliable bandwidth large enough for current game size </li></ul><ul><li>From this host pool we use other criteria as tie breakers </li></ul><ul><ul><li>Ping times to other players </li></ul></ul><ul><ul><li>Nat type (open preferred over moderate) </li></ul></ul><ul><ul><li>Percentage of games left gracefully </li></ul></ul><ul><ul><ul><li>Graceful exits are those that the game has a chance to remove the player from the game before the box is turned off or the network cable is unplugged </li></ul></ul></ul>
    36. 37. Game State Replication <ul><li>Game state </li></ul><ul><ul><li>Player positions </li></ul></ul><ul><ul><li>Weapon damage </li></ul></ul><ul><ul><li>Object positions in world </li></ul></ul><ul><ul><li>Weapon in hand </li></ul></ul><ul><ul><li>Player health </li></ul></ul><ul><ul><li>Object damage </li></ul></ul><ul><li>As bandwidth between the server and a client changes, the game must react appropriately to the changing conditions </li></ul>
    37. 38. Priority Based Replication <ul><li>Updates are assigned a priority based on: </li></ul><ul><ul><li>Importance of update </li></ul></ul><ul><ul><ul><li>Player position more important then player health </li></ul></ul></ul><ul><ul><li>Time of last update </li></ul></ul><ul><ul><ul><li>The longer since last update, the higher the priority </li></ul></ul></ul><ul><ul><li>Client importance </li></ul></ul><ul><ul><ul><li>Can the players on that client see/hear what is being updated </li></ul></ul></ul>
    38. 39. Priority Based Replication <ul><li>Updates are then sent based on priority </li></ul><ul><li>Time intensive task to get priority scheme right </li></ul><ul><ul><li>Must play, take traces and decide whether the right decisions are being made by priority system when under load </li></ul></ul><ul><ul><li>This hand tuning is critical to get the best polish for the game </li></ul></ul>
    39. 40. Host Migration <ul><li>Host migration is moving the hosting responsibilities from one box to another box </li></ul><ul><li>Shadowrun only supports host initiated migration </li></ul><ul><ul><li>Eliminates the potential for exploitation </li></ul></ul><ul><ul><li>Halo2’s host election process had unintended consequences </li></ul></ul><ul><ul><ul><li>Encouraged griefing </li></ul></ul></ul>
    40. 41. Host Migration <ul><li>Host is migrated when: </li></ul><ul><ul><li>Host chooses to leave </li></ul></ul><ul><ul><ul><li>Game will end, hosting is migrated and host is then removed from game </li></ul></ul></ul><ul><ul><li>Current host is no longer best </li></ul></ul><ul><ul><ul><li>Host changed between games </li></ul></ul></ul><ul><ul><ul><li>Consistent gameplay for duration of game </li></ul></ul></ul><ul><ul><ul><li>Between rounds would perhaps have been better </li></ul></ul></ul><ul><ul><li>Game is prematurely stopped </li></ul></ul><ul><ul><ul><li>Host bandwidth no longer supports game size </li></ul></ul></ul>
    41. 42. Matchmaking <ul><li>Good hosts </li></ul><ul><ul><li>Good bandwidth </li></ul></ul><ul><ul><li>Open Nat </li></ul></ul><ul><ul><li>High Hosting Reliability </li></ul></ul><ul><li>Good hosts will favor games without </li></ul><ul><ul><li>Will try to join a game that needs good host before trying to join one that does not </li></ul></ul><ul><ul><li>But will only do so if game is a good match </li></ul></ul>
    42. 43. Putting It All Together <ul><li>Home is a hard place to serve from </li></ul><ul><li>History attempts to identify players who can manage it well </li></ul><ul><li>Design focuses on consistency </li></ul><ul><ul><li>Global bandwidth increases are made over multiple rounds of play </li></ul></ul><ul><li>Good hosts are rewarded by having host advantage and thus encouraging players to be good hosts </li></ul>
    43. 44. Putting It All Together (cont.) <ul><li>Quick to respond to changing conditions </li></ul><ul><ul><li>Low level point-to-point control ensures continued connectivity </li></ul></ul><ul><ul><li>This response happens very quickly </li></ul></ul><ul><li>If problems persist, global bandwidth control will kick in and reduce overall targets within minutes </li></ul><ul><ul><li>Host will eventually be replaced </li></ul></ul><ul><ul><li>Bad host will have low reliable bandwidth </li></ul></ul>
    44. 45. Putting It All Together <ul><li>During Beta bandwidth histories accurately reflected player connection abilities </li></ul><ul><li>System repeatedly found the same good hosts as system histories were reset </li></ul><ul><li>Bad hosts did cause bad rounds of play but where quickly eliminated from pool of hosts in future games </li></ul>
    45. 46. Wish List <ul><li>Ability for game to know when box has moved </li></ul><ul><ul><li>Create a signature that can be stored with the history that represents the network location </li></ul></ul><ul><ul><li>For instance using the MAC of the local gateway along with perhaps routing information to known service </li></ul></ul><ul><li>Ability to manage QoS in the home </li></ul><ul><ul><li>Demands for bandwidth in the home are only going to get worse </li></ul></ul><ul><ul><li>Efforts need to be made to help manage bandwidth across devices in the home </li></ul></ul>
    46. 47. Wish List (cont.) <ul><ul><li>Consistent Bandwidth Control and Prediction across titles and platforms </li></ul></ul><ul><ul><ul><li>Game developers should be relieved of this job </li></ul></ul></ul><ul><ul><ul><li>Common problem for many games </li></ul></ul></ul><ul><ul><ul><li>History is applicable across titles and platforms </li></ul></ul></ul><ul><ul><li>Power Off UDP Packet Delivery </li></ul></ul><ul><ul><ul><li>Add ability for hardware to send out notification of powering down before actually powering down </li></ul></ul></ul><ul><ul><ul><li>This will allow others who are connected to game to be notified of removal of box and thus can handle it gracefully </li></ul></ul></ul>