Exemple #1
0
public static int perfmon(UDTSOCKET u, CPerfMon perf, bool clear)
{
   try
   {
      CUDT udt = s_UDTUnited.lookup(u);
      udt.sample(perf, clear);
      return 0;
   }
   catch (CUDTException e)
   {
      s_UDTUnited.setError(new CUDTException(e));
      return ERROR;
   }
   catch (Exception e)
   {
      s_UDTUnited.setError(new CUDTException(-1, 0, 0));
      return ERROR;
   }
}
Exemple #2
0
        public void sample(CPerfMon perf, bool clear)
{
   if (!m_bConnected)
      throw new CUDTException(2, 2, 0);
   if (m_bBroken || m_bClosing)
      throw new CUDTException(2, 1, 0);

   Int64 currtime = CClock.getTime();
   perf.msTimeStamp = (currtime - m_StartTime) / 1000;

   perf.pktSent = m_llTraceSent;
   perf.pktRecv = m_llTraceRecv;
   perf.pktSndLoss = m_iTraceSndLoss;
   perf.pktRcvLoss = m_iTraceRcvLoss;
   perf.pktRetrans = m_iTraceRetrans;
   perf.pktSentACK = m_iSentACK;
   perf.pktRecvACK = m_iRecvACK;
   perf.pktSentNAK = m_iSentNAK;
   perf.pktRecvNAK = m_iRecvNAK;
   perf.usSndDuration = m_llSndDuration;

   perf.pktSentTotal = m_llSentTotal;
   perf.pktRecvTotal = m_llRecvTotal;
   perf.pktSndLossTotal = m_iSndLossTotal;
   perf.pktRcvLossTotal = m_iRcvLossTotal;
   perf.pktRetransTotal = m_iRetransTotal;
   perf.pktSentACKTotal = m_iSentACKTotal;
   perf.pktRecvACKTotal = m_iRecvACKTotal;
   perf.pktSentNAKTotal = m_iSentNAKTotal;
   perf.pktRecvNAKTotal = m_iRecvNAKTotal;
   perf.usSndDurationTotal = m_llSndDurationTotal;

   double interval = (double)(currtime - m_LastSampleTime);

   perf.mbpsSendRate = (double)(m_llTraceSent) * m_iPayloadSize * 8.0 / interval;
   perf.mbpsRecvRate = (double)(m_llTraceRecv) * m_iPayloadSize * 8.0 / interval;

   perf.usPktSndPeriod = m_ullInterval / (double)(m_ullCPUFrequency);
   perf.pktFlowWindow = m_iFlowWindowSize;
   perf.pktCongestionWindow = (int)m_dCongestionWindow;
   perf.pktFlightSize = CSeqNo.seqlen((Int32)(m_iSndLastAck), (Int32)(m_iSndCurrSeqNo));
   perf.msRTT = m_iRTT/1000.0;
   perf.mbpsBandwidth = m_iBandwidth * m_iPayloadSize * 8.0 / 1000000.0;

      if (WAIT_OBJECT_0 == WaitForSingleObject(m_ConnectionLock, 0))
   {
      perf.byteAvailSndBuf = (null == m_pSndBuffer) ? 0 : (m_iSndBufSize - m_pSndBuffer.getCurrBufSize()) * m_iMSS;
      perf.byteAvailRcvBuf = (null == m_pRcvBuffer) ? 0 : m_pRcvBuffer.getAvailBufSize() * m_iMSS;

          m_ConnectionLock.ReleaseMutex();
   }
   else
   {
      perf.byteAvailSndBuf = 0;
      perf.byteAvailRcvBuf = 0;
   }

   if (clear)
   {
      m_llTraceSent = m_llTraceRecv = m_iTraceSndLoss = m_iTraceSndLoss = m_iTraceRetrans = m_iSentACK = m_iRecvACK = m_iSentNAK = m_iRecvNAK = 0;
      m_llSndDuration = 0;
      m_LastSampleTime = currtime;
   }
}
Exemple #3
0
 public static int perfmon(UDTSOCKET u, CPerfMon perf)
 {
     perfmon(u, perf, true);
 }
Exemple #4
0
      // Functionality:
      //    read the performance data since last sample() call.
      // Parameters:
      //    0) [in, out] perf: pointer to a CPerfMon structure to record the performance data.
      //    1) [in] clear: flag to decide if the local performance trace should be cleared.
      // Returned value:
      //    None.

        public void sample(CPerfMon perf)
        {
            sample(perf, true);
        }