[ros-diffs] [cgutman] 54539: [NTOSKRNL] - Revert part of r54530 - Try to rebalance RosMm's pages if we're low on memory in ARM3 - ROS runs with 48 MB RAM again (but setup is very slow due to horrendous paging ...

cgutman at svn.reactos.org cgutman at svn.reactos.org
Tue Nov 29 18:03:12 UTC 2011


Author: cgutman
Date: Tue Nov 29 18:03:09 2011
New Revision: 54539

URL: http://svn.reactos.org/svn/reactos?rev=54539&view=rev
Log:
[NTOSKRNL]
- Revert part of r54530
- Try to rebalance RosMm's pages if we're low on memory in ARM3
- ROS runs with 48 MB RAM again (but setup is very slow due to horrendous paging caused by cache pollution)

Modified:
    trunk/reactos/ntoskrnl/mm/ARM3/pfnlist.c
    trunk/reactos/ntoskrnl/mm/balance.c

Modified: trunk/reactos/ntoskrnl/mm/ARM3/pfnlist.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/ARM3/pfnlist.c?rev=54539&r1=54538&r2=54539&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/mm/ARM3/pfnlist.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/ARM3/pfnlist.c [iso-8859-1] Tue Nov 29 18:03:09 2011
@@ -848,16 +848,22 @@
 
     /* Make an empty software PTE */
     MI_MAKE_SOFTWARE_PTE(&TempPte, MM_READWRITE);
+    
+    /* Check if we're running low on pages */
+    if (MmAvailablePages < 128)
+    {
+        DPRINT1("Warning, running low on memory: %d pages left\n", MmAvailablePages);
+
+        //MiEnsureAvailablePageOrWait(NULL, OldIrql);
+
+        /* Call RosMm and see if it can release any pages for us */
+        MmRebalanceMemoryConsumers();
+
+        DPRINT1("Rebalance complete: %d pages left\n", MmAvailablePages);
+    }
 
     /* Lock the PFN database */
     OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock);
-
-    /* Check if we're running low on pages */
-    if (MmAvailablePages < 128)
-    {
-        DPRINT1("Warning, running low on memory: %d pages left\n", MmAvailablePages);
-        //MiEnsureAvailablePageOrWait(NULL, OldIrql);
-    }
 
     /* Grab a page */
     ASSERT_LIST_INVARIANT(&MmFreePageListHead);

Modified: trunk/reactos/ntoskrnl/mm/balance.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/mm/balance.c?rev=54539&r1=54538&r2=54539&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/mm/balance.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/mm/balance.c [iso-8859-1] Tue Nov 29 18:03:09 2011
@@ -122,6 +122,7 @@
          Entry = RemoveHeadList(&AllocationListHead);
          Request = CONTAINING_RECORD(Entry, MM_ALLOCATION_REQUEST, ListEntry);
          KeReleaseSpinLock(&AllocationListLock, OldIrql);
+         if(Consumer == MC_USER) MmRemoveLRUUserPage(Page);
          MiZeroPhysicalPage(Page);
          Request->Page = Page;
          KeSetEvent(&Request->Event, IO_NO_INCREMENT, FALSE);
@@ -310,6 +311,7 @@
          KeBugCheck(NO_PAGES_AVAILABLE);
       }
 
+      if(Consumer == MC_USER) MmInsertLRULastUserPage(Page);
       *AllocatedPage = Page;
       (void)InterlockedDecrementUL(&MiPagesRequired);
        




More information about the Ros-diffs mailing list