VirtualBox

Changeset 28012 in vbox


Ignore:
Timestamp:
Apr 6, 2010 2:52:25 PM (15 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
59719
Message:

Use PGMR3QueryFreeMemory instead

Location:
trunk
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/gmm.h

    r27999 r28012  
    399399
    400400/**
    401  * Request buffer for GMMR0QueryTotalBalloonSizeReq / VMMR0_DO_GMM_BALLOONED_PAGES.
    402  * @see GMMR0QueryTotalBalloonSize.
    403  */
    404 typedef struct GMMBALLOONQUERY
     401 * Request buffer for GMMR0QueryTotalFreePagesReq / VMMR0_DO_GMM_QUERY_TOTAL_FREE_PAGES.
     402 * @see GMMR0QueryTotalFreePagesReq.
     403 */
     404typedef struct GMMFREEQUERYREQ
    405405{
    406406    /** The header. */
    407407    SUPVMMR0REQHDR      Hdr;
    408     /** The number of ballooned pages (out). */
    409     uint64_t            cBalloonedPages;
    410 } GMMBALLOONQUERYREQ;
    411 /** Pointer to a GMMR0QueryTotalBalloonSizeReq / VMMR0_DO_GMM_QUERY_TOTAL_BALLOON_SIZE request buffer. */
    412 typedef GMMBALLOONQUERYREQ *PGMMBALLOONQUERYREQ;
    413 
    414 GMMR0DECL(int)  GMMR0QueryTotalBalloonSizeReq(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. */
     412typedef GMMFREEQUERYREQ *PGMMFREEQUERYREQ;
     413
     414GMMR0DECL(int)  GMMR0QueryTotalFreePagesReq(PVM pVM, PGMMFREEQUERYREQ pReq);
    415415
    416416/**
     
    473473GMMR3DECL(int)  GMMR3SeedChunk(PVM pVM, RTR3PTR pvR3);
    474474GMMR3DECL(int)  GMMR3BalloonedPages(PVM pVM, GMMBALLOONACTION enmAction, uint32_t cBalloonedPages);
    475 GMMR3DECL(int)  GMMR3QueryTotalBalloonSize(PVM pVM, uint64_t *pcTotalBalloonedPages);
     475GMMR3DECL(int)  GMMR3QueryTotalFreePages(PVM pVM, uint64_t *pcTotalFreePages);
    476476/** @} */
    477477#endif /* IN_RING3 */
  • trunk/include/VBox/pgm.h

    r28003 r28012  
    467467VMMR3DECL(int)      PGMR3PhysRegisterRam(PVM pVM, RTGCPHYS GCPhys, RTGCPHYS cb, const char *pszDesc);
    468468VMMR3DECL(int)      PGMR3PhysChangeMemBalloon(PVM pVM, bool fInflate, unsigned cPages, RTGCPHYS *paPhysPage);
    469 VMMR3DECL(int)      PGMR3QueryBalloonSize(PVM pVM, unsigned *puVMBalloonSize, unsigned *puTotalBalloonSize);
     469VMMR3DECL(int)      PGMR3QueryFreeMemory(PVM pVM, unsigned *puTotalFreeSize);
    470470VMMR3DECL(int)      PGMR3PhysMMIORegister(PVM pVM, RTGCPHYS GCPhys, RTGCPHYS cb,
    471471                                          R3PTRTYPE(PFNPGMR3PHYSHANDLER) pfnHandlerR3, RTR3PTR pvUserR3,
  • trunk/include/VBox/vmm.h

    r27999 r28012  
    300300    /** Call GMMR0FreeLargePage(). */
    301301    VMMR0_DO_GMM_FREE_LARGE_PAGE,
     302    /** Call GMMR0QueryTotalFreePagesReq */
     303    VMMR0_DO_GMM_QUERY_TOTAL_FREE_PAGES,
    302304    /** Call GMMR0BalloonedPages(). */
    303305    VMMR0_DO_GMM_BALLOONED_PAGES,
    304     /** Call GMMR0QueryTotalBalloonSize*/
    305     VMMR0_DO_GMM_QUERY_TOTAL_BALLOON_SIZE,
    306306    /** Call GMMR0MapUnmapChunk(). */
    307307    VMMR0_DO_GMM_MAP_UNMAP_CHUNK,
  • trunk/src/VBox/Main/GuestImpl.cpp

    r28004 r28012  
    254254
    255255STDMETHODIMP 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)
    258258{
    259259    CheckComArgOutPointerValid(aCpuUser);
     
    276276    *aMemTotal = mCurrentGuestStat[GUESTSTATTYPE_MEMTOTAL];
    277277    *aMemFree = mCurrentGuestStat[GUESTSTATTYPE_MEMFREE];
    278 
     278    *aMemBalloon = mCurrentGuestStat[GUESTSTATTYPE_MEMBALLOON];
    279279    *aMemCache = mCurrentGuestStat[GUESTSTATTYPE_MEMCACHE];
    280280    *aPageTotal = mCurrentGuestStat[GUESTSTATTYPE_PAGETOTAL];
     
    283283    if (pVM.isOk())
    284284    {
    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);
    289288        AssertRC(rc);
    290289        if (rc == VINF_SUCCESS)
    291         {
    292             *aMemBalloon      = uBalloon;
    293             *aMemBalloonTotal = uBalloonTotal;
    294         }
     290            *aMemFreeTotal = uFreeTotal;
    295291    }
    296292    else
    297     {
    298         *aMemBalloon      = 0;
    299         *aMemBalloonTotal = 0;
    300     }
     293        *aMemFreeTotal = 0;
    301294
    302295    return S_OK;
  • trunk/src/VBox/Main/HostImpl.cpp

    r28004 r28012  
    24112411    pm::SubMetric *ramUsageFree  = new pm::SubMetric("RAM/Usage/Free",
    24122412        "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
    24152414    /* Create and register base metrics */
    24162415    IUnknown *objptr;
     
    24232422    aCollector->registerBaseMetric (cpuMhz);
    24242423    pm::BaseMetric *ramUsage = new pm::HostRamUsage(hal, objptr, ramUsageTotal, ramUsageUsed,
    2425                                            ramUsageFree, ramUsageBalloon);
     2424                                           ramUsageFree);
    24262425    aCollector->registerBaseMetric (ramUsage);
    24272426
     
    24812480    aCollector->registerMetric(new pm::Metric(ramUsage, ramUsageFree,
    24822481                                              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()));
    24912482};
    24922483
  • trunk/src/VBox/Main/Performance.cpp

    r28005 r28012  
    168168        &&  iTick != mLastTick)
    169169    {
    170         ULONG ulMemBalloonTotal;
     170        ULONG ulMemFreeTotal;
    171171
    172172        mGuest->InternalGetStatistics(&mCpuUser, &mCpuKernel, &mCpuIdle,
    173                                       &mMemTotal, &mMemFree, &mMemBalloon, &ulMemBalloonTotal, &mMemCache,
    174                                       &mPageTotal);
     173                                      &mMemTotal, &mMemFree, &mMemBalloon, &mMemCache,
     174                                      &mPageTotal, &ulMemFreeTotal);
    175175
    176176        if (mHostHAL)
    177             mHostHAL->setBalloonSize(ulMemBalloonTotal);
     177            mHostHAL->setMemFreeTotal(ulMemFreeTotal);
    178178
    179179        mLastTick = iTick;
     
    303303        mTotal->put(total);
    304304        mUsed->put(used);
    305         mAvailable->put(available);
    306     }
    307     mBallooned->put(mHAL->getBalloonSize());
     305        mAvailable->put(available + mHAL->getMemFreeTotal());
     306    }
    308307}
    309308
  • trunk/src/VBox/Main/PerformanceImpl.cpp

    r28007 r28012  
    6868    "RAM/Usage/Free:min",
    6969    "RAM/Usage/Free:max",
    70     "RAM/Usage/Ballooned",
    71     "RAM/Usage/Ballooned:avg",
    72     "RAM/Usage/Ballooned:min",
    73     "RAM/Usage/Ballooned:max",
    7470    "Guest/CPU/Load/User",
    7571    "Guest/CPU/Load/User:avg",
  • trunk/src/VBox/Main/idl/VirtualBox.xidl

    r28004 r28012  
    84448444         <desc>Amount of ballooned physical guest RAM</desc>
    84458445      </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>
    84498446      <param name="memCache" type="unsigned long" dir="out">
    84508447         <desc>Total amount of guest (disk) cache memory</desc>
     
    84528449      <param name="pagedTotal" type="unsigned long" dir="out">
    84538450         <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>
    84548454      </param>
    84558455    </method>
  • trunk/src/VBox/Main/include/GuestImpl.h

    r28004 r28012  
    8989                              ULONG aTimeoutMS, ULONG* aPID, IProgress **aProgress);
    9090    STDMETHOD(InternalGetStatistics)(ULONG *aCpuUser, ULONG *aCpuKernel, ULONG *aCpuIdle,
    91                                      ULONG *aMemTotal, ULONG *aMemFree, ULONG *aMemBalloon, ULONG *aMemBalloonTotal, ULONG *aMemCache,
    92                                      ULONG *aPageTotal);
     91                                     ULONG *aMemTotal, ULONG *aMemFree, ULONG *aMemBalloon, ULONG *aMemCache,
     92                                     ULONG *aPageTotal, ULONG *aMemFreeTotal);
    9393
    9494    // public methods that are not in IDL
  • trunk/src/VBox/Main/include/Performance.h

    r28005 r28012  
    139139    {
    140140    public:
    141                  CollectorHAL() : mMemBalloonTotal(0) {};
     141                 CollectorHAL() : mMemFreeTotal(0) {};
    142142        virtual ~CollectorHAL() { };
    143143        virtual int preCollect(const CollectorHints& /* hints */, uint64_t /* iTick */) { return VINF_SUCCESS; }
     
    163163        virtual int disable();
    164164
    165         virtual int setBalloonSize(ULONG balloonsize)
    166         {
    167             mMemBalloonTotal = balloonsize;
     165        virtual int setMemFreeTotal(ULONG memfree)
     166        {
     167            mMemFreeTotal = memfree;
    168168            return S_OK;
    169169        }
    170170
    171         virtual ULONG getBalloonSize()
    172         {
    173             return mMemBalloonTotal;
    174         }
    175 
    176     private:
    177         ULONG       mMemBalloonTotal;
     171        virtual ULONG getMemFreeTotal()
     172        {
     173            return mMemFreeTotal;
     174        }
     175
     176    private:
     177        ULONG       mMemFreeTotal;
    178178    };
    179179
     
    335335    {
    336336    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; };
    340340
    341341        void init(ULONG period, ULONG length);
     
    350350        SubMetric *mUsed;
    351351        SubMetric *mAvailable;
    352         SubMetric *mBallooned;
    353352    };
    354353
  • trunk/src/VBox/VMM/GMM.cpp

    r28000 r28012  
    291291
    292292/**
    293  * @see GMMR0QueryTotalBalloonSizeReq
    294  */
    295 GMMR3DECL(int)  GMMR3QueryTotalBalloonSize(PVM pVM, uint64_t *pcTotalBalloonedPages)
    296 {
    297     GMMBALLOONQUERYREQ Req;
    298     Req.Hdr.u32Magic = SUPVMMR0REQHDR_MAGIC;
    299     Req.Hdr.cbReq = sizeof(Req);
    300     Req.cBalloonedPages = 0;
    301 
    302     *pcTotalBalloonedPages = 0;
    303     int rc = VMMR3CallR0(pVM, VMMR0_DO_GMM_QUERY_TOTAL_BALLOON_SIZE, 0, &Req.Hdr);
     293 * @see GMMR0QueryTotalFreePagesReq
     294 */
     295GMMR3DECL(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);
    304304    if (rc == VINF_SUCCESS)
    305         *pcTotalBalloonedPages = Req.cBalloonedPages;
     305        *pcTotalFreePages = Req.cFreePages;
    306306
    307307    return rc;
  • trunk/src/VBox/VMM/PGMPhys.cpp

    r28003 r28012  
    954954
    955955/**
    956  * Query the VM and host balloon sizes
     956 * Query the amount of free memory inside VMMR0
    957957 *
    958958 * @returns VBox status code.
    959959 * @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 */
     962VMMR3DECL(int) PGMR3QueryFreeMemory(PVM pVM, unsigned *puTotalFreeSize)
    964963{
    965964    int rc = VINF_SUCCESS;
    966965
    967     if (puVMBalloonSize)
    968         *puVMBalloonSize = pVM->pgm.s.cBalloonedPages * _4K / _1M;
    969 
    970     if (puTotalBalloonSize)
     966    if (puTotalFreeSize)
    971967    {
    972968        uint64_t cPages = 0;
    973         rc = GMMR3QueryTotalBalloonSize(pVM, &cPages);
     969        rc = GMMR3QueryTotalFreePages(pVM, &cPages);
    974970        AssertRC(rc);
    975         *puTotalBalloonSize = (unsigned) (cPages * _4K / _1M);
     971        *puTotalFreeSize = (unsigned) (cPages * _4K / _1M);
    976972    }
    977973
  • trunk/src/VBox/VMM/VMMR0/GMMR0.cpp

    r27999 r28012  
    29922992
    29932993/**
    2994  * Return the total amount of ballooned pages for all VMs
     2994 * Return the total amount of free pages
    29952995 *
    29962996 * @returns VBox status code:
     
    29982998 * @param   pReq            The request packet.
    29992999 */
    3000 GMMR0DECL(int) GMMR0QueryTotalBalloonSizeReq(PVM pVM, PGMMBALLOONQUERYREQ pReq)
     3000GMMR0DECL(int) GMMR0QueryTotalFreePagesReq(PVM pVM, PGMMFREEQUERYREQ pReq)
    30013001{
    30023002    /*
     
    30053005    AssertPtrReturn(pVM, VERR_INVALID_POINTER);
    30063006    AssertPtrReturn(pReq, VERR_INVALID_POINTER);
    3007     AssertMsgReturn(pReq->Hdr.cbReq == sizeof(GMMBALLOONQUERYREQ),
    3008                     ("%#x < %#x\n", pReq->Hdr.cbReq, sizeof(GMMBALLOONQUERYREQ)),
     3007    AssertMsgReturn(pReq->Hdr.cbReq == sizeof(GMMFREEQUERYREQ),
     3008                    ("%#x < %#x\n", pReq->Hdr.cbReq, sizeof(GMMFREEQUERYREQ)),
    30093009                    VERR_INVALID_PARAMETER);
    30103010
     
    30143014    PGMM pGMM;
    30153015    GMM_GET_VALID_INSTANCE(pGMM, VERR_INTERNAL_ERROR);
    3016     pReq->cBalloonedPages = pGMM->cBalloonedPages;
     3016    pReq->cFreePages = (pGMM->cChunks << GMM_CHUNK_SHIFT) - pGMM->cAllocatedPages;
    30173017    GMM_CHECK_SANITY_UPON_LEAVING(pGMM);
    30183018
  • trunk/src/VBox/VMM/VMMR0/VMMR0.cpp

    r27999 r28012  
    910910            return GMMR0FreeLargePageReq(pVM, idCpu, (PGMMFREELARGEPAGEREQ)pReqHdr);
    911911
     912        case VMMR0_DO_GMM_QUERY_TOTAL_FREE_PAGES:
     913            if (u64Arg)
     914                return VERR_INVALID_PARAMETER;
     915            return GMMR0QueryTotalFreePagesReq(pVM, (PGMMFREEQUERYREQ)pReqHdr);
     916
    912917        case VMMR0_DO_GMM_BALLOONED_PAGES:
    913918            if (u64Arg)
    914919                return VERR_INVALID_PARAMETER;
    915920            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);
    921921
    922922        case VMMR0_DO_GMM_MAP_UNMAP_CHUNK:
Note: See TracChangeset for help on using the changeset viewer.

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