VirtualBox

Changeset 40712 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
Mar 29, 2012 3:33:43 PM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
77171
Message:

NetShaper: Online bandwidth limit setting (#5582)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/PDMNetShaper.cpp

    r40706 r40712  
    152152#endif
    153153
     154static void pdmNsBwGroupSetLimit(PPDMNSBWGROUP pBwGroup, uint32_t cbTransferPerSecMax)
     155{
     156    pBwGroup->cbTransferPerSecMax = cbTransferPerSecMax;
     157    pBwGroup->cbBucketSize        = RT_MAX(PDM_NETSHAPER_MIN_BUCKET_SIZE,
     158                                           cbTransferPerSecMax * PDM_NETSHAPER_MAX_LATENCY / 1000);
     159    LogFlowFunc(("New rate limit is %d bytes per second, adjusted bucket size to %d bytes\n",
     160                 pBwGroup->cbTransferPerSecMax, pBwGroup->cbBucketSize));
     161}
     162
    154163static int pdmNsBwGroupCreate(PPDMNETSHAPER pShaper, const char *pcszBwGroup, uint32_t cbTransferPerSecMax)
    155164{
     
    179188                    pBwGroup->cRefs                 = 0;
    180189
    181                     pBwGroup->cbTransferPerSecMax   = cbTransferPerSecMax;
    182                     pBwGroup->cbBucketSize          = RT_MAX(PDM_NETSHAPER_MIN_BUCKET_SIZE,
    183                                                              cbTransferPerSecMax * PDM_NETSHAPER_MAX_LATENCY / 1000);
     190                    pdmNsBwGroupSetLimit(pBwGroup, cbTransferPerSecMax);
     191;
    184192                    pBwGroup->cbTokensLast          = pBwGroup->cbBucketSize;
    185193                    pBwGroup->tsUpdatedLast         = RTTimeSystemNanoTS();
     
    231239    {
    232240        bool fChoked = ASMAtomicXchgBool(&pFilter->fChoked, false);
    233         LogFlowFunc(("pFilter=%#p fChoked=%RTbool\n", pFilter, fChoked));
     241        Log3((LOG_FN_FMT ": pFilter=%#p fChoked=%RTbool\n", __PRETTY_FUNCTION__, pFilter, fChoked));
    234242        if (fChoked && pFilter->pIDrvNet)
    235243        {
     
    337345}
    338346
    339 bool PDMR3NsAllocateBandwidth(PPDMNSFILTER pFilter, uint32_t cbTransfer)
     347VMMR3DECL(bool) PDMR3NsAllocateBandwidth(PPDMNSFILTER pFilter, uint32_t cbTransfer)
    340348{
    341349    AssertPtrReturn(pFilter, VERR_INVALID_POINTER);
     
    363371
    364372    rc = RTCritSectLeave(&pBwGroup->cs); AssertRC(rc);
    365     LogFlowFunc(("BwGroup=%#p{%s} cbTransfer=%u uTokens=%u uTokensAdded=%u fAllowed=%RTbool\n",
    366                 pBwGroup, pBwGroup->pszName, cbTransfer, uTokens, uTokensAdded, fAllowed));
     373    Log2((LOG_FN_FMT "BwGroup=%#p{%s} cbTransfer=%u uTokens=%u uTokensAdded=%u fAllowed=%RTbool\n",
     374          __PRETTY_FUNCTION__, pBwGroup, pBwGroup->pszName, cbTransfer, uTokens, uTokensAdded, fAllowed));
    367375    return fAllowed;
    368376}
     377
     378VMMR3DECL(int) PDMR3NsBwGroupSetLimit(PVM pVM, const char *pcszBwGroup, uint32_t cbTransferPerSecMax)
     379{
     380    PUVM pUVM = pVM->pUVM;
     381    PPDMNETSHAPER pShaper = pUVM->pdm.s.pNetShaper;
     382
     383    int rc = RTCritSectEnter(&pShaper->cs); AssertRC(rc);
     384    if (RT_SUCCESS(rc))
     385    {
     386        PPDMNSBWGROUP pBwGroup = pdmNsBwGroupFindById(pShaper, pcszBwGroup);
     387        if (pBwGroup)
     388        {
     389            rc = RTCritSectEnter(&pBwGroup->cs); AssertRC(rc);
     390            pdmNsBwGroupSetLimit(pBwGroup, cbTransferPerSecMax);
     391            /* Drop extra tokens */
     392            if (pBwGroup->cbTokensLast > pBwGroup->cbBucketSize)
     393                pBwGroup->cbTokensLast = pBwGroup->cbBucketSize;
     394            rc = RTCritSectLeave(&pBwGroup->cs); AssertRC(rc);
     395        }
     396        rc = RTCritSectLeave(&pShaper->cs); AssertRC(rc);
     397    }
     398    return rc;
     399}
     400
    369401
    370402/**
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette