summaryrefslogtreecommitdiffstats
path: root/private/ntos/cache/cachedat.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--private/ntos/cache/cachedat.c183
1 files changed, 183 insertions, 0 deletions
diff --git a/private/ntos/cache/cachedat.c b/private/ntos/cache/cachedat.c
new file mode 100644
index 000000000..e6755d915
--- /dev/null
+++ b/private/ntos/cache/cachedat.c
@@ -0,0 +1,183 @@
+/*++
+
+Copyright (c) 1990 Microsoft Corporation
+
+Module Name:
+
+ cachedat.c
+
+Abstract:
+
+ This module implements the Memory Management based cache management
+ routines for the common Cache subsystem.
+
+Author:
+
+ Tom Miller [TomM] 4-May-1990
+
+Revision History:
+
+--*/
+
+#include "cc.h"
+
+//
+// Global SharedCacheMap lists and resource to synchronize access to it.
+//
+//
+
+extern KSPIN_LOCK CcMasterSpinLock;
+LIST_ENTRY CcCleanSharedCacheMapList;
+SHARED_CACHE_MAP_LIST_CURSOR CcDirtySharedCacheMapList;
+SHARED_CACHE_MAP_LIST_CURSOR CcLazyWriterCursor;
+
+//
+// Worker thread structures:
+//
+// A spinlock to synchronize all three lists.
+// A count of the number of worker threads Cc will use
+// A listhead for preinitialized executive work items for Cc use.
+// A listhead for an express queue of WORK_QUEUE_ENTRYs
+// A listhead for a regular queue of WORK_QUEUE_ENTRYs
+//
+
+extern KSPIN_LOCK CcWorkQueueSpinlock;
+ULONG CcNumberWorkerThreads = 0;
+LIST_ENTRY CcIdleWorkerThreadList;
+LIST_ENTRY CcExpressWorkQueue;
+LIST_ENTRY CcRegularWorkQueue;
+
+//
+// Store the current idle delay and target time to clean all.
+//
+
+LARGE_INTEGER CcNoDelay;
+LARGE_INTEGER CcFirstDelay = {(ULONG)-(3*LAZY_WRITER_IDLE_DELAY), -1};
+LARGE_INTEGER CcIdleDelay = {(ULONG)-LAZY_WRITER_IDLE_DELAY, -1};
+LARGE_INTEGER CcCollisionDelay = {(ULONG)-LAZY_WRITER_COLLISION_DELAY, -1};
+LARGE_INTEGER CcTargetCleanDelay = {(ULONG)-(LONG)(LAZY_WRITER_IDLE_DELAY * (LAZY_WRITER_MAX_AGE_TARGET + 1)), -1};
+
+//
+// Spinlock for controlling access to Vacb and related global structures,
+// and a counter indicating how many Vcbs are active.
+//
+
+extern KSPIN_LOCK CcVacbSpinLock;
+ULONG CcNumberVacbs;
+
+//
+// Pointer to the global Vacb vector.
+//
+
+PVACB CcVacbs;
+PVACB CcBeyondVacbs;
+PVACB CcNextVictimVacb;
+
+//
+// Deferred write list and respective Thresholds
+//
+
+extern KSPIN_LOCK CcDeferredWriteSpinLock;
+LIST_ENTRY CcDeferredWrites;
+ULONG CcDirtyPageThreshold;
+ULONG CcDirtyPageTarget;
+ULONG CcPagesYetToWrite;
+ULONG CcPagesWrittenLastTime = 0;
+ULONG CcDirtyPagesLastScan = 0;
+ULONG CcAvailablePagesThreshold = 100;
+ULONG CcTotalDirtyPages = 0;
+
+//
+// Captured system size
+//
+
+MM_SYSTEMSIZE CcCapturedSystemSize;
+
+//
+// Tuning options du Jour
+//
+
+ULONG CcTune = 0;
+
+//
+// Global structure controlling lazy writer algorithms
+//
+
+LAZY_WRITER LazyWriter;
+
+NPAGED_LOOKASIDE_LIST CcTwilightLookasideList;
+
+#ifdef CCDBG
+
+LONG CcDebugTraceLevel = 0;
+LONG CcDebugTraceIndent = 0;
+
+#ifdef CCDBG_LOCK
+extern KSPIN_LOCK CcDebugTraceLock;
+#endif // def CCDBG_LOCK
+
+#endif
+
+//
+// Global list of pinned Bcbs which may be examined for debug purposes
+//
+
+#if DBG
+
+ULONG CcBcbCount;
+LIST_ENTRY CcBcbList;
+extern KSPIN_LOCK CcBcbSpinLock;
+
+#endif
+
+//
+// Throw away miss counter.
+//
+
+ULONG CcThrowAway;
+
+//
+// Performance Counters
+//
+
+ULONG CcFastReadNoWait;
+ULONG CcFastReadWait;
+ULONG CcFastReadResourceMiss;
+ULONG CcFastReadNotPossible;
+
+ULONG CcFastMdlReadNoWait;
+ULONG CcFastMdlReadWait;
+ULONG CcFastMdlReadResourceMiss;
+ULONG CcFastMdlReadNotPossible;
+
+ULONG CcMapDataNoWait;
+ULONG CcMapDataWait;
+ULONG CcMapDataNoWaitMiss;
+ULONG CcMapDataWaitMiss;
+
+ULONG CcPinMappedDataCount;
+
+ULONG CcPinReadNoWait;
+ULONG CcPinReadWait;
+ULONG CcPinReadNoWaitMiss;
+ULONG CcPinReadWaitMiss;
+
+ULONG CcCopyReadNoWait;
+ULONG CcCopyReadWait;
+ULONG CcCopyReadNoWaitMiss;
+ULONG CcCopyReadWaitMiss;
+
+ULONG CcMdlReadNoWait;
+ULONG CcMdlReadWait;
+ULONG CcMdlReadNoWaitMiss;
+ULONG CcMdlReadWaitMiss;
+
+ULONG CcReadAheadIos;
+
+ULONG CcLazyWriteHotSpots;
+ULONG CcLazyWriteIos;
+ULONG CcLazyWritePages;
+ULONG CcDataFlushes;
+ULONG CcDataPages;
+
+PULONG CcMissCounter = &CcThrowAway;