VirtualBox

Ignore:
Timestamp:
Jan 23, 2013 1:51:33 PM (12 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
83289
Message:

Frontends/VBoxBalloonCtrl: add logic to prevent deflating the balloon if there is not sufficient host memory free, add docs

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxBalloonCtrl/VBoxModBallooning.cpp

    r43738 r44336  
    55
    66/*
    7  * Copyright (C) 2011-2012 Oracle Corporation
     7 * Copyright (C) 2011-2013 Oracle Corporation
    88 *
    99 * This file is part of VirtualBox Open Source Edition (OSE), as
     
    2525
    2626#include "VBoxWatchdogInternal.h"
     27#include <iprt/system.h>
    2728
    2829using namespace com;
     
    3536enum GETOPTDEF_BALLOONCTRL
    3637{
    37     GETOPTDEF_BALLOONCTRL_BALLOOINC = 2000,
     38    GETOPTDEF_BALLOONCTRL_BALLOONINC = 2000,
    3839    GETOPTDEF_BALLOONCTRL_BALLOONDEC,
    3940    GETOPTDEF_BALLOONCTRL_BALLOONLOWERLIMIT,
    4041    GETOPTDEF_BALLOONCTRL_BALLOONMAX,
     42    GETOPTDEF_BALLOONCTRL_BALLOONSAFETY,
    4143    GETOPTDEF_BALLOONCTRL_TIMEOUTMS,
    4244    GETOPTDEF_BALLOONCTRL_GROUPS
     
    4951    { "--balloon-dec",            GETOPTDEF_BALLOONCTRL_BALLOONDEC,        RTGETOPT_REQ_UINT32 },
    5052    { "--balloon-groups",         GETOPTDEF_BALLOONCTRL_GROUPS,            RTGETOPT_REQ_STRING },
    51     { "--balloon-inc",            GETOPTDEF_BALLOONCTRL_BALLOOINC,         RTGETOPT_REQ_UINT32 },
     53    { "--balloon-inc",            GETOPTDEF_BALLOONCTRL_BALLOONINC,        RTGETOPT_REQ_UINT32 },
    5254    { "--balloon-interval",       GETOPTDEF_BALLOONCTRL_TIMEOUTMS,         RTGETOPT_REQ_UINT32 },
    5355    { "--balloon-lower-limit",    GETOPTDEF_BALLOONCTRL_BALLOONLOWERLIMIT, RTGETOPT_REQ_UINT32 },
    54     { "--balloon-max",            GETOPTDEF_BALLOONCTRL_BALLOONMAX,        RTGETOPT_REQ_UINT32 }
     56    { "--balloon-max",            GETOPTDEF_BALLOONCTRL_BALLOONMAX,        RTGETOPT_REQ_UINT32 },
     57    { "--balloon-safety-margin",  GETOPTDEF_BALLOONCTRL_BALLOONSAFETY,     RTGETOPT_REQ_UINT32 }
    5558};
    5659
     
    6265static unsigned long g_ulMemoryBalloonMaxMB = 0;
    6366static unsigned long g_ulMemoryBalloonLowerLimitMB = 0;
     67static unsigned long g_ulMemoryBalloonSafetyMB = _1K;
    6468
    6569/** The ballooning module's payload. */
     
    112116    if (ulCurrentDesktopBalloonSize + lBalloonDelta > ulMaxBalloonSize)
    113117        lBalloonDelta = (ulMaxBalloonSize - ulCurrentDesktopBalloonSize);
     118
     119    /* Limit the ballooning to the available memory, leaving some free.
     120     * If anything fails clamp the delta to 0. */
     121    if (lBalloonDelta < 0)
     122    {
     123        uint64_t cbSafety = (uint64_t)g_ulMemoryBalloonSafetyMB * _1M;
     124        uint64_t cbHostRamAvail = 0;
     125        int vrc = RTSystemQueryAvailableRam(&cbHostRamAvail);
     126        if (RT_SUCCESS(vrc))
     127        {
     128            if (cbHostRamAvail < cbSafety)
     129                lBalloonDelta = 0;
     130            else if ((uint64_t)(-lBalloonDelta) > (cbHostRamAvail - cbSafety) / _1M)
     131                lBalloonDelta = -(long)((cbHostRamAvail - cbSafety) / _1M);
     132        }
     133        else
     134            lBalloonDelta = 0;
     135    }
     136
    114137    return lBalloonDelta;
    115138}
     
    373396                break;
    374397
    375             case GETOPTDEF_BALLOONCTRL_BALLOOINC:
     398            case GETOPTDEF_BALLOONCTRL_BALLOONINC:
    376399                g_ulMemoryBalloonIncrementMB = ValueUnion.u32;
    377400                break;
     
    387410            case GETOPTDEF_BALLOONCTRL_BALLOONMAX:
    388411                g_ulMemoryBalloonMaxMB = ValueUnion.u32;
     412                break;
     413
     414            case GETOPTDEF_BALLOONCTRL_BALLOONSAFETY:
     415                g_ulMemoryBalloonSafetyMB = ValueUnion.u32;
    389416                break;
    390417
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