VirtualBox

Changeset 86018 in vbox for trunk/src


Ignore:
Timestamp:
Sep 3, 2020 9:13:51 AM (4 years ago)
Author:
vboxsync
Message:

NEM/Hyper-V: Make the unmap pages hack threshold configurable bugref:9044

Location:
trunk/src/VBox/VMM
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/NEMAllNativeTemplate-win.cpp.h

    r83772 r86018  
    40394039    for (unsigned iLoop = 0;; iLoop++)
    40404040    {
    4041 # ifndef NEM_WIN_USE_HYPERCALLS_FOR_PAGES
     4041//# ifndef NEM_WIN_USE_HYPERCALLS_FOR_PAGES
    40424042        /*
    40434043         * Hack alert!
    40444044         */
    40454045        uint32_t const cMappedPages = pVM->nem.s.cMappedPages;
    4046         if (cMappedPages >= 4000)
    4047         {
    4048             PGMPhysNemEnumPagesByState(pVM, pVCpu, NEM_WIN_PAGE_STATE_READABLE, nemR3WinWHvUnmapOnePageCallback, NULL);
     4046        if (   cMappedPages >= pVM->nem.s.cMappedPagesMaxBeforeUnmap
     4047            && pVM->nem.s.cMappedPagesMaxBeforeUnmap != 0)
     4048        {
     4049            PGMPhysNemEnumPagesByState(pVM, pVCpu, NEM_WIN_PAGE_STATE_READABLE, nemHCWinUnmapOnePageCallback, NULL);
    40494050            Log(("nemHCWinRunGC: Unmapped all; cMappedPages=%u -> %u\n", cMappedPages, pVM->nem.s.cMappedPages));
    40504051        }
    4051 # endif
     4052//# endif
    40524053
    40534054        /*
  • trunk/src/VBox/VMM/VMMR3/NEMR3.cpp

    r82968 r86018  
    8585#ifdef RT_OS_WINDOWS
    8686                                  "|UseRing0Runloop"
     87                                  "|MaxPagesMappedBeforeUnmap"
    8788#endif
    8889                                  ,
     
    121122    AssertLogRelRCReturn(rc, rc);
    122123    pVM->nem.s.fUseRing0Runloop = fUseRing0Runloop;
     124
     125    /** @cfgm{/NEM/MaxPagesMappedBeforeUnmap, bool, true}
     126     * Maximum nuber of pages mapped before into the Hv partition before
     127     * unmapping verything and starting from the beginning
     128     * @bugref{9044}. */
     129    uint32_t cMappedPagesMaxBeforeUnmap = 0;
     130    rc = CFGMR3QueryU32Def(pCfgNem, "MaxPagesMappedBeforeUnmap", &cMappedPagesMaxBeforeUnmap, 0);
     131    AssertLogRelRCReturn(rc, rc);
     132
     133    if (   cMappedPagesMaxBeforeUnmap < 4000
     134        && cMappedPagesMaxBeforeUnmap != 0)
     135    {
     136        LogRel(("NEM: MaxPagesMappedBeforeUnmap too small %u, setting to 4000\n", cMappedPagesMaxBeforeUnmap));
     137        cMappedPagesMaxBeforeUnmap = 4000;
     138    }
     139
     140    LogRel(("NEM: cMappedPagesMaxBeforeUnmap=%u\n", cMappedPagesMaxBeforeUnmap));
     141    pVM->nem.s.cMappedPagesMaxBeforeUnmap = cMappedPagesMaxBeforeUnmap;
    123142#endif
    124143
  • trunk/src/VBox/VMM/include/NEMInternal.h

    r83103 r86018  
    192192    /** Number of currently mapped pages. */
    193193    uint32_t volatile           cMappedPages;
     194    /** Maximum number of mappd pages before unmapping everything, 0 disables this. */
     195    uint32_t                    cMappedPagesMaxBeforeUnmap;
    194196
    195197    /** Info about the VidGetHvPartitionId I/O control interface. */
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