Changeset 28012 in vbox
- Timestamp:
- Apr 6, 2010 2:52:25 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 59719
- Location:
- trunk
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/gmm.h
r27999 r28012 399 399 400 400 /** 401 * Request buffer for GMMR0QueryTotal BalloonSizeReq / VMMR0_DO_GMM_BALLOONED_PAGES.402 * @see GMMR0QueryTotal BalloonSize.403 */ 404 typedef struct GMM BALLOONQUERY401 * Request buffer for GMMR0QueryTotalFreePagesReq / VMMR0_DO_GMM_QUERY_TOTAL_FREE_PAGES. 402 * @see GMMR0QueryTotalFreePagesReq. 403 */ 404 typedef struct GMMFREEQUERYREQ 405 405 { 406 406 /** The header. */ 407 407 SUPVMMR0REQHDR Hdr; 408 /** The number of balloonedpages (out). */409 uint64_t c BalloonedPages;410 } GMM BALLOONQUERYREQ;411 /** Pointer to a GMMR0QueryTotal BalloonSizeReq / VMMR0_DO_GMM_QUERY_TOTAL_BALLOON_SIZErequest buffer. */412 typedef GMM BALLOONQUERYREQ *PGMMBALLOONQUERYREQ;413 414 GMMR0DECL(int) GMMR0QueryTotal BalloonSizeReq(PVM pVM, PGMMBALLOONQUERYREQ pReq);408 /** The number of free pages (out). */ 409 uint64_t cFreePages; 410 } GMMFREEQUERYREQ; 411 /** Pointer to a GMMR0QueryTotalFreePagesReq / VMMR0_DO_GMM_QUERY_TOTAL_FREE_PAGES request buffer. */ 412 typedef GMMFREEQUERYREQ *PGMMFREEQUERYREQ; 413 414 GMMR0DECL(int) GMMR0QueryTotalFreePagesReq(PVM pVM, PGMMFREEQUERYREQ pReq); 415 415 416 416 /** … … 473 473 GMMR3DECL(int) GMMR3SeedChunk(PVM pVM, RTR3PTR pvR3); 474 474 GMMR3DECL(int) GMMR3BalloonedPages(PVM pVM, GMMBALLOONACTION enmAction, uint32_t cBalloonedPages); 475 GMMR3DECL(int) GMMR3QueryTotal BalloonSize(PVM pVM, uint64_t *pcTotalBalloonedPages);475 GMMR3DECL(int) GMMR3QueryTotalFreePages(PVM pVM, uint64_t *pcTotalFreePages); 476 476 /** @} */ 477 477 #endif /* IN_RING3 */ -
trunk/include/VBox/pgm.h
r28003 r28012 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) PGMR3Query BalloonSize(PVM pVM, unsigned *puVMBalloonSize, unsigned *puTotalBalloonSize);469 VMMR3DECL(int) PGMR3QueryFreeMemory(PVM pVM, unsigned *puTotalFreeSize); 470 470 VMMR3DECL(int) PGMR3PhysMMIORegister(PVM pVM, RTGCPHYS GCPhys, RTGCPHYS cb, 471 471 R3PTRTYPE(PFNPGMR3PHYSHANDLER) pfnHandlerR3, RTR3PTR pvUserR3, -
trunk/include/VBox/vmm.h
r27999 r28012 300 300 /** Call GMMR0FreeLargePage(). */ 301 301 VMMR0_DO_GMM_FREE_LARGE_PAGE, 302 /** Call GMMR0QueryTotalFreePagesReq */ 303 VMMR0_DO_GMM_QUERY_TOTAL_FREE_PAGES, 302 304 /** Call GMMR0BalloonedPages(). */ 303 305 VMMR0_DO_GMM_BALLOONED_PAGES, 304 /** Call GMMR0QueryTotalBalloonSize*/305 VMMR0_DO_GMM_QUERY_TOTAL_BALLOON_SIZE,306 306 /** Call GMMR0MapUnmapChunk(). */ 307 307 VMMR0_DO_GMM_MAP_UNMAP_CHUNK, -
trunk/src/VBox/Main/GuestImpl.cpp
r28004 r28012 254 254 255 255 STDMETHODIMP Guest::InternalGetStatistics(ULONG *aCpuUser, ULONG *aCpuKernel, ULONG *aCpuIdle, 256 ULONG *aMemTotal, ULONG *aMemFree, ULONG *aMemBalloon, ULONG *aMemBalloonTotal,257 ULONG *aMemCache, ULONG *aPageTotal )256 ULONG *aMemTotal, ULONG *aMemFree, ULONG *aMemBalloon, 257 ULONG *aMemCache, ULONG *aPageTotal, ULONG *aMemFreeTotal) 258 258 { 259 259 CheckComArgOutPointerValid(aCpuUser); … … 276 276 *aMemTotal = mCurrentGuestStat[GUESTSTATTYPE_MEMTOTAL]; 277 277 *aMemFree = mCurrentGuestStat[GUESTSTATTYPE_MEMFREE]; 278 278 *aMemBalloon = mCurrentGuestStat[GUESTSTATTYPE_MEMBALLOON]; 279 279 *aMemCache = mCurrentGuestStat[GUESTSTATTYPE_MEMCACHE]; 280 280 *aPageTotal = mCurrentGuestStat[GUESTSTATTYPE_PAGETOTAL]; … … 283 283 if (pVM.isOk()) 284 284 { 285 unsigned uBalloon, uBalloonTotal; 286 *aMemBalloon = 0; 287 *aMemBalloonTotal = 0; 288 int rc = PGMR3QueryBalloonSize(pVM.raw(), &uBalloon, &uBalloonTotal); 285 unsigned uFreeTotal; 286 *aMemFreeTotal = 0; 287 int rc = PGMR3QueryFreeMemory(pVM.raw(), &uFreeTotal); 289 288 AssertRC(rc); 290 289 if (rc == VINF_SUCCESS) 291 { 292 *aMemBalloon = uBalloon; 293 *aMemBalloonTotal = uBalloonTotal; 294 } 290 *aMemFreeTotal = uFreeTotal; 295 291 } 296 292 else 297 { 298 *aMemBalloon = 0; 299 *aMemBalloonTotal = 0; 300 } 293 *aMemFreeTotal = 0; 301 294 302 295 return S_OK; -
trunk/src/VBox/Main/HostImpl.cpp
r28004 r28012 2411 2411 pm::SubMetric *ramUsageFree = new pm::SubMetric("RAM/Usage/Free", 2412 2412 "Physical memory currently available to applications."); 2413 pm::SubMetric *ramUsageBalloon = new pm::SubMetric("RAM/Usage/Ballooned", 2414 "Physical memory currently available from guest balloons."); 2413 2415 2414 /* Create and register base metrics */ 2416 2415 IUnknown *objptr; … … 2423 2422 aCollector->registerBaseMetric (cpuMhz); 2424 2423 pm::BaseMetric *ramUsage = new pm::HostRamUsage(hal, objptr, ramUsageTotal, ramUsageUsed, 2425 ramUsageFree , ramUsageBalloon);2424 ramUsageFree); 2426 2425 aCollector->registerBaseMetric (ramUsage); 2427 2426 … … 2481 2480 aCollector->registerMetric(new pm::Metric(ramUsage, ramUsageFree, 2482 2481 new pm::AggregateMax())); 2483 2484 aCollector->registerMetric(new pm::Metric(ramUsage, ramUsageBalloon, 0));2485 aCollector->registerMetric(new pm::Metric(ramUsage, ramUsageBalloon,2486 new pm::AggregateAvg()));2487 aCollector->registerMetric(new pm::Metric(ramUsage, ramUsageBalloon,2488 new pm::AggregateMin()));2489 aCollector->registerMetric(new pm::Metric(ramUsage, ramUsageBalloon,2490 new pm::AggregateMax()));2491 2482 }; 2492 2483 -
trunk/src/VBox/Main/Performance.cpp
r28005 r28012 168 168 && iTick != mLastTick) 169 169 { 170 ULONG ulMem BalloonTotal;170 ULONG ulMemFreeTotal; 171 171 172 172 mGuest->InternalGetStatistics(&mCpuUser, &mCpuKernel, &mCpuIdle, 173 &mMemTotal, &mMemFree, &mMemBalloon, & ulMemBalloonTotal, &mMemCache,174 &mPageTotal );173 &mMemTotal, &mMemFree, &mMemBalloon, &mMemCache, 174 &mPageTotal, &ulMemFreeTotal); 175 175 176 176 if (mHostHAL) 177 mHostHAL->set BalloonSize(ulMemBalloonTotal);177 mHostHAL->setMemFreeTotal(ulMemFreeTotal); 178 178 179 179 mLastTick = iTick; … … 303 303 mTotal->put(total); 304 304 mUsed->put(used); 305 mAvailable->put(available); 306 } 307 mBallooned->put(mHAL->getBalloonSize()); 305 mAvailable->put(available + mHAL->getMemFreeTotal()); 306 } 308 307 } 309 308 -
trunk/src/VBox/Main/PerformanceImpl.cpp
r28007 r28012 68 68 "RAM/Usage/Free:min", 69 69 "RAM/Usage/Free:max", 70 "RAM/Usage/Ballooned",71 "RAM/Usage/Ballooned:avg",72 "RAM/Usage/Ballooned:min",73 "RAM/Usage/Ballooned:max",74 70 "Guest/CPU/Load/User", 75 71 "Guest/CPU/Load/User:avg", -
trunk/src/VBox/Main/idl/VirtualBox.xidl
r28004 r28012 8444 8444 <desc>Amount of ballooned physical guest RAM</desc> 8445 8445 </param> 8446 <param name="memBalloonTotal" type="unsigned long" dir="out">8447 <desc>Amount of ballooned physical guest RAM for all running VMs</desc>8448 </param>8449 8446 <param name="memCache" type="unsigned long" dir="out"> 8450 8447 <desc>Total amount of guest (disk) cache memory</desc> … … 8452 8449 <param name="pagedTotal" type="unsigned long" dir="out"> 8453 8450 <desc>Total amount of space in the page file</desc> 8451 </param> 8452 <param name="memFreeTotal" type="unsigned long" dir="out"> 8453 <desc>Total amount of free memory available in VMMR0</desc> 8454 8454 </param> 8455 8455 </method> -
trunk/src/VBox/Main/include/GuestImpl.h
r28004 r28012 89 89 ULONG aTimeoutMS, ULONG* aPID, IProgress **aProgress); 90 90 STDMETHOD(InternalGetStatistics)(ULONG *aCpuUser, ULONG *aCpuKernel, ULONG *aCpuIdle, 91 ULONG *aMemTotal, ULONG *aMemFree, ULONG *aMemBalloon, ULONG *aMem BalloonTotal, ULONG *aMemCache,92 ULONG *aPageTotal );91 ULONG *aMemTotal, ULONG *aMemFree, ULONG *aMemBalloon, ULONG *aMemCache, 92 ULONG *aPageTotal, ULONG *aMemFreeTotal); 93 93 94 94 // public methods that are not in IDL -
trunk/src/VBox/Main/include/Performance.h
r28005 r28012 139 139 { 140 140 public: 141 CollectorHAL() : mMem BalloonTotal(0) {};141 CollectorHAL() : mMemFreeTotal(0) {}; 142 142 virtual ~CollectorHAL() { }; 143 143 virtual int preCollect(const CollectorHints& /* hints */, uint64_t /* iTick */) { return VINF_SUCCESS; } … … 163 163 virtual int disable(); 164 164 165 virtual int set BalloonSize(ULONG balloonsize)166 { 167 mMem BalloonTotal = balloonsize;165 virtual int setMemFreeTotal(ULONG memfree) 166 { 167 mMemFreeTotal = memfree; 168 168 return S_OK; 169 169 } 170 170 171 virtual ULONG get BalloonSize()172 { 173 return mMem BalloonTotal;174 } 175 176 private: 177 ULONG mMem BalloonTotal;171 virtual ULONG getMemFreeTotal() 172 { 173 return mMemFreeTotal; 174 } 175 176 private: 177 ULONG mMemFreeTotal; 178 178 }; 179 179 … … 335 335 { 336 336 public: 337 HostRamUsage(CollectorHAL *hal, ComPtr<IUnknown> object, SubMetric *total, SubMetric *used, SubMetric *available , SubMetric *ballooned)338 : BaseMetric(hal, "RAM/Usage", object), mTotal(total), mUsed(used), mAvailable(available) , mBallooned(ballooned){};339 ~HostRamUsage() { delete mTotal; delete mUsed; delete mAvailable; delete mBallooned;};337 HostRamUsage(CollectorHAL *hal, ComPtr<IUnknown> object, SubMetric *total, SubMetric *used, SubMetric *available) 338 : BaseMetric(hal, "RAM/Usage", object), mTotal(total), mUsed(used), mAvailable(available) {}; 339 ~HostRamUsage() { delete mTotal; delete mUsed; delete mAvailable; }; 340 340 341 341 void init(ULONG period, ULONG length); … … 350 350 SubMetric *mUsed; 351 351 SubMetric *mAvailable; 352 SubMetric *mBallooned;353 352 }; 354 353 -
trunk/src/VBox/VMM/GMM.cpp
r28000 r28012 291 291 292 292 /** 293 * @see GMMR0QueryTotal BalloonSizeReq294 */ 295 GMMR3DECL(int) GMMR3QueryTotal BalloonSize(PVM pVM, uint64_t *pcTotalBalloonedPages)296 { 297 GMM BALLOONQUERYREQ Req;298 Req.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC; 299 Req.Hdr.cbReq = sizeof(Req); 300 Req.c BalloonedPages = 0;301 302 *pcTotal BalloonedPages = 0;303 int rc = VMMR3CallR0(pVM, VMMR0_DO_GMM_QUERY_TOTAL_ BALLOON_SIZE, 0, &Req.Hdr);293 * @see GMMR0QueryTotalFreePagesReq 294 */ 295 GMMR3DECL(int) GMMR3QueryTotalFreePages(PVM pVM, uint64_t *pcTotalFreePages) 296 { 297 GMMFREEQUERYREQ Req; 298 Req.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC; 299 Req.Hdr.cbReq = sizeof(Req); 300 Req.cFreePages = 0; 301 302 *pcTotalFreePages = 0; 303 int rc = VMMR3CallR0(pVM, VMMR0_DO_GMM_QUERY_TOTAL_FREE_PAGES, 0, &Req.Hdr); 304 304 if (rc == VINF_SUCCESS) 305 *pcTotal BalloonedPages = Req.cBalloonedPages;305 *pcTotalFreePages = Req.cFreePages; 306 306 307 307 return rc; -
trunk/src/VBox/VMM/PGMPhys.cpp
r28003 r28012 954 954 955 955 /** 956 * Query the VM and host balloon sizes956 * Query the amount of free memory inside VMMR0 957 957 * 958 958 * @returns VBox status code. 959 959 * @param pVM The VM handle. 960 * @param puVMBalloonSize Pointer to VM balloon size (in megabytes) 961 * @param puTotalBalloonSize Pointer to total balloon size of all VMs (in megabytes) 962 */ 963 VMMR3DECL(int) PGMR3QueryBalloonSize(PVM pVM, unsigned *puVMBalloonSize, unsigned *puTotalBalloonSize) 960 * @param puTotalFreeSize Pointer to total free (allocated but not used yet) memory inside VMMR0 (in megabytes) 961 */ 962 VMMR3DECL(int) PGMR3QueryFreeMemory(PVM pVM, unsigned *puTotalFreeSize) 964 963 { 965 964 int rc = VINF_SUCCESS; 966 965 967 if (puVMBalloonSize) 968 *puVMBalloonSize = pVM->pgm.s.cBalloonedPages * _4K / _1M; 969 970 if (puTotalBalloonSize) 966 if (puTotalFreeSize) 971 967 { 972 968 uint64_t cPages = 0; 973 rc = GMMR3QueryTotal BalloonSize(pVM, &cPages);969 rc = GMMR3QueryTotalFreePages(pVM, &cPages); 974 970 AssertRC(rc); 975 *puTotal BalloonSize = (unsigned) (cPages * _4K / _1M);971 *puTotalFreeSize = (unsigned) (cPages * _4K / _1M); 976 972 } 977 973 -
trunk/src/VBox/VMM/VMMR0/GMMR0.cpp
r27999 r28012 2992 2992 2993 2993 /** 2994 * Return the total amount of ballooned pages for all VMs2994 * Return the total amount of free pages 2995 2995 * 2996 2996 * @returns VBox status code: … … 2998 2998 * @param pReq The request packet. 2999 2999 */ 3000 GMMR0DECL(int) GMMR0QueryTotal BalloonSizeReq(PVM pVM, PGMMBALLOONQUERYREQ pReq)3000 GMMR0DECL(int) GMMR0QueryTotalFreePagesReq(PVM pVM, PGMMFREEQUERYREQ pReq) 3001 3001 { 3002 3002 /* … … 3005 3005 AssertPtrReturn(pVM, VERR_INVALID_POINTER); 3006 3006 AssertPtrReturn(pReq, VERR_INVALID_POINTER); 3007 AssertMsgReturn(pReq->Hdr.cbReq == sizeof(GMM BALLOONQUERYREQ),3008 ("%#x < %#x\n", pReq->Hdr.cbReq, sizeof(GMM BALLOONQUERYREQ)),3007 AssertMsgReturn(pReq->Hdr.cbReq == sizeof(GMMFREEQUERYREQ), 3008 ("%#x < %#x\n", pReq->Hdr.cbReq, sizeof(GMMFREEQUERYREQ)), 3009 3009 VERR_INVALID_PARAMETER); 3010 3010 … … 3014 3014 PGMM pGMM; 3015 3015 GMM_GET_VALID_INSTANCE(pGMM, VERR_INTERNAL_ERROR); 3016 pReq->c BalloonedPages = pGMM->cBalloonedPages;3016 pReq->cFreePages = (pGMM->cChunks << GMM_CHUNK_SHIFT) - pGMM->cAllocatedPages; 3017 3017 GMM_CHECK_SANITY_UPON_LEAVING(pGMM); 3018 3018 -
trunk/src/VBox/VMM/VMMR0/VMMR0.cpp
r27999 r28012 910 910 return GMMR0FreeLargePageReq(pVM, idCpu, (PGMMFREELARGEPAGEREQ)pReqHdr); 911 911 912 case VMMR0_DO_GMM_QUERY_TOTAL_FREE_PAGES: 913 if (u64Arg) 914 return VERR_INVALID_PARAMETER; 915 return GMMR0QueryTotalFreePagesReq(pVM, (PGMMFREEQUERYREQ)pReqHdr); 916 912 917 case VMMR0_DO_GMM_BALLOONED_PAGES: 913 918 if (u64Arg) 914 919 return VERR_INVALID_PARAMETER; 915 920 return GMMR0BalloonedPagesReq(pVM, idCpu, (PGMMBALLOONEDPAGESREQ)pReqHdr); 916 917 case VMMR0_DO_GMM_QUERY_TOTAL_BALLOON_SIZE:918 if (u64Arg)919 return VERR_INVALID_PARAMETER;920 return GMMR0QueryTotalBalloonSizeReq(pVM, (PGMMBALLOONQUERYREQ)pReqHdr);921 921 922 922 case VMMR0_DO_GMM_MAP_UNMAP_CHUNK:
Note:
See TracChangeset
for help on using the changeset viewer.