Changeset 108460 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Mar 5, 2025 5:33:56 PM (2 months ago)
- svn:sync-xref-src-repo-rev:
- 167834
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR3/PDMAsyncCompletion.cpp
r106061 r108460 139 139 char *pszId; 140 140 /** Maximum number of bytes the endpoints are allowed to transfer (Max is 4GB/s currently) */ 141 volatile uint 32_t cbTransferPerSecMax;141 volatile uint64_t cbTransferPerSecMax; 142 142 /** Number of bytes we start with */ 143 volatile uint 32_t cbTransferPerSecStart;143 volatile uint64_t cbTransferPerSecStart; 144 144 /** Step after each update */ 145 volatile uint 32_t cbTransferPerSecStep;145 volatile uint64_t cbTransferPerSecStep; 146 146 /** Number of bytes we are allowed to transfer till the next update. 147 147 * Reset by the refresh timer. */ 148 volatile uint 32_t cbTransferAllowed;148 volatile uint64_t cbTransferAllowed; 149 149 /** Timestamp of the last update */ 150 150 volatile uint64_t tsUpdatedLast; … … 655 655 656 656 /** Lazy coder. */ 657 static int pdmacAsyncCompletionBwMgrCreate(PPDMASYNCCOMPLETIONEPCLASS pEpClass, const char *pszBwMgr, uint 32_t cbTransferPerSecMax,658 uint 32_t cbTransferPerSecStart, uint32_t cbTransferPerSecStep)659 { 660 LogFlowFunc(("pEpClass=%#p pszBwMgr=%#p{%s} cbTransferPerSecMax=% u cbTransferPerSecStart=%u cbTransferPerSecStep=%u\n",657 static int pdmacAsyncCompletionBwMgrCreate(PPDMASYNCCOMPLETIONEPCLASS pEpClass, const char *pszBwMgr, uint64_t cbTransferPerSecMax, 658 uint64_t cbTransferPerSecStart, uint64_t cbTransferPerSecStep) 659 { 660 LogFlowFunc(("pEpClass=%#p pszBwMgr=%#p{%s} cbTransferPerSecMax=%RU64 cbTransferPerSecStart=%RU64 cbTransferPerSecStep=%RU64\n", 661 661 pEpClass, pszBwMgr, pszBwMgr, cbTransferPerSecMax, cbTransferPerSecStart, cbTransferPerSecStep)); 662 662 … … 732 732 * Only set if false is returned. 733 733 */ 734 bool pdmacEpIsTransferAllowed(PPDMASYNCCOMPLETIONENDPOINT pEndpoint, uint 32_t cbTransfer, RTMSINTERVAL *pmsWhenNext)734 bool pdmacEpIsTransferAllowed(PPDMASYNCCOMPLETIONENDPOINT pEndpoint, uint64_t cbTransfer, RTMSINTERVAL *pmsWhenNext) 735 735 { 736 736 bool fAllowed = true; 737 737 PPDMACBWMGR pBwMgr = ASMAtomicReadPtrT(&pEndpoint->pBwMgr, PPDMACBWMGR); 738 738 739 LogFlowFunc(("pEndpoint=%p pBwMgr=%p cbTransfer=% u\n", pEndpoint, pBwMgr, cbTransfer));739 LogFlowFunc(("pEndpoint=%p pBwMgr=%p cbTransfer=%RU64\n", pEndpoint, pBwMgr, cbTransfer)); 740 740 741 741 if (pBwMgr) 742 742 { 743 uint 32_t cbOld = ASMAtomicSubU32(&pBwMgr->cbTransferAllowed, cbTransfer);743 uint64_t cbOld = ASMAtomicSubU64(&pBwMgr->cbTransferAllowed, cbTransfer); 744 744 if (RT_LIKELY(cbOld >= cbTransfer)) 745 745 fAllowed = true; … … 759 759 { 760 760 pBwMgr->cbTransferPerSecStart = RT_MIN(pBwMgr->cbTransferPerSecMax, pBwMgr->cbTransferPerSecStart + pBwMgr->cbTransferPerSecStep); 761 LogFlow(("AIOMgr: Increasing maximum bandwidth to % ubytes/sec\n", pBwMgr->cbTransferPerSecStart));761 LogFlow(("AIOMgr: Increasing maximum bandwidth to %RU64 bytes/sec\n", pBwMgr->cbTransferPerSecStart)); 762 762 } 763 763 764 764 /* Update */ 765 uint 32_t cbTransferAllowedNew = pBwMgr->cbTransferPerSecStart > cbTransfer765 uint64_t cbTransferAllowedNew = pBwMgr->cbTransferPerSecStart > cbTransfer 766 766 ? pBwMgr->cbTransferPerSecStart - cbTransfer 767 767 : 0; 768 ASMAtomicWriteU 32(&pBwMgr->cbTransferAllowed, cbTransferAllowedNew);768 ASMAtomicWriteU64(&pBwMgr->cbTransferAllowed, cbTransferAllowedNew); 769 769 fAllowed = true; 770 770 LogFlow(("AIOMgr: Refreshed bandwidth\n")); … … 773 773 else 774 774 { 775 ASMAtomicAddU 32(&pBwMgr->cbTransferAllowed, cbTransfer);775 ASMAtomicAddU64(&pBwMgr->cbTransferAllowed, cbTransfer); 776 776 *pmsWhenNext = ((1000*1000*1000) - (tsNow - tsUpdatedLast)) / (1000*1000); 777 777 } … … 883 883 if (RT_SUCCESS(rc)) 884 884 { 885 uint 32_t cbMax;886 rc = CFGMR3QueryU 32(pCur, "Max", &cbMax);885 uint64_t cbMax; 886 rc = CFGMR3QueryU64(pCur, "Max", &cbMax); 887 887 if (RT_SUCCESS(rc)) 888 888 { 889 uint 32_t cbStart;890 rc = CFGMR3QueryU 32Def(pCur, "Start", &cbStart, cbMax);889 uint64_t cbStart; 890 rc = CFGMR3QueryU64Def(pCur, "Start", &cbStart, cbMax); 891 891 if (RT_SUCCESS(rc)) 892 892 { 893 uint 32_t cbStep;894 rc = CFGMR3QueryU 32Def(pCur, "Step", &cbStep, 0);893 uint64_t cbStep; 894 rc = CFGMR3QueryU64Def(pCur, "Step", &cbStep, 0); 895 895 if (RT_SUCCESS(rc)) 896 896 rc = pdmacAsyncCompletionBwMgrCreate(pEndpointClass, pszBwGrpId, … … 1304 1304 { 1305 1305 LogRel(("AIOMgr: Id: %s\n", pBwMgr->pszId)); 1306 LogRel(("AIOMgr: Max: % uB/s\n", pBwMgr->cbTransferPerSecMax));1307 LogRel(("AIOMgr: Start: % uB/s\n", pBwMgr->cbTransferPerSecStart));1308 LogRel(("AIOMgr: Step: % uB/s\n", pBwMgr->cbTransferPerSecStep));1306 LogRel(("AIOMgr: Max: %RU64 B/s\n", pBwMgr->cbTransferPerSecMax)); 1307 LogRel(("AIOMgr: Start: %RU64 B/s\n", pBwMgr->cbTransferPerSecStart)); 1308 LogRel(("AIOMgr: Step: %RU64 B/s\n", pBwMgr->cbTransferPerSecStep)); 1309 1309 LogRel(("AIOMgr: Endpoints:\n")); 1310 1310 … … 1781 1781 * @param cbMaxNew The new maximum for the bandwidth manager in bytes/sec. 1782 1782 */ 1783 VMMR3DECL(int) PDMR3AsyncCompletionBwMgrSetMaxForFile(PUVM pUVM, const char *pszBwMgr, uint 32_t cbMaxNew)1783 VMMR3DECL(int) PDMR3AsyncCompletionBwMgrSetMaxForFile(PUVM pUVM, const char *pszBwMgr, uint64_t cbMaxNew) 1784 1784 { 1785 1785 UVM_ASSERT_VALID_EXT_RETURN(pUVM, VERR_INVALID_VM_HANDLE); … … 1797 1797 * the new limit immediately. 1798 1798 */ 1799 ASMAtomicWriteU 32(&pBwMgr->cbTransferPerSecMax, cbMaxNew);1800 ASMAtomicWriteU 32(&pBwMgr->cbTransferPerSecStart, cbMaxNew);1799 ASMAtomicWriteU64(&pBwMgr->cbTransferPerSecMax, cbMaxNew); 1800 ASMAtomicWriteU64(&pBwMgr->cbTransferPerSecStart, cbMaxNew); 1801 1801 } 1802 1802 else -
trunk/src/VBox/VMM/VMMR3/PDMAsyncCompletionFileFailsafe.cpp
r106061 r108460 79 79 PPDMACTASKFILE pCurr = pTasks; 80 80 81 if (!pdmacEpIsTransferAllowed(&pEndpoint->Core, (uint32_t)pCurr->DataSeg.cbSeg, &msWhenNext))81 if (!pdmacEpIsTransferAllowed(&pEndpoint->Core, pCurr->DataSeg.cbSeg, &msWhenNext)) 82 82 { 83 83 pAioMgr->msBwLimitExpired = RT_MIN(pAioMgr->msBwLimitExpired, msWhenNext); -
trunk/src/VBox/VMM/VMMR3/PDMAsyncCompletionFileNormal.cpp
r106061 r108460 999 999 PPDMACTASKFILE pCurr = pTaskHead; 1000 1000 1001 if (!pdmacEpIsTransferAllowed(&pEndpoint->Core, (uint32_t)pCurr->DataSeg.cbSeg, &msWhenNext))1001 if (!pdmacEpIsTransferAllowed(&pEndpoint->Core, pCurr->DataSeg.cbSeg, &msWhenNext)) 1002 1002 { 1003 1003 pAioMgr->msBwLimitExpired = RT_MIN(pAioMgr->msBwLimitExpired, msWhenNext); -
trunk/src/VBox/VMM/include/PDMAsyncCompletionInternal.h
r106061 r108460 282 282 283 283 void pdmR3AsyncCompletionCompleteTask(PPDMASYNCCOMPLETIONTASK pTask, int rc, bool fCallCompletionHandler); 284 bool pdmacEpIsTransferAllowed(PPDMASYNCCOMPLETIONENDPOINT pEndpoint, uint 32_t cbTransfer, RTMSINTERVAL *pmsWhenNext);284 bool pdmacEpIsTransferAllowed(PPDMASYNCCOMPLETIONENDPOINT pEndpoint, uint64_t cbTransfer, RTMSINTERVAL *pmsWhenNext); 285 285 286 286 RT_C_DECLS_END
Note:
See TracChangeset
for help on using the changeset viewer.