VirtualBox

Changeset 19004 in vbox for trunk/src/VBox/Main


Ignore:
Timestamp:
Apr 17, 2009 8:06:01 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
46102
Message:

Main/Performance: Implement memory statistics for FreeBSD. The Qt frontend relies on it to calculate the maximum allowed RAM for a VM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/freebsd/PerformanceFreeBSD.cpp

    r16016 r19004  
    2020 */
    2121
     22#include <sys/types.h>
     23#include <sys/sysctl.h>
    2224#include "Performance.h"
    2325
     
    4749int CollectorFreeBSD::getHostCpuMHz(ULONG *mhz)
    4850{
    49     return E_NOTIMPL;
     51    int CpuMHz = 0;
     52    size_t cbParameter = sizeof(int);
     53
     54    /** @todo: Howto support more than one CPU? */
     55    if (sysctlbyname("dev.cpu.0.freq", &CpuMHz, &cbParameter, NULL, 0))
     56        return VERR_NOT_SUPPORTED;
     57
     58    *mhz = CpuMHz;
     59
     60    return VINF_SUCCESS;
    5061}
    5162
    5263int CollectorFreeBSD::getHostMemoryUsage(ULONG *total, ULONG *used, ULONG *available)
    5364{
    54     return E_NOTIMPL;
     65    int rc = VINF_SUCCESS;
     66    u_long cbMemPhys;
     67    int cPagesMemFree, cPagesMemUsed, cbPage;
     68    size_t cbParameter = sizeof(u_long);
     69    int cbProcessed = 0;
     70
     71    if (!sysctlbyname("hw.physmem", &cbMemPhys, &cbParameter, NULL, 0))
     72        cbProcessed++;
     73
     74    cbParameter = sizeof(int);
     75    if (!sysctlbyname("vm.stats.vm.v_free_count", &cPagesMemFree, &cbParameter, NULL, 0))
     76        cbProcessed++;
     77    if (!sysctlbyname("vm.stats.vm.v_active_count", &cPagesMemUsed, &cbParameter, NULL, 0))
     78        cbProcessed++;
     79    if (!sysctlbyname("hw.pagesize", &cbPage, &cbParameter, NULL, 0))
     80        cbProcessed++;
     81
     82    if (cbProcessed == 4)
     83    {
     84        *total     = cbMemPhys;
     85        *used      = cPagesMemUsed * cbPage;
     86        *available = cPagesMemFree * cbPage;
     87    }
     88    else
     89        rc = VERR_NOT_SUPPORTED;
     90
     91    return rc;
    5592}
    5693
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