דלגו לתוכן

DPC ו-Kernel Executive workers ב-Windows 11 25H2

בדף זה

הקבוצה DpcQueueDepth, worker limits ופרמטרי watchdog נתפסת לעתים קרובות כמערכת של latency tweaks אוניברסליים. למעשה מדובר במגבלות פנימיות ובמנגנוני הגנה של הליבה. ההשפעה שלהם מתבטאת רק בתור DPC מסוים, במספר מעבדים, בסוג драйвера או בשגיאת worker.

נבדק אילו מגבלות DPC, worker threads ו-watchdog קורא הקernel, כיצד מנורמלים הערכים והיכן מנגנונים אלה באמת מיושמים.

Windows 11 25H2 build 26200.9168, ענפים Session Manager\Kernel ו-Session Manager\Executive. תכונות תלויות חומרה ודרייברים ספציפיים לא נכללו במדידות.

ניתוח סטטי של ntoskrnl.exe: איתור readers וצרכנים, בדיקת טווחים ונרמול ערכים; הצלבה עם התיעוד הציבורי של Microsoft.

נתיב DPC ו-watchdog:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Kernel

Value Type Default/normalization מה שולט
DpcQueueDepth REG_DWORD 4 עומק DPC queue
MinimumDpcRate REG_DWORD 3 תדר מינימלי של עיבוד DPC
IdealDpcRate REG_DWORD 20 יעד DPC rate
AdjustDpcThreshold REG_DWORD 20 סף הסתגלות של DPC policy
ThreadDpcEnable REG_DWORD 1 thread-DPC processing
DpcWatchdogPeriod REG_DWORD 120000 תקופת DPC watchdog
DpcCumulativeSoftTimeout REG_DWORD 120000 ב-build שנחקר soft budget מצטבר
PassiveWatchdogTimeout REG_DWORD 300 שניות passive-level watchdog בעת KD
ForceIdleGracePeriod REG_DWORD 5 שניות force-idle grace period
PerfIsoEnabled REG_DWORD 0 performance isolation
CacheIsoBitmap REG_DWORD 0 Intel CAT L3 mask
SchedulerAssistThreadFlagOverride REG_DWORD 0 scheduler assist override
VpThreadSystemWorkPriority REG_DWORD 30, טווח 1..31 virtual processor work priority
AlwaysTrackIoBoosting REG_DWORD 0 מעקב אבחוני אחר I/O boost

נתיב Kernel Executive workers:

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Executive

Value Type Default/normalization מה שולט
AdditionalCriticalWorkerThreads REG_DWORD 0, clamp 0..100 critical workers נוספים
AdditionalDelayedWorkerThreads REG_DWORD 0, clamp 0..100 delayed workers
MaximumKernelWorkerThreads REG_DWORD 4096, 32..16384 גבול עליון של kernel workers
ForceEnableMutantAutoboost REG_DWORD 0 mutant autoboost
WorkerThreadTimeoutInSeconds REG_DWORD 600, 60..3600 worker timeout

Session Manager\Kernel ו-Session Manager\Executive הם ענפי תצורה שונים. עבור כל ערך חשוב הנתיב שפותח reader של הליבה ב-build זה.

הליבה משתמשת ב-DpcQueueDepth, MinimumDpcRate, IdealDpcRate ו-AdjustDpcThreshold כדי לשלוט בתור ובהסתגלות של DPC processing. ערכי ה-defaults שנבדקו 4/3/20/20 כבר תואמים למצב התקני של Windows 11 25H2; כתיבה חוזרת של מספרים אלה אינה משנה דבר.

תועלת: פרמטרים אלה יכולים להיות שימושיים בניתוח DPC backlog מסוים, אך ללא ETW/WPR-טראס שינוי בעיוורון אינו מאבחן את הסיבה. תור גדול עשוי לדחות את העיבוד ולהגדיל את זנב ההשהיה.

ThreadDpcEnable=1 מפעיל threaded-DPC infrastructure, 0 מחזיר את העבודה לנתיב DIRQL רגיל ועלול להאריך חלונות interrupt-off. MaximumKernelWorkerThreads מגביל את מאגר ה-kernel workers הכולל. AdditionalCriticalWorkerThreads ו-AdditionalDelayedWorkerThreads מתווספים למאגרים הבסיסיים: ב-Windows לקוח אלה בהתאמה 5 critical ו-7 delayed workers לפני החלת override.

יותר threads אינו אומר פחות latency: workers נוספים צורכים stack, scheduler time ומשאבי cache, והתור עשוי להיות מוגבל על ידי רכיב אחר. AdditionalDelayedWorkerThreads=32 אכן מוסיף delayed workers, אך אין רווח אוניברסלי מדיד.

