diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs index 0e67095146..8355f2b13c 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLUDPServer.cs @@ -323,7 +323,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP protected int m_elapsedMSSinceLastStatReport = 0; /// Environment.TickCount of the last time the outgoing packet handler executed - protected int m_tickLastOutgoingPacketHandler; + protected double m_tickLastOutgoingPacketHandler; /// Keeps track of the number of elapsed milliseconds since the last time the outgoing packet handler looped protected int m_elapsedMSOutgoingPacketHandler; @@ -356,20 +356,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP } } - - protected ExpiringCache> m_pendingCache = new ExpiringCache>(); - /// - /// Event used to signal when queued packets are available for sending. - /// - /// - /// This allows the outbound loop to only operate when there is data to send rather than continuously polling. - /// Some data is sent immediately and not queued. That data would not trigger this event. - /// WRONG use. May be usefull in future revision - /// -// protected AutoResetEvent m_dataPresentEvent = new AutoResetEvent(false); - protected Pool m_incomingPacketPool; /// @@ -467,8 +455,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP int sceneThrottleBps = 0; bool usePools = false; - - IConfig config = configSource.Configs["ClientStack.LindenUDP"]; if (config != null) { @@ -927,10 +913,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP } PacketPool.Instance.ReturnPacket(packet); - - /// WRONG use. May be usefull in future revision -// if (packetQueued) -// m_dataPresentEvent.Set(); } /// @@ -2079,14 +2061,14 @@ namespace OpenSim.Region.ClientStack.LindenUDP m_sendPing = false; // Update elapsed time - int thisTick = Environment.TickCount & Int32.MaxValue; - if (m_tickLastOutgoingPacketHandler > thisTick) - m_elapsedMSOutgoingPacketHandler += ((Int32.MaxValue - m_tickLastOutgoingPacketHandler) + thisTick); - else - m_elapsedMSOutgoingPacketHandler += (thisTick - m_tickLastOutgoingPacketHandler); - + double thisTick = Util.GetTimeStampMS(); + int deltaMS = (int)(thisTick - m_tickLastOutgoingPacketHandler); m_tickLastOutgoingPacketHandler = thisTick; + // update some 1ms resolution chained timers + + m_elapsedMSOutgoingPacketHandler += deltaMS; + // Check for pending outgoing resends every 100ms if (m_elapsedMSOutgoingPacketHandler >= 100) { @@ -2109,15 +2091,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP m_sendPing = true; m_elapsed500MSOutgoingPacketHandler = 0; } - #endregion Update Timers - // Use this for emergency monitoring -- bug hunting - //if (m_scene.EmergencyMonitoring) - // clientPacketHandler = MonitoredClientOutgoingPacketHandler; - //else - // clientPacketHandler = ClientOutgoingPacketHandler; - // Handle outgoing packets, resends, acknowledgements, and pings for each // client. m_packetSent will be set to true if a packet is sent Scene.ForEachClient(clientPacketHandler); @@ -2129,7 +2104,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP if(Scene.GetNumberOfClients() == 0) { - Thread.Sleep(250); // be friendly to PIs, but how long ?? + Thread.Sleep(100); } else if (!m_packetSent) // Thread.Sleep((int)TickCountResolution); outch this is bad on linux @@ -2204,99 +2179,6 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// public long IncomingPacketsProcessed { get; protected set; } - protected void MonitoredClientOutgoingPacketHandler(IClientAPI client) - { - nticks++; - watch1.Start(); - m_currentOutgoingClient = client; - - try - { - if (client is LLClientView) - { - LLClientView llClient = (LLClientView)client; - LLUDPClient udpClient = llClient.UDPClient; - - if (udpClient.IsConnected) - { - if (m_resendUnacked) - { - nticksUnack++; - watch2.Start(); - - HandleUnacked(llClient); - - watch2.Stop(); - avgResendUnackedTicks = (nticksUnack - 1)/(float)nticksUnack * avgResendUnackedTicks + (watch2.ElapsedTicks / (float)nticksUnack); - watch2.Reset(); - } - - if (m_sendAcks) - { - nticksAck++; - watch2.Start(); - - SendAcks(udpClient); - - watch2.Stop(); - avgSendAcksTicks = (nticksAck - 1) / (float)nticksAck * avgSendAcksTicks + (watch2.ElapsedTicks / (float)nticksAck); - watch2.Reset(); - } - - if (m_sendPing) - { - nticksPing++; - watch2.Start(); - - SendPing(udpClient); - - watch2.Stop(); - avgSendPingTicks = (nticksPing - 1) / (float)nticksPing * avgSendPingTicks + (watch2.ElapsedTicks / (float)nticksPing); - watch2.Reset(); - } - - watch2.Start(); - // Dequeue any outgoing packets that are within the throttle limits - if (udpClient.DequeueOutgoing()) - { - m_packetSent = true; - npacksSent++; - } - else - { - npackNotSent++; - } - - watch2.Stop(); - avgDequeueTicks = (nticks - 1) / (float)nticks * avgDequeueTicks + (watch2.ElapsedTicks / (float)nticks); - watch2.Reset(); - - } - else - { - m_log.WarnFormat("[LLUDPSERVER]: Client is not connected"); - } - } - } - catch (Exception ex) - { - m_log.Error("[LLUDPSERVER]: OutgoingPacketHandler iteration for " + client.Name + - " threw an exception: " + ex.Message, ex); - } - watch1.Stop(); - avgProcessingTicks = (nticks - 1) / (float)nticks * avgProcessingTicks + (watch1.ElapsedTicks / (float)nticks); - watch1.Reset(); - - // reuse this -- it's every ~100ms - if (Scene.EmergencyMonitoring && nticks % 100 == 0) - { - m_log.InfoFormat("[LLUDPSERVER]: avg processing ticks: {0} avg unacked: {1} avg acks: {2} avg ping: {3} avg dequeue: {4} (TickCountRes: {5} sent: {6} notsent: {7})", - avgProcessingTicks, avgResendUnackedTicks, avgSendAcksTicks, avgSendPingTicks, avgDequeueTicks, TickCountResolution, npacksSent, npackNotSent); - npackNotSent = npacksSent = 0; - } - - } - #endregion protected void ProcessInPacket(IncomingPacket incomingPacket) diff --git a/OpenSim/Region/ClientStack/Linden/UDP/ThrottleRates.cs b/OpenSim/Region/ClientStack/Linden/UDP/ThrottleRates.cs index a476b919a5..6278e3686d 100644 --- a/OpenSim/Region/ClientStack/Linden/UDP/ThrottleRates.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/ThrottleRates.cs @@ -92,8 +92,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP Asset = throttleConfig.GetInt("asset_default", 10500); Total = Resend + Land + Wind + Cloud + Task + Texture + Asset; - // 3000000 bps default max - ClientMaxRate = throttleConfig.GetInt("client_throttle_max_bps", 375000); + // 5120000 bps default max + ClientMaxRate = throttleConfig.GetInt("client_throttle_max_bps", 640000); if (ClientMaxRate > 1000000) ClientMaxRate = 1000000; // no more than 8Mbps diff --git a/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs b/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs index 08d0fbf5bb..071530b753 100644 --- a/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs +++ b/OpenSim/Region/OptionalModules/Agent/UDP/Linden/LindenUDPInfoModule.cs @@ -125,13 +125,6 @@ namespace OpenSim.Region.OptionalModules.UDP.Linden + " With the 'full' option child agents are also shown.", (mod, cmd) => MainConsole.Instance.Output(GetThrottlesReport(cmd))); - scene.AddCommand( - "Comms", this, "emergency-monitoring", - "emergency-monitoring", - "Go on/off emergency monitoring mode", - "Go on/off emergency monitoring mode", - HandleEmergencyMonitoring); - scene.AddCommand( "Comms", this, "show client stats", "show client stats [first_name last_name]", @@ -197,24 +190,6 @@ namespace OpenSim.Region.OptionalModules.UDP.Linden return report.ToString(); } - protected void HandleEmergencyMonitoring(string module, string[] cmd) - { - bool mode = true; - if (cmd.Length == 1 || (cmd.Length > 1 && cmd[1] == "on")) - { - mode = true; - MainConsole.Instance.Output("Emergency Monitoring ON"); - } - else - { - mode = false; - MainConsole.Instance.Output("Emergency Monitoring OFF"); - } - - foreach (Scene s in m_scenes.Values) - s.EmergencyMonitoring = mode; - } - protected string GetColumnEntry(string entry, int maxLength, int columnPadding) { return string.Format(