Changeset 29620 in vbox
- Timestamp:
- May 18, 2010 12:15:55 PM (14 years ago)
- Location:
- trunk
- Files:
-
- 11 edited
-
include/VBox/gmm.h (modified) (2 diffs)
-
include/VBox/pgm.h (modified) (1 diff)
-
src/VBox/Main/GuestImpl.cpp (modified) (2 diffs)
-
src/VBox/Main/HostImpl.cpp (modified) (3 diffs)
-
src/VBox/Main/MachineImpl.cpp (modified) (3 diffs)
-
src/VBox/Main/Performance.cpp (modified) (5 diffs)
-
src/VBox/Main/PerformanceImpl.cpp (modified) (2 diffs)
-
src/VBox/Main/include/Performance.h (modified) (9 diffs)
-
src/VBox/VMM/GMM.cpp (modified) (3 diffs)
-
src/VBox/VMM/PGMPhys.cpp (modified) (2 diffs)
-
src/VBox/VMM/VMMR0/GMMR0.cpp (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/gmm.h
r29613 r29620 419 419 /** The number of ballooned pages (out). */ 420 420 uint64_t cBalloonedPages; 421 /** The number of shared pages (out). */ 422 uint64_t cSharedPages; 421 423 /** Maximum nr of pages (out). */ 422 424 uint64_t cMaxPages; … … 607 609 GMMR3DECL(int) GMMR3MapUnmapChunk(PVM pVM, uint32_t idChunkMap, uint32_t idChunkUnmap, PRTR3PTR ppvR3); 608 610 GMMR3DECL(int) GMMR3SeedChunk(PVM pVM, RTR3PTR pvR3); 609 GMMR3DECL(int) GMMR3QueryHypervisorMemoryStats(PVM pVM, uint64_t *pcTotalAllocPages, uint64_t *pcTotalFreePages, uint64_t *pcTotalBalloonPages );611 GMMR3DECL(int) GMMR3QueryHypervisorMemoryStats(PVM pVM, uint64_t *pcTotalAllocPages, uint64_t *pcTotalFreePages, uint64_t *pcTotalBalloonPages, uint64_t *puTotalBalloonSize); 610 612 GMMR3DECL(int) GMMR3QueryMemoryStats(PVM pVM, uint64_t *pcAllocPages, uint64_t *pcMaxPages, uint64_t *pcBalloonPages); 611 613 GMMR3DECL(int) GMMR3BalloonedPages(PVM pVM, GMMBALLOONACTION enmAction, uint32_t cBalloonedPages); -
trunk/include/VBox/pgm.h
r29567 r29620 467 467 VMMR3DECL(int) PGMR3PhysRegisterRam(PVM pVM, RTGCPHYS GCPhys, RTGCPHYS cb, const char *pszDesc); 468 468 VMMR3DECL(int) PGMR3PhysChangeMemBalloon(PVM pVM, bool fInflate, unsigned cPages, RTGCPHYS *paPhysPage); 469 VMMR3DECL(int) PGMR3QueryVMMMemoryStats(PVM pVM, uint64_t *puTotalAllocSize, uint64_t *puTotalFreeSize, uint64_t *puTotalBalloonSize); 469 VMMR3DECL(int) PGMR3QueryVMMMemoryStats(PVM pVM, uint64_t *puTotalAllocSize, uint64_t *puTotalFreeSize, uint64_t *puTotalBalloonSize, uint64_t *puTotalSharedSize); 470 VMMR3DECL(int) PGMR3QueryMemoryStats(PVM pVM, uint64_t *pulTotalMem, uint64_t *pulPrivateMem, uint64_t *puTotalSharedMem, uint64_t *puTotalZeroMem); 470 471 VMMR3DECL(int) PGMR3PhysMMIORegister(PVM pVM, RTGCPHYS GCPhys, RTGCPHYS cb, 471 472 R3PTRTYPE(PFNPGMR3PHYSHANDLER) pfnHandlerR3, RTR3PTR pvUserR3, -
trunk/src/VBox/Main/GuestImpl.cpp
r29591 r29620 338 338 *aMemCache = mCurrentGuestStat[GUESTSTATTYPE_MEMCACHE] * (_4K/_1K); /* page (4K) -> 1KB units */ 339 339 *aPageTotal = mCurrentGuestStat[GUESTSTATTYPE_PAGETOTAL] * (_4K/_1K); /* page (4K) -> 1KB units */ 340 *aMemShared = 0; /** todo */341 340 342 341 Console::SafeVMPtr pVM (mParent); 343 342 if (pVM.isOk()) 344 343 { 345 uint64_t uFreeTotal, uAllocTotal, uBalloonedTotal ;344 uint64_t uFreeTotal, uAllocTotal, uBalloonedTotal, uSharedTotal; 346 345 *aMemFreeTotal = 0; 347 int rc = PGMR3QueryVMMMemoryStats(pVM.raw(), &uAllocTotal, &uFreeTotal, &uBalloonedTotal );346 int rc = PGMR3QueryVMMMemoryStats(pVM.raw(), &uAllocTotal, &uFreeTotal, &uBalloonedTotal, &uSharedTotal); 348 347 AssertRC(rc); 349 348 if (rc == VINF_SUCCESS) … … 352 351 *aMemFreeTotal = (ULONG)(uFreeTotal / _1K); 353 352 *aMemBalloonTotal = (ULONG)(uBalloonedTotal / _1K); 354 *aMemSharedTotal = 0; /** todo */ 353 *aMemSharedTotal = (ULONG)(uSharedTotal / _1K); 354 } 355 356 /* Query the missing per-VM memory statistics. */ 357 *aMemShared = 0; 358 uint64_t uTotalMem, uPrivateMem, uSharedMem, uZeroMem; 359 rc = PGMR3QueryMemoryStats(pVM.raw(), &uTotalMem, &uPrivateMem, &uSharedMem, &uZeroMem); 360 if (rc == VINF_SUCCESS) 361 { 362 *aMemShared = (ULONG)(uSharedMem / _1K); 355 363 } 356 364 } 357 365 else 366 { 358 367 *aMemFreeTotal = 0; 368 *aMemShared = 0; 369 } 359 370 360 371 return S_OK; -
trunk/src/VBox/Main/HostImpl.cpp
r29615 r29620 2356 2356 pm::SubMetric *ramVMMBallooned = new pm::SubMetric("RAM/VMM/Ballooned", 2357 2357 "Total physical memory ballooned by the hypervisor."); 2358 pm::SubMetric *ramVMMShared = new pm::SubMetric("RAM/VMM/Shared", 2359 "Total physical memory shared between VMs."); 2358 2360 2359 2361 … … 2368 2370 aCollector->registerBaseMetric (cpuMhz); 2369 2371 pm::BaseMetric *ramUsage = new pm::HostRamUsage(hal, objptr, ramUsageTotal, ramUsageUsed, 2370 ramUsageFree, ramVMMUsed, ramVMMFree, ramVMMBallooned );2372 ramUsageFree, ramVMMUsed, ramVMMFree, ramVMMBallooned, ramVMMShared); 2371 2373 aCollector->registerBaseMetric (ramUsage); 2372 2374 … … 2450 2452 aCollector->registerMetric(new pm::Metric(ramUsage, ramVMMBallooned, 2451 2453 new pm::AggregateMax())); 2454 2455 aCollector->registerMetric(new pm::Metric(ramUsage, ramVMMShared, 0)); 2456 aCollector->registerMetric(new pm::Metric(ramUsage, ramVMMShared, 2457 new pm::AggregateAvg())); 2458 aCollector->registerMetric(new pm::Metric(ramUsage, ramVMMShared, 2459 new pm::AggregateMin())); 2460 aCollector->registerMetric(new pm::Metric(ramUsage, ramVMMShared, 2461 new pm::AggregateMax())); 2452 2462 } 2453 2463 -
trunk/src/VBox/Main/MachineImpl.cpp
r29568 r29620 9221 9221 pm::SubMetric *guestMemFree = new pm::SubMetric("Guest/RAM/Usage/Free", "Free amount of physical guest RAM."); 9222 9222 pm::SubMetric *guestMemBalloon = new pm::SubMetric("Guest/RAM/Usage/Balloon", "Amount of ballooned physical guest RAM."); 9223 pm::SubMetric *guestMemShared = new pm::SubMetric("Guest/RAM/Usage/Shared", "Amount of shared physical guest RAM."); 9223 9224 pm::SubMetric *guestMemCache = new pm::SubMetric("Guest/RAM/Usage/Cache", "Total amount of guest (disk) cache memory."); 9224 9225 … … 9229 9230 aCollector->registerBaseMetric(guestCpuLoad); 9230 9231 9231 pm::BaseMetric *guestCpuMem = new pm::GuestRamUsage(mGuestHAL, aMachine, guestMemTotal, guestMemFree, guestMemBalloon, 9232 pm::BaseMetric *guestCpuMem = new pm::GuestRamUsage(mGuestHAL, aMachine, guestMemTotal, guestMemFree, guestMemBalloon, guestMemShared, 9232 9233 guestMemCache, guestPagedTotal); 9233 9234 aCollector->registerBaseMetric(guestCpuMem); … … 9262 9263 aCollector->registerMetric(new pm::Metric(guestCpuMem, guestMemBalloon, new pm::AggregateMin())); 9263 9264 aCollector->registerMetric(new pm::Metric(guestCpuMem, guestMemBalloon, new pm::AggregateMax())); 9265 9266 aCollector->registerMetric(new pm::Metric(guestCpuMem, guestMemShared, 0)); 9267 aCollector->registerMetric(new pm::Metric(guestCpuMem, guestMemShared, new pm::AggregateAvg())); 9268 aCollector->registerMetric(new pm::Metric(guestCpuMem, guestMemShared, new pm::AggregateMin())); 9269 aCollector->registerMetric(new pm::Metric(guestCpuMem, guestMemShared, new pm::AggregateMax())); 9264 9270 9265 9271 aCollector->registerMetric(new pm::Metric(guestCpuMem, guestMemCache, 0)); -
trunk/src/VBox/Main/Performance.cpp
r29225 r29620 164 164 && iTick != mLastTick) 165 165 { 166 ULONG ulMemAllocTotal, ulMemFreeTotal, ulMemBalloonTotal, ulMemSharedTotal, u MemShared;166 ULONG ulMemAllocTotal, ulMemFreeTotal, ulMemBalloonTotal, ulMemSharedTotal, ulMemShared; 167 167 168 168 /** todo shared stats. */ 169 169 mGuest->InternalGetStatistics(&mCpuUser, &mCpuKernel, &mCpuIdle, 170 &mMemTotal, &mMemFree, &mMemBalloon, & mMemCache, &uMemShared,170 &mMemTotal, &mMemFree, &mMemBalloon, &ulMemShared, &mMemCache, 171 171 &mPageTotal, &ulMemAllocTotal, &ulMemFreeTotal, &ulMemBalloonTotal, &ulMemSharedTotal); 172 172 173 173 if (mHostHAL) 174 mHostHAL->setMemHypervisorStats(ulMemAllocTotal, ulMemFreeTotal, ulMemBalloonTotal );174 mHostHAL->setMemHypervisorStats(ulMemAllocTotal, ulMemFreeTotal, ulMemBalloonTotal, ulMemShared); 175 175 176 176 mLastTick = iTick; … … 288 288 mFreeVMM->init(mLength); 289 289 mBalloonVMM->init(mLength); 290 mSharedVMM->init(mLength); 290 291 } 291 292 … … 306 307 307 308 } 308 ULONG allocVMM, freeVMM, balloonVMM ;309 310 mHAL->getMemHypervisorStats(&allocVMM, &freeVMM, &balloonVMM );309 ULONG allocVMM, freeVMM, balloonVMM, sharedVMM; 310 311 mHAL->getMemHypervisorStats(&allocVMM, &freeVMM, &balloonVMM, &sharedVMM); 311 312 mAllocVMM->put(allocVMM); 312 313 mFreeVMM->put(freeVMM); 313 314 mBalloonVMM->put(balloonVMM); 315 mSharedVMM->put(sharedVMM); 314 316 } 315 317 … … 419 421 mFree->init(mLength); 420 422 mBallooned->init(mLength); 423 mShared->init(mLength); 421 424 mCache->init(mLength); 422 425 mPagedTotal->init(mLength); … … 430 433 void GuestRamUsage::collect() 431 434 { 432 ULONG ulMemTotal = 0, ulMemFree = 0, ulMemBalloon = 0, ulMem Cache = 0, ulPageTotal = 0;433 434 mGuestHAL->getGuestMemLoad(&ulMemTotal, &ulMemFree, &ulMemBalloon, &ulMem Cache, &ulPageTotal);435 ULONG ulMemTotal = 0, ulMemFree = 0, ulMemBalloon = 0, ulMemShared = 0, ulMemCache = 0, ulPageTotal = 0; 436 437 mGuestHAL->getGuestMemLoad(&ulMemTotal, &ulMemFree, &ulMemBalloon, &ulMemShared, &ulMemCache, &ulPageTotal); 435 438 mTotal->put(ulMemTotal); 436 439 mFree->put(ulMemFree); 437 440 mBallooned->put(ulMemBalloon); 441 mShared->put(ulMemShared); 438 442 mCache->put(ulMemCache); 439 443 mPagedTotal->put(ulPageTotal); -
trunk/src/VBox/Main/PerformanceImpl.cpp
r28800 r29620 76 76 "RAM/VMM/Ballooned:min", 77 77 "RAM/VMM/Ballooned:max", 78 "RAM/VMM/Shared", 79 "RAM/VMM/Shared:avg", 80 "RAM/VMM/Shared:min", 81 "RAM/VMM/Shared:max", 78 82 "Guest/CPU/Load/User", 79 83 "Guest/CPU/Load/User:avg", … … 100 104 "Guest/RAM/Usage/Balloon:min", 101 105 "Guest/RAM/Usage/Balloon:max", 106 "Guest/RAM/Usage/Shared", 107 "Guest/RAM/Usage/Shared:avg", 108 "Guest/RAM/Usage/Shared:min", 109 "Guest/RAM/Usage/Shared:max", 102 110 "Guest/RAM/Usage/Cache", 103 111 "Guest/RAM/Usage/Cache:avg", -
trunk/src/VBox/Main/include/Performance.h
r28800 r29620 159 159 virtual int disable(); 160 160 161 virtual int setMemHypervisorStats(ULONG memAlloc, ULONG memFree, ULONG memBallooned )161 virtual int setMemHypervisorStats(ULONG memAlloc, ULONG memFree, ULONG memBallooned, ULONG memShared) 162 162 { 163 163 mMemAllocVMM = memAlloc; 164 164 mMemFreeVMM = memFree; 165 165 mMemBalloonedVMM = memBallooned; 166 mMemSharedVMM = memShared; 166 167 return S_OK; 167 168 } 168 169 169 virtual void getMemHypervisorStats(ULONG *pMemAlloc, ULONG *pMemFree, ULONG *pMemBallooned )170 virtual void getMemHypervisorStats(ULONG *pMemAlloc, ULONG *pMemFree, ULONG *pMemBallooned, ULONG *pMemShared) 170 171 { 171 172 *pMemAlloc = mMemAllocVMM; 172 173 *pMemFree = mMemFreeVMM; 173 174 *pMemBallooned = mMemBalloonedVMM; 175 *pMemShared = mMemSharedVMM; 174 176 } 175 177 … … 178 180 ULONG mMemFreeVMM; 179 181 ULONG mMemBalloonedVMM; 182 ULONG mMemSharedVMM; 180 183 }; 181 184 … … 185 188 CollectorGuestHAL(Machine *machine, CollectorHAL *hostHAL) : CollectorHAL(), cEnabled(0), mMachine(machine), mConsole(NULL), mGuest(NULL), 186 189 mLastTick(0), mHostHAL(hostHAL), mCpuUser(0), mCpuKernel(0), mCpuIdle(0), mMemTotal(0), mMemFree(0), 187 mMemBalloon(0), mMem Cache(0), mPageTotal(0) {};190 mMemBalloon(0), mMemShared(0), mMemCache(0), mPageTotal(0) {}; 188 191 ~CollectorGuestHAL(); 189 192 … … 204 207 205 208 /** Return guest memory information in KB. */ 206 void getGuestMemLoad(ULONG *pulMemTotal, ULONG *pulMemFree, ULONG *pulMemBalloon, ULONG *pulMem Cache, ULONG *pulPageTotal)209 void getGuestMemLoad(ULONG *pulMemTotal, ULONG *pulMemFree, ULONG *pulMemBalloon, ULONG *pulMemShared, ULONG *pulMemCache, ULONG *pulPageTotal) 207 210 { 208 211 *pulMemTotal = mMemTotal; 209 212 *pulMemFree = mMemFree; 210 213 *pulMemBalloon = mMemBalloon; 214 *pulMemShared = mMemShared; 211 215 *pulMemCache = mMemCache; 212 216 *pulPageTotal = mPageTotal; … … 229 233 ULONG mMemFree; 230 234 ULONG mMemBalloon; 235 ULONG mMemShared; 231 236 ULONG mMemCache; 232 237 ULONG mPageTotal; … … 337 342 { 338 343 public: 339 HostRamUsage(CollectorHAL *hal, ComPtr<IUnknown> object, SubMetric *total, SubMetric *used, SubMetric *available, SubMetric *allocVMM, SubMetric *freeVMM, SubMetric *balloonVMM )340 : BaseMetric(hal, "RAM/Usage", object), mTotal(total), mUsed(used), mAvailable(available), mAllocVMM(allocVMM), mFreeVMM(freeVMM), mBalloonVMM(balloonVMM) {};341 ~HostRamUsage() { delete mTotal; delete mUsed; delete mAvailable; delete mAllocVMM; delete mFreeVMM; delete mBalloonVMM; };344 HostRamUsage(CollectorHAL *hal, ComPtr<IUnknown> object, SubMetric *total, SubMetric *used, SubMetric *available, SubMetric *allocVMM, SubMetric *freeVMM, SubMetric *balloonVMM, SubMetric *sharedVMM) 345 : BaseMetric(hal, "RAM/Usage", object), mTotal(total), mUsed(used), mAvailable(available), mAllocVMM(allocVMM), mFreeVMM(freeVMM), mBalloonVMM(balloonVMM), mSharedVMM(sharedVMM) {}; 346 ~HostRamUsage() { delete mTotal; delete mUsed; delete mAvailable; delete mAllocVMM; delete mFreeVMM; delete mBalloonVMM; delete mSharedVMM; }; 342 347 343 348 void init(ULONG period, ULONG length); … … 355 360 SubMetric *mFreeVMM; 356 361 SubMetric *mBalloonVMM; 362 SubMetric *mSharedVMM; 357 363 }; 358 364 … … 434 440 { 435 441 public: 436 GuestRamUsage(CollectorGuestHAL *hal, ComPtr<IUnknown> object, SubMetric *total, SubMetric *free, SubMetric *balloon, SubMetric * cache, SubMetric *pagedtotal)437 : BaseMetric(hal, "RAM/Usage", object), mTotal(total), mFree(free), mBallooned(balloon), m Cache(cache), mPagedTotal(pagedtotal), mGuestHAL(hal) {};438 ~GuestRamUsage() { delete mTotal; delete mFree; delete mBallooned; delete m Cache; delete mPagedTotal; };442 GuestRamUsage(CollectorGuestHAL *hal, ComPtr<IUnknown> object, SubMetric *total, SubMetric *free, SubMetric *balloon, SubMetric *shared, SubMetric *cache, SubMetric *pagedtotal) 443 : BaseMetric(hal, "RAM/Usage", object), mTotal(total), mFree(free), mBallooned(balloon), mShared(shared), mCache(cache), mPagedTotal(pagedtotal), mGuestHAL(hal) {}; 444 ~GuestRamUsage() { delete mTotal; delete mFree; delete mBallooned; delete mShared; delete mCache; delete mPagedTotal; }; 439 445 440 446 void init(ULONG period, ULONG length); … … 446 452 ULONG getScale() { return 1; } 447 453 private: 448 SubMetric *mTotal, *mFree, *mBallooned, *mCache, *mPagedTotal ;454 SubMetric *mTotal, *mFree, *mBallooned, *mCache, *mPagedTotal, *mShared; 449 455 CollectorGuestHAL *mGuestHAL; 450 456 }; -
trunk/src/VBox/VMM/GMM.cpp
r29613 r29620 290 290 * @see GMMR0QueryVMMMemoryStatsReq 291 291 */ 292 GMMR3DECL(int) GMMR3QueryHypervisorMemoryStats(PVM pVM, uint64_t *pcTotalAllocPages, uint64_t *pcTotalFreePages, uint64_t *pcTotalBalloonPages )292 GMMR3DECL(int) GMMR3QueryHypervisorMemoryStats(PVM pVM, uint64_t *pcTotalAllocPages, uint64_t *pcTotalFreePages, uint64_t *pcTotalBalloonPages, uint64_t *puTotalBalloonSize) 293 293 { 294 294 GMMMEMSTATSREQ Req; … … 298 298 Req.cFreePages = 0; 299 299 Req.cBalloonedPages = 0; 300 Req.cSharedPages = 0; 300 301 301 302 *pcTotalAllocPages = 0; 302 303 *pcTotalFreePages = 0; 303 304 *pcTotalBalloonPages = 0; 305 *puTotalBalloonSize = 0; 304 306 305 307 /* Must be callable from any thread, so can't use VMMR3CallR0. */ … … 310 312 *pcTotalFreePages = Req.cFreePages; 311 313 *pcTotalBalloonPages = Req.cBalloonedPages; 314 *puTotalBalloonSize = Req.cSharedPages; 312 315 } 313 316 return rc; -
trunk/src/VBox/VMM/PGMPhys.cpp
r29577 r29620 967 967 * @param puTotalFreeSize Pointer to total free (allocated but not used yet) memory inside VMMR0 (in bytes) 968 968 * @param puTotalBalloonSize Pointer to total ballooned memory inside VMMR0 (in bytes) 969 */ 970 VMMR3DECL(int) PGMR3QueryVMMMemoryStats(PVM pVM, uint64_t *puTotalAllocSize, uint64_t *puTotalFreeSize, uint64_t *puTotalBalloonSize) 969 * @param puTotalSharedSize Pointer to total shared memory inside VMMR0 (in bytes) 970 */ 971 VMMR3DECL(int) PGMR3QueryVMMMemoryStats(PVM pVM, uint64_t *puTotalAllocSize, uint64_t *puTotalFreeSize, uint64_t *puTotalBalloonSize, uint64_t *puTotalSharedSize) 971 972 { 972 973 int rc; 973 974 974 uint64_t cAllocPages = 0, cFreePages = 0, cBalloonPages = 0 ;975 rc = GMMR3QueryHypervisorMemoryStats(pVM, &cAllocPages, &cFreePages, &cBalloonPages );975 uint64_t cAllocPages = 0, cFreePages = 0, cBalloonPages = 0, cSharedPages = 0; 976 rc = GMMR3QueryHypervisorMemoryStats(pVM, &cAllocPages, &cFreePages, &cBalloonPages, &cSharedPages); 976 977 AssertRCReturn(rc, rc); 977 978 … … 984 985 if (puTotalBalloonSize) 985 986 *puTotalBalloonSize = cBalloonPages * _4K; 987 988 if (puTotalSharedSize) 989 *puTotalSharedSize = cSharedPages * _4K; 990 991 return VINF_SUCCESS; 992 } 993 994 /** 995 * Query memory stats for the VM 996 * 997 * @returns VBox status code. 998 * @param pVM The VM handle. 999 * @param puTotalAllocSize Pointer to total allocated memory inside the VM (in bytes) 1000 * @param puTotalFreeSize Pointer to total free (allocated but not used yet) memory inside the VM (in bytes) 1001 * @param puTotalBalloonSize Pointer to total ballooned memory inside the VM (in bytes) 1002 * @param puTotalSharedSize Pointer to total shared memory inside the VM (in bytes) 1003 */ 1004 VMMR3DECL(int) PGMR3QueryMemoryStats(PVM pVM, uint64_t *pulTotalMem, uint64_t *pulPrivateMem, uint64_t *puTotalSharedMem, uint64_t *puTotalZeroMem) 1005 { 1006 if (pulTotalMem) 1007 *pulTotalMem = pVM->pgm.s.cAllPages * _4K; 1008 1009 if (pulPrivateMem) 1010 *pulPrivateMem = pVM->pgm.s.cPrivatePages * _4K; 1011 1012 if (puTotalSharedMem) 1013 *puTotalSharedMem = pVM->pgm.s.cReusedSharedPages * _4K; 1014 1015 if (puTotalZeroMem) 1016 *puTotalZeroMem = pVM->pgm.s.cZeroPages * _4K; 986 1017 987 1018 return VINF_SUCCESS; -
trunk/src/VBox/VMM/VMMR0/GMMR0.cpp
r29613 r29620 505 505 /** The number of pages that are shared. A subset of cAllocatedPages. */ 506 506 uint64_t cSharedPages; 507 /** The number of pages that are actually shared between VMs. */ 508 uint64_t cDuplicatePages; 507 509 /** The number of pages that are shared that has been left behind by 508 510 * VMs not doing proper cleanups. */ … … 852 854 pGMM->cAllocatedPages = 0; 853 855 pGMM->cSharedPages = 0; 856 pGMM->cDuplicatePages = 0; 854 857 pGMM->cLeftBehindSharedPages = 0; 855 858 pGMM->cChunks = 0; … … 2127 2130 pGVM->gmm.s.Allocated.cBasePages--; 2128 2131 if (!--pPage->Shared.cRefs) 2132 { 2129 2133 gmmR0FreeSharedPage(pGMM, paPages[iPage].idSharedPage, pPage); 2134 } 2135 else 2136 { 2137 Assert(pGMM->cDuplicatePages); 2138 pGMM->cDuplicatePages--; 2139 } 2130 2140 2131 2141 paPages[iPage].idSharedPage = NIL_GMM_PAGEID; … … 2667 2677 Assert(pGMM->cSharedPages > 0); 2668 2678 Assert(pGMM->cAllocatedPages > 0); 2679 2680 pGMM->cDuplicatePages++; 2669 2681 2670 2682 pPage->Shared.cRefs++; … … 3078 3090 pReq->cBalloonedPages = pGMM->cBalloonedPages; 3079 3091 pReq->cMaxPages = pGMM->cMaxPages; 3092 pReq->cSharedPages = pGMM->cDuplicatePages; 3080 3093 GMM_CHECK_SANITY_UPON_LEAVING(pGMM); 3081 3094
Note:
See TracChangeset
for help on using the changeset viewer.