DpcCumulativeSoftTimeout מגביל את הזמן המצטבר של DPC. DpcWatchdogPeriod=0 מותר ומכבה watchdog זה; כל ערך שאינו אפס ונמוך מ-2000 הופך ל-2000 ms. PassiveWatchdogTimeout משמש רק כאשר kernel debugger מופעל, ולכן במערכת רגילה טיימר זה אינו פעיל גם עם 300 שניות תקניות. WorkerThreadTimeoutInSeconds מגביל תקיעה של worker operation.

ל-DpcCumulativeSoftTimeout יש גבול תחתון של 2000 ms והוא אינו יכול לעלות על DpcWatchdogPeriod. כדי לקבל ערך 240000, גם watchdog period חייב להיות 240000. WorkerThreadTimeoutInSeconds מנורמל לטווח 60..3600 שניות; כתיבת 0 אינה מכבה את ה-timeout, אלא מביאה לערך המינימלי.

כיבוי timeout מגן מסיר את האבחון, אך אינו מתקן את סיבת החסימה. עבור מערכת production, watchdog הוא חלק ממנגנון איתור דרייברים תקולים.

ForceEnableMutantAutoboost נמצא בענף Executive, ואילו ForceIdleGracePeriod, PerfIsoEnabled, CacheIsoBitmap, SchedulerAssistThreadFlagOverride, VpThreadSystemWorkPriority ו-AlwaysTrackIoBoosting נקראים מהענף Kernel. הבחנה זו קריטית: רשומה בעלת שם זהה במפתח שכן אינה מיושמת.

CacheIsoBitmap משמש רק כאשר קיימת תמיכה ב-Intel Resource Director/CAT; ללא CAT הערך אינו יוצר בידוד. SchedulerAssistThreadFlagOverride=0 ו-1 משאירים הפעלה אוטומטית, 2 מכבה את הענף בכוח. VpThreadSystemWorkPriority מתיר 1..31, אחרת מאופס ל-1; ה-default 30, ו-31 הוא רק גבול עליון. AlwaysTrackIoBoosting=1 מפעיל allocation ו-stack-capture אבחוניים ב-boost paths, ואינו מחזיק I/O priority מוגבר.

תועלת: ללא consumer מאומת ההשפעה בדרך כלל חסרה או קטנה מכדי להכריע באופן מעשי. ערכים כאלה שימושיים כנושא לאבחון kernel נפרד, ולא כמערכת אופטימיזציה כללית.

ערכי ה-defaults שנבדקו 4/3/20/20 תואמים למצב התקני של Windows 11 25H2. workers נוספים כברירת מחדל שווים לאפס, הגבול העליון של kernel workers הוא 4096 עם טווח 32..16384. פרמטרי watchdog מנורמלים: ערך נמוך מ-2000 ms הופך ל-2000, ו-DpcCumulativeSoftTimeout אינו עולה על תקופת ה-watchdog. הענפים Kernel ו-Executive אינם ניתנים להחלפה הדדית.

  • Readers וצרכנים של הפרמטרים ב-ntoskrnl.exe של ה-build שנחקר.
  • ערכי ברירת מחדל וגבולות נרמול, כולל תלויות בין פרמטרי watchdog.
  • הפרדה בין הענפים Kernel ו-Executive: רשומה בעלת שם זהה במפתח שכן אינה מיושמת.
  • השפעת שינוי הפרמטרים על FPS, השהיה או היענות.
  • התועלת של שינוי המגבלות ללא בעיה מאומתת בתור DPC או ב-worker.

אל תשנו פרמטרים אלה בעיוורון: ללא ETW/WPR-טראס לא ניתן לקבוע את סיבת ה-backlog. עבור מערכת פעילה השאירו את ה-watchdog מופעל, והשתמשו בפרמטרים לאבחון, ולא כמערכת אופטימיזציה.

החזירו את הערכים התקניים או מחקו רשומות אופציונליות. פרמטרי הליבה מיושמים באתחול הבא של Windows.

Readers ו-consumers נבדקו ב-ntoskrnl.exe Windows 11 25H2 build 26200.9168. לא מפורסמים offsets או פסאודו-קוד. מדדי משתמש סופיים לא נכללו בסדרה זו.

כיצד לחזור על החלק הדינמי של התצפיות — ראו כיצד לבדוק בעצמכם.

המחקר והכלים שבהם נעשה שימוש שייכים למפתח BoosterX, ולכן למפתח יש אינטרס ישיר בתוצאות. המתודולוגיה וגבולות התחולה מתוארים לעיל, ואת המסקנות ניתן לאמת לפי הנתונים הפתוחים והמקורות הציבוריים המפורטים.

המקורות הציבוריים נבדקו: 2026-09-02.

  • 2026-09-20: המדור “תוצאות” הועבר למקום החובה לפני “שחזור מצב”; נוספו הצהרת ניגוד עניינים וקישור לבדיקה עצמאית של התצפיות הדינמיות במתודולוגיה.
  • 2026-09-02: פרסום ראשון; אושרו readers, defaults ו-clamps, נוספו גבולות התועלת המעשית.