Processor scheduling ב-Windows —‏ Background services וליבות P/E

· עודכן בתאריך: · · Windows, כוונון ביצועים, scheduling, audio, CPU

היסטוריית עדכונים (גרסה ראשונה, פורסמה בתאריך 16 Mar 2026)
פרסום ראשון
לצטט את המאמר הזה(DOI (ארכיון רשום): 10.5281/zenodo.22173532)

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

Go Komura (2026). Processor scheduling ב-Windows —‏ Background services וליבות P/E. KomuraSoft LLC. https://comcomponent.com/he/blog/windows-processor-scheduling-background-services-p-e-cores/

DOI (ארכיון רשום)
10.5281/zenodo.22173532
DOI (הגרסה האחרונה שנרשמה)
10.5281/zenodo.22173533

“כשמוציאים את האפליקציה מה-foreground, ה-audio מתחיל לקרוע” “העברנו את Processor scheduling ל-Background services וזה התייצב”

ב-Windows הסיפור הזה עולה כבר שנים. הוא מטריד במיוחד ב-audio, וידאו, מדידה, שידור, ותהליכים resident — מקומות שבהם עבודה רציפה חשובה יותר מה-UI.

אבל זו לא מתג קסם שמאיץ. זו לא הגדרה שמעלה ישירות את ה-clock של ה-CPU, לא הגדרה שהופכת אפליקציה ל-Windows service, ולא הגדרה שמקבעת thread ל-P-core. מה שמשתנה בעיקר הוא איך Windows מחלק CPU time בין האפליקציה שב-foreground לבין עבודה שרצה מאחוריה.

מה ההגדרה הזו משנהתרשים שמראה ש-Processor scheduling אינו מעלה clock, אינו הופך אפליקציה ל-service ואינו מקבע ליבה, ומה שמשתנה הוא חלוקת CPU time בין foreground ל-background.את אלה לא משניםמה שכן משתנההגדרת Processor schedulingclock, הפיכה ל-service, קיבוע ליבהחלוקת CPU time בין foreground ל-background

איור 1: לא מתג האצה — הגדרה שמחליפה את אופן חלוקת ה-CPU time.

המאמר מסביר מה משתנה בין Programs ל-Background services, וקושר את זה ליסודות של ה-scheduler ב-Windows, ל-quantum (time slice), להעדפת foreground, ולהתנהגות של CPU עם P-core / E-core.

1. קודם המסקנה

קודם העיקרים בלבד.

  • מה שההגדרה משנה ישירות הוא לא “הכוח” של ה-CPU, אלא איך מחלקים CPU time.
  • Programs נוטה להעדיף את אפליקציית ה-foreground; Background services מתייחס ל-foreground ול-background באופן שווה יותר.
  • לכן, בעומסים שבהם ה-deadline של עבודה רציפה ברקע חשוב יותר מ-UI שבחזית, Background services לפעמים עוזר.
  • במעבדי P-core / E-core, “על איזו ליבה נוחתים” נקבע היום חזק יותר לפי QoS, מדיניות power, hybrid scheduling ו-Intel Thread Director — לא רק לפי ההגדרה הזו.
  • כלומר, בחירה ב-Background services לא אומרת “עבודת רקע ל-P-core” או “service ל-E-core”.
  • אם ניתוקי audio או dropout מגיעים מ-DPC / ISR, חיסכון בחשמל ב-USB, דרייבר, thermal throttling או EcoQoS, ההגדרה לבדה לא תתקן אותם.

במשפט אחד: זו לא הגדרת תדר של CPU, אלא הגדרה שמחליפה את כללי התור.

תמונה כללית של מה שמשפיע ומה שלאתרשים שמראה ש-Background services עשוי לעזור ל-deadline של עבודה רציפה ברקע, בעוד שבחירת P-core / E-core נקבעת חזק יותר לפי QoS ומדיניות power.לפעמים עוזרנקבע במנגנון אחרצד Background servicesdeadline של עבודה רציפה ברקעבחירת P-core / E-coreQoS, מדיניות power, hybrid scheduling

איור 2: יכול לעזור ל-deadline, אבל בחירת הליבה נקבעת מחוץ להגדרה הזו.

1.1 מונחים שכדאי לקבע מראש

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

מונח משמעות
quantum (time slice) יחידת הזמן ש-thread יכול לרוץ ברצף בתור אחד. Windows סופר שליש מ-clock tick (מרווח ה-interrupt של שעון המערכת) כיחידה אחת
ISR / DPC ISR הוא Interrupt Service Routine; DPC הוא Deferred Procedure Call. שניהם מנגנונים שבהם דרייבר מטפל ב-interrupt, והם רצים לפני thread רגיל — לכן אם הם מתארכים, צד האפליקציה מחכה
MMCSS Multimedia Class Scheduler Service. שירות Windows: thread שעושה עיבוד multimedia נרשם אליו, והשירות מעלה לו priority לפי הגדרות ב-Registry
QoS Quality of Service. סיווג של ביצועים מול יעילות חשמל שמוקצה ל-thread. זה ציר נפרד מ-priority, והוא משפיע על סוג הליבה שנבחר ועל ניהול החשמל של המעבד
EcoQoS סיווג QoS שמושך לחיסכון בחשמל. אפליקציה מצמידה אותו במפורש עם SetProcessInformation / SetThreadInformation
underrun בעיבוד audio וכדומה: לא הספיקו למלא את ה-buffer עד ה-deadline, והנתונים נגמרו. נשמע כניתוק או dropout
core parking מנגנון power management שמרדים logical processors שאינם בשימוש כשהעומס נמוך
C-state עומק מצב ה-idle של ה-CPU. ככל שהוא עמוק יותר, החיסכון בחשמל גדול יותר, אבל היציאה ממנו אורכת יותר
P-core / E-core ליבה שמכוונת לביצועים מול ליבה שמכוונת ליעילות חשמל. CPU שמחזיק את שתיהן נקרא hybrid (heterogeneous)
Intel Thread Director מנגנון שבו CPU היברידי של Intel מעביר ל-OS רמזים על מאפייני הריצה של thread. Windows 11 משתמש בזה בהחלטת בחירת הליבה

ב-diagram, solid line מציינת relation שתמיד מתקיים ו-dashed line מציינת relation מותנה (התנאים מופיעים בהסבר של כל relation ב-detail page). הרשימה המלאה של ה-relations (סה”כ 18, כולל evidence ו-certainty) וההגדרות של ה-concepts המרכזיים נמצאות ב-detail page של ה-knowledge map (ביפנית). Data: JSON-LD / Turtle

2. מה ההגדרה הזו באמת משנה

Processor scheduling במסך ההגדרות הוא אחת ממדיניות ה-scheduling הוותיקות של Windows. מבפנים זו הגדרה עם היסטוריה ארוכה, שמחוברת ל-Win32PrioritySeparation.

קודם היסוד: איך Windows משתמש ב-CPU.

  • ה-scheduler בוחר קודם מבין ה-threads שאפשר להריץ, את זה עם ה-priority הגבוה ביותר.
  • באותו priority, הם רצים לפי תור, כל אחד לפרק זמן קבוע.
  • פרק הזמן הקבוע הזה הוא ה-quantum (time slice).
הזרימה הבסיסית של ה-scheduler ב-Windowsתרשים שמראה שה-scheduler בוחר מבין ה-threads ה-runnable את בעל ה-priority הגבוה ביותר, מריץ אותו quantum אחד, ואם יש thread שמחכה באותו priority עוברים אליו ב-context switch.yesnothreads ש-runnableה-scheduler בוחר את בעל ה-priority הגבוהרץ quantum אחדיש thread שמחכה באותו priority?context switch

איור 3: ה-scheduler בוחר את ה-thread עם ה-priority הגבוה ביותר, ומריץ אותו quantum אחד בכל פעם, לפי תור.

מה ש-Processor scheduling נוגע בו בעיקר הוא איך מחלקים את ה-quantum, ו-כמה חזק מעדיפים את ה-foreground.

foreground כאן הוא האפליקציה שבחזית, זו שהמשתמש נוגע בה עכשיו. לעומת זאת, עבודה שהלכה לרקע, worker ב-process נפרד, Windows service, helper process ותהליך resident — נוטים ליפול לצד ה-background.

חשוב: גם אם בוחרים Background services, האפליקציה שלכם לא הופכת ל-Windows service. מה שמשתנה הוא לא סוג שנקרא “service”, אלא כללי חלוקת ה-CPU בין foreground ל-background. השם מבלבל מאוד.

הבלבול בשם Background servicesתרשים שמראה שבחירה ב-Background services אינה הופכת את האפליקציה ל-Windows service, ומה שמשתנה הוא רק כלל חלוקת ה-CPU בין foreground ל-background.זה לא קורהמה שמשתנהבוחרים Background servicesהאפליקציה הופכת ל-Windows serviceכלל חלוקת ה-CPU בין foreground ל-background

איור 4: בניגוד לשם, מה שמשתנה אינו סוג ה-process אלא כלל החלוקה.

2.1 איך מגיעים למסך ההגדרה

ההגדרה יושבת עמוק ב-Control Panel. יש שני מסלולים.

  • מ-Win + R מריצים SystemPropertiesPerformance.exe, ונפתח ישירות “Performance Options”. בלשונית Advanced נמצא Processor scheduling.
  • ידנית: System Properties > לשונית Advanced > Performance, Settings > לשונית Advanced. את System Properties עצמם פותחים עם sysdm.cpl.

תוצאת הבחירה נכתבת לערך הבא ב-Registry:

פריט תוכן
key HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\PriorityControl
שם הערך Win32PrioritySeparation
טיפוס REG_DWORD
טווח 0x0-0x3F

אם רוצים רק לראות את הערך הנוכחי, קוראים אותו ב-PowerShell. כדאי לרשום את הערך שלפני השינוי, כדי שאפשר יהיה לחזור.

הקשר בין הבחירה ב-UI ל-Registryתרשים שמראה שבחירה ב-Performance Options נכתבת ל-Win32PrioritySeparation ב-Registry, שאפשר לקרוא את הערך ב-PowerShell, ולכן רושמים אותו לפני השינוי.בחירה ב-UIנכתב ל-Win32PrioritySeparationקוראים ב-PowerShellרושמים את הערך לפני השינוי

איור 5: הבחירה ב-UI היא ערך Registry, ולכן רושמים את הערך הנוכחי לפני שנוגעים בו.

Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\PriorityControl' -Name 'Win32PrioritySeparation'

2.2 באילו גרסאות Windows זה חל, ומה הערך אומר

Processor scheduling שב-Performance Options קיים גם ב-Windows 10 / Windows 11 ללקוח וגם ב-Windows Server. הנקודה שמבלבלת היא ש-אותו ערך מתפרש אחרת בלקוח ובשרת.

בתיעוד ה-Registry של Microsoft, Win32PrioritySeparation מתואר כ-bitmask של 6 bits, מחולק לשלוש קבוצות של 2 bits (AABBCC).

  • 2 ה-bits העליונים: האם ה-quantum ארוך או קצר
  • 2 ה-bits האמצעיים: האם ה-quantum משתנה או קבוע
  • 2 ה-bits התחתונים: פי כמה מעדיפים foreground על background (משפיע רק כשה-quantum משתנה)

לפי זה, הבחירה ב-UI כותבת את הערכים הבאים (ב-UI הישן זה היה Applications ו-Background services; היום זה Programs ו-Background services).

בחירה ב-UI הערך שנכתב משמעות
Programs 100110 (0x26) quantum משתנה וקצר יחסית. foreground מקבל פי 3 מ-background
Background services 011000 (0x18) quantum קבוע וארוך יחסית. foreground ו-background מטופלים אותו דבר

אם יורדים למספרים, במאמר ההסבר של Microsoft כתוב שב-0x26 ה-quantum הוא 18 ל-foreground ו-6 ל-background, וב-0x18 שניהם 36. quantum נספר ביחידות של שליש clock tick, ולכן ב-tick זה 6 tick לחזית / 2 tick לרקע, ו-12 tick לשניהם. באותו מאמר מופיעה דוגמה שבה clock tick במכונת x86 multiprocessor היה 15.625 ms; במקרה כזה ההבדל הוא בין “החזית יכולה לרוץ ברצף עד כ-94 ms” לבין “גם החזית וגם הרקע רצים כ-188 ms כל אחד”.

כלומר, צד Background services הוא חלוקה שבה כל ריצה ארוכה יותר, אבל לא מעדיפים רק את החזית. פחות סביר שעבודה ברקע תיכנס למצב שבו “התור לא מגיע אליה”.

איך מחלקים quantum בשתי ההגדרותתרשים שמראה שתחת Programs החזית מקבלת 6 tick והרקע 2 tick, ותחת Background services שניהם 12 tick, כך שכל ריצה ארוכה אך לא מעדיפים רק את החזית.הגדרת Programsחזית 6 tick, רקע 2 tickהגדרת Background servicesחזית ורקע 12 tick כל אחדפחות סביר שהרקע לא יגיע לתור

איור 6: צד אחד נותן לחזית ריצה ארוכה; הצד השני מחלק את אותו זמן ארוך באופן שווה.

גם ברירת המחדל מתפרשת אחרת לפי סוג ה-OS. בתיעוד של Win32_OperatingSystem אצל Microsoft, ב-Windows ללקוח ברירת המחדל היא quantum משתנה, וה-quantum של אפליקציית ה-foreground ארוך יותר; ב-Windows Server ברירת המחדל היא quantum באורך קבוע. גם בתיעוד ה-Registry כתוב שאותו ערך ברירת מחדל, 0x2, מתפרש בלקוח כ”קצר, משתנה, פי 3 לחזית”, ובשרת כ”ארוך, קבוע, שווה”. לכן שרת נוטה מלכתחילה לצד שמקביל ל-Background services.

אותו ערך ברירת מחדל מתפרש אחרת בלקוח ובשרתתרשים שמראה שאותו ערך ברירת מחדל מתפרש בלקוח Windows כקצר, משתנה, פי 3 לחזית, ובשרת כארוך, קבוע, שווה, ולכן שרת נוטה מלכתחילה לצד המקביל ל-Background services.בלקוחבשרתאותו ערך ברירת מחדלקצר, משתנה, פי 3 לחזיתארוך, קבוע, שווהמלכתחילה מקביל ל-Background services

איור 7: לא הערך עצמו מחלק את הפרשנות, אלא צד ה-OS.

המספרים הקונקרטיים כאן מגיעים מתיעוד ומאמרי הסבר של Microsoft מדור Windows 2000 / XP. המיפוי בין ערך ה-Registry לבחירה ב-UI נשאר זהה גם היום, אבל הטיפול בפועל ב-quantum יכול להשתנות בין גרסאות OS, ולכן כדאי לקרוא את המספרים כסדר גודל, לא כקבוע פיזי.

3. מה משתנה בין Programs ל-Background services

ההבדל ברור יותר בטבלה.

היבט Programs Background services
הגישה הבסיסית קל יותר לשפר את תחושת אפליקציית ה-foreground מתייחס ל-foreground ול-background באופן שווה יותר
העדפת foreground חזקה קטנה יותר
כשה-CPU עמוס ה-UI נוטה להישאר נעים עבודה רציפה ברקע פחות נדחקת
מתאים בדרך כלל ל שימוש אינטראקטיבי בשולחן עבודה service, capture, encode, עבודה רציפה
תופעת לוואי נפוצה קל יותר להחמיץ deadline של עבודת רקע תחושת ה-UI שבחזית עלולה לרדת מעט

Windows ללקוח מכוון בעיקרון לכך שאפליקציית ה-foreground תרגיש טוב. לכן בשימוש שולחני רגיל, Programs הוא הבחירה הטבעית.

יש מקרים שבהם התמונה משתנה.

  • עיבוד audio שממשיך למלא buffer ברציפות ברקע
  • capture או ניתוח שרצים ברציפות ב-thread נפרד / process נפרד, גם כשה-UI קל
  • מצב שבו רוצים לעמוד ב-deadline של העבודה מאחור, גם כשבחזית פתוחים דפדפן או IDE
  • עומס שקרוב יותר לשרת, ל-service, או לתהליך resident

במקרים כאלה יציב יותר לתת לעבודה ברקע לקבל CPU בחזרה, במקום להעדיף חזק רק את ה-foreground. במובן הזה Background services לפעמים הגיוני.

איזו חלוקה מתאימהתרשים שמראה שבשימוש אינטראקטיבי בשולחן עבודה Programs טבעי, ובעומס שבו ה-deadline ברקע חשוב, Background services מאפשר לרקע לקבל CPU בחזרה בקלות יותר.שימוש אינטראקטיביdeadline ברקע חשובאופי העומסPrograms טבעיBackground services מועמדהרקע מקבל CPU בחזרה בקלות יותר

איור 8: הבחירה בין תחושת החזית ל-deadline ברקע קובעת איזה צד עדיף.

4. למה זה לפעמים עוזר ב-audio ובעבודה רציפה

קל יותר לראות את זה דרך ניתוקי audio ו-dropout.

עיבוד audio לא מסתפק ב”מהיר בממוצע”. כל כמה מילישניות, או ביחידה קצרה יותר, צריך למלא את ה-buffer עד הרגע שנדרש. גם אם ניצול ה-CPU נמוך בממוצע, אם ה-thread לא מצליח לרוץ בדיוק באותו רגע — ה-audio נקטע.

מצב קונקרטי אחד:

  • בחזית יש דפדפן, UI של DAW, או אפליקציה אחרת
  • ברקע, thread של עיבוד audio רץ במחזור קבוע ומזין buffer
  • ה-thread הזה לא ב-priority גבוה מדי, וגם לא מנצל מספיק MMCSS או QoS
  • ה-CPU עמוס במידה מסוימת

תחת Programs, אפליקציית ה-foreground נוטה לרוץ רצפים ארוכים יותר, ועיבוד ה-audio ברקע — גם אם בממוצע תקין — לפעמים מאחר בדיוק באותו רגע. אם זה נמשך, זה הופך ל-underrun, ואז שומעים ניתוק.

מעבר ל-Background services מקל על העבודה הרציפה ברקע לקבל CPU בחזרה, ומקשה יותר להחמיץ את ה-deadline.

כלומר, כשזה עוזר, מה שקורה אינו “ה-CPU נהיה מהיר יותר”, אלא:

  • העדפת החזית נחלשת מעט
  • מספר הפעמים והעיתוי שבהם הרקע מצליח לקבל CPU משתפרים
  • כתוצאה מכך יורדים deadline miss

זו הזרימה.

הזרימה שבה ניתוקי audio יורדיםתרשים שמראה שתחת Programs החזית רצה זמן ארוך ועיבוד audio מאחר באותו רגע ומגיע ל-underrun, ואילו הטיה ל-Background services מחלישה את העדפת החזית ומאפשרת לרקע לקבל CPU, ומפחיתה deadline miss.החזית רצה זמן ארוךעיבוד audio מאחר באותו רגעunderrun וניתוקמטים את החלוקה לשווה יותרהרקע מצליח לקבל CPU בקלות יותרdeadline miss יורדים

איור 9: כשזה עוזר, ה-CPU לא נהיה מהיר — העבודה ברקע פשוט מספיקה ל-deadline.

5. העיקרון — quantum והעדפת foreground

אם יורדים שכבה אחת, המסלול נראה כך.

5.1 quantum ארוך גורם לצד השני באותו priority לחכות יותר

כשכמה threads מתחרים באותו טווח priority, ככל ש-thread אחד מקבל quantum ארוך יותר, האחרים מחכים יותר בהתאם.

בהגדרה שמעדיפה את אפליקציית ה-foreground, צד ה-foreground נוטה לרוץ ברצף זמן ארוך יותר. אז background ב-priority דומה נוטה יותר לקבל “לא עכשיו”.

בעיבוד כמו audio, וידאו, מדידה מחזורית, polling וניטור — עבודה ש-רוצים שתרוץ מעט-מעט אבל בקביעות — ההבדל הזה משפיע.

quantum ארוך גורם לצד השני לחכותתרשים שמראה שכשכמה threads מתחרים באותו priority, ככל שאחד מקבל quantum ארוך יותר האחרים מחכים יותר, וההבדל הזה בולט יותר בעבודה שצריכה לרוץ בקביעות.תחרות באותו טווח priorityצד אחד מקבל quantum ארוךה-threads האחרים מחכים יותרככל שהעבודה מחזורית, ההבדל בולט יותר

איור 10: אורך ה-quantum חוזר ישירות כזמן המתנה של מי שמתחרה באותה רמה.

5.2 Windows מתחשב ב-foreground בכמה דרכים

Windows מלכתחילה משקיע לא מעט ב-foreground. הדוגמאות הייצוגיות:

  • העדפת ה-process שהגיע לחזית
  • העדפת ה-thread שמחזיק את החלון שקיבל קלט
  • boost דינמי ל-priority של thread אחרי סיום I/O

כלומר, רק להוציא אפליקציה מה-foreground כבר משנה את היחס אליה ב-scheduling. Background services מובן יותר אם רואים אותו כמכוון להקטין, מתוך העדפת ה-foreground הזו, בעיקר את ההטיה בחלוקת CPU time.

הדרכים שבהן Windows מתחשב ב-foregroundתרשים שמראה ש-Windows מתחשב ב-foreground בכמה דרכים — העדפת process בחזית, העדפת thread של חלון שקיבל קלט, ו-boost דינמי אחרי I/O — ולכן רק הוצאה מהחזית כבר משנה את היחס.העדפת process בחזיתרק הוצאה מהחזית משנה את היחסהעדפת thread של חלון שקיבל קלטboost דינמי אחרי I/Oההגדרה הזו מקטינה את ההטיה בחלוקה

איור 11: העדפת החזית היא כמה מנגנונים יחד, וההגדרה הזו משפיעה על ההטיה בחלוקה מתוכם.

5.3 “לא לתת ל-CPU להתעצל” נכון בחצי, ולא מדויק בחצי

הניסוח “לא לתת ל-CPU להתעצל” מובן כתחושה. במובן שעבודה ברקע פחות נדחקת — זה נכון.

מבחינה טכנית מדויק יותר לומר שמה שבאמת משתנה אינו בקרת ה-idle או התדר של ה-CPU עצמו, אלא באיזה סדר ולכמה זמן מריצים threads.

לכן ההגדרה הזו:

  • לא מעלה turbo boost
  • לא מכבה C-state
  • לא משנה ישירות core parking
  • לא מקבעת ל-P-core
המשמעות המדויקת של לא להתעצלתרשים שמראה שמה שבאמת משתנה אינו בקרת idle או תדר ה-CPU, אלא סדר הריצה ואורך הריצה של threads, ושההגדרה אינה turbo, C-state, core parking או קיבוע ל-P-core.מה שבאמת משתנהמה שלא משתנההתחושה של לא לתת ל-CPU להתעצלסדר הריצה ואורך הריצהturbo, C-state, core parking, קיבוע ליבה

איור 12: המהות של “לא להתעצל” אינה בקרת חשמל, אלא שינוי בסדר ובאורך הריצה.

6. איך זה מתנהג במעבד P-core / E-core

זו הנקודה שהכי קל לטעות בה.

בחירה ב-Background services לא אומרת ש-Windows מחליט בפשטות “זו עבודת רקע אז E-core”, “זו חזית אז P-core”. ב-Windows מודרני, ובמיוחד ב-CPU היברידי תחת Windows 11, בחירת P-core / E-core היא רב-שלבית הרבה יותר.

6.1 שם דומה, מנגנון אחר

קודם יש שני דברים עם אווירה דומה בשם, שהם לא אותו דבר.

  1. Background services שב-Processor scheduling
    • הגדרה ב-UI ותיק
    • משפיעה בעיקר על חלוקת CPU time בין foreground ל-background
    • שייכת למשפחת quantum ו-foreground boost
  2. Utility / Eco / Low וכדומה ב-QoS
    • סיווג power / performance של Windows המודרני
    • משפיע גם על בחירת ליבה וגם על בקרת תדר
    • קשור ישירות להתנהגות P-core / E-core

השניים האלה אינם זהים.

שם דומה, מנגנון אחרתרשים שמראה ש-Processor scheduling הוא הגדרה ותיקה שמשפיעה על quantum והעדפת foreground, ואילו QoS הוא סיווג power/performance מודרני שמשפיע על בחירת ליבה ובקרת תדר.אלה לא אותו דברהגדרת Processor schedulingquantum והעדפת foregroundסיווג QoSבחירת ליבה ובקרת תדר

איור 13: האווירה בשם דומה, אבל השכבה שבה כל אחד משפיע שונה לגמרי.

6.2 QoS ו-visibility ב-Windows 11

ב-Windows מודרני משפיע לא רק priority אלא גם QoS. במעבד heterogeneous, כלומר בהרכב עם P-core / E-core, ה-QoS משפיע על איזה סוג ליבה מועדף.

הסיווג הגס ב-Windows 11 נראה כך:

מצב / מחלקה תמונת ה-QoS השפעה על P-core / E-core איפה זה כתוב
אפליקציה windowed בחזית וב-focus High מוטה לביצועים טבלת סיווג QoS, In Focus
אפליקציה שמוצגת אבל לא ב-focus Medium ביניים טבלת סיווג QoS, Visible
אפליקציה ממוזערת / מוסתרת לגמרי Low על סוללה, מוטה ל-efficient core טבלת סיווג QoS, Minimized, or Fully Occluded
background services Utility על סוללה, מוטה ל-efficient cores טבלת רמות QoS, Utility
עבודה שצירפה EcoQoS במפורש Eco מוטה ל-efficient cores טבלת רמות QoS, Eco
thread ש-MMCSS צירף ל-batch buffering Media מוריד תדר, בדגש יעילות טבלת רמות QoS, Media
multimedia thread עם deadline של audio Deadline מוטה לביצועים טבלת רמות QoS, Deadline

הטבלה הזו היא ריכוז מחדש של שתי הטבלאות במאמר “Quality of Service” ב-Microsoft Learn: רשימת רמות ה-QoS (High / Medium / Low / Utility / Eco / Media / Deadline), ו-סיווג ה-QoS (המיפוי ממצב תצוגת החלון ל-QoS). זה לא סיווג שהוצא מתצפית. באותו מסמך יש גם כלל ש-process שזוהה כמשמיע קול מטופל כ-High, וגם הסבר ש-thread שלא נכנס לאף אחת מהקטגוריות האלה מוקצה אוטומטית לפי היוריסטיקה כמו priority.

עוד תיאור חשוב למי שמודד: יש תכונה שבה על סוללה, אם אין קלט משתמש לפרק זמן מסוים, ה-QoS של אפליקציית ה-foreground עלול לרדת ל-Medium. בתיעוד יש הערה שבמדידת ביצועים על סוללה כדאי לכבות את התכונה הזו, והדרך היא להגדיר 1 ב-DisableUserPresenceQos (REG_DWORD) תחת HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerThrottling. אם בבדיקה אוטומטית בלי קלט מופיע “איטי רק על סוללה”, כדאי לחשוד כאן קודם.

הנקודה החשובה: גם רק מזעור עלול לשנות את ה-QoS. כלומר, במחשב נייד עם CPU היברידי זה קורה בשגרה:

  • הוציאו את האפליקציה מהחזית
  • בנוסף, מיזערו אותה
  • כתוצאה מכך ה-QoS ירד
  • היא נוטה יותר לנחות על efficient core
  • התחושה או ה-deadline הורעו
שרשרת ממזעור עד הרעה ב-deadlineתרשים שמראה שבמחשב נייד עם CPU היברידי, הוצאה מהחזית ומזעור מורידים את ה-QoS, ועל סוללה בפרט זה מוביל למיקום מוטה ל-efficient core ולהרעה בתחושה או ב-deadline.במיוחד על סוללההוצאה מהחזית ומזעורה-QoS יורדמיקום מוטה ל-efficient coreהרעה בתחושה או ב-deadline

איור 14: רק פעולת מזעור עלולה להגיע עד לשיבוץ הליבה.

6.3 Thread Director ו-hybrid scheduling

ב-CPU היברידי של Intel מדור 12 ואילך, Intel Thread Director מעביר רמזים ל-OS. Windows 11 משתמש בזה כדי להחליט בצורה חכמה יותר על הקצאת P-core / E-core.

בנוסף, בצד Windows יש מדיניות של heterogeneous scheduling.

  • SchedulingPolicy
  • ShortSchedulingPolicy
  • ShortThreadRuntimeThreshold

אם משאירים אותן ב-Automatic, זה מנגנון שבו ה-OS מחליט לפי QoS והרכב המערכת. מאחורי זה רצים גם ה-core parking engine וה-performance state engine בצד processor power management.

את התמונה הכוללת נוח לראות כך:

התמונה הכוללת של גורמי בחירת הליבהתרשים שמראה ש-priority דינמי, QoS, מצב תצוגה וקלט, מדיניות hybrid scheduling ורמזי Intel Thread Director מתכנסים ל-scheduler של Windows ול-processor power management, וקובעים בסוף P-core / E-core ואת התדר.ThreadPriority / dynamic priorityQoS (High / Medium / Low / Utility / Eco / Deadline)Visibility / audible / input stateHybrid scheduling policy (SCHEDPOLICY / SHORTSCHEDPOLICY)Intel Thread Director hints (Windows 11 on Intel hybrid)Windows scheduler + Processor Power Managementנקבעים P-core / E-core והתדר

איור 15: priority, QoS, מצב תצוגה, מדיניות scheduling ורמזי Thread Director מתכנסים, וקובעים את הליבה ואת התדר.

7. מתי זה עוזר, ומתי לא

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

7.1 מקרים שנוטים להיות מושפעים

במקרים כאלה Background services יכול להיות צעד הגיוני.

  • כשמעבירים focus לאפליקציה שבחזית, רק העבודה הרציפה ברקע נהיית לא יציבה
  • ניצול ה-CPU לא רווי, אבל דווקא ה-deadline של עיבוד מחזורי נופל
  • העיבוד הקריטי יושב ב-legacy app / helper process / worker thread, ולא מנצל מספיק MMCSS או QoS
  • service או תהליך resident הוא השחקן הראשי, ויציבות העבודה ברקע חשובה יותר מנעימות ה-UI שבחזית

7.2 מקרים שפחות מושפעים, או שהם בעיה אחרת

לעומת זאת, יש בעיות שההגדרה הזו לבדה לא מספיקה להן.

  • latency גדול של DPC / ISR
  • באג ב-USB controller או ב-audio driver
  • השפעה של USB selective suspend או חיסכון בחשמל של המכשיר
  • thermal throttling
  • השפעת battery saver, power throttling או EcoQoS
  • buffer קטן מדי
  • האפליקציה כבר משתמשת נכון ב-MMCSS / Deadline, והבעיה במקום אחר

במיוחד במחשב נייד עם Windows 11 + CPU היברידי, השינוי ב-visibility וב-QoS משפיע חזק. אם זה נהיה איטי רק במזעור, או רק על סוללה, כדאי לחשוד ב-QoS / power לפני שנוגעים ב-Processor scheduling.

איזה כיוון לחשוד לפי התסמיןתרשים שמראה שאם העברת focus מערערת רק את הרקע ההגדרה הזו מועמדת, אם ההחמרה רק במזעור או על סוללה חושדים ב-QoS או power, ואם המקור הוא DPC/ISR או דרייבר זו בעיה אחרת.focus לחזית מערער את הרקעהחמרה רק במזעור / על סוללהמקור ב-DPC / ISR / דרייברבוחנים איך התסמין מופיעההגדרה הזו מועמדתחושדים ב-QoS / powerבעיה אחרת שההגדרה לא פותרת

איור 16: תלות התסמין בתנאים אומרת אם מדובר בהגדרה הזו, ב-QoS, או בבעיה אחרת.

8. איך רואים את זה בפועל

לבידוד בפועל, הסדר הבא ברור יותר.

  1. מקבעים תנאים
    • AC או סוללה
    • מצב power
    • גודל buffer
    • מצב foreground / visible / minimized
  2. משווים Programs מול Background services באותם תנאים
    • לא רק לפי תחושה; מתעדים מספר dropout, מספר glitch, ו-latency של העיבוד
  3. ב-Windows 11 / CPU היברידי, חושדים בצד QoS
    • האם זה מחמיר רק במזעור
    • האם זה משתנה במצב audible
    • האם זה מחמיר רק על סוללה
  4. ב-audio או וידאו, בודקים קודם MMCSS
    • האם ה-thread הקריטי מעביר ל-Windows את המסר “יש כאן deadline חשוב”
  5. אם זה עדיין לא נפתר, חופרים ל-DPC / ISR / USB / driver
    • כאן זה כבר לפני ה-scheduler
סדר הבידודתרשים שמראה שקודם מקבעים תנאים, משווים את שתי ההגדרות באותם תנאים, ב-CPU היברידי חושדים ב-QoS, ב-audio ווידאו בודקים MMCSS, ואם נשאר חופרים ל-DPC/ISR ולדרייבר.קיבוע תנאיםהשוואת שתי ההגדרות באותם תנאיםב-CPU היברידי, חשד ב-QoSב-audio/וידאו, בדיקת MMCSSאם נשאר, חפירה ל-DPC / ISR / דרייבר

איור 17: הבידוד מתחיל מקיבוע תנאים, והשכבה שלפני ה-scheduler נחפרת אחרונה.

8.1 מה בודקים בכל שלב, ואיך

כדי לא להישאר ב”חושדים” בלבד, אלה אמצעי הבדיקה.

מה רוצים לבדוק איך בודקים בפועל
ההגדרה הנוכחית של Processor scheduling פותחים SystemPropertiesPerformance.exe, או קוראים Win32PrioritySeparation ב-PowerShell כמו בפרק 2.1
AC / סוללה ו-power plan מתעדים עם powercfg /getactivescheme את ה-plan הפעיל, ועם powercfg /list את הרשימה
האם ה-process ב-power throttling בלשונית Details של Task Manager, לחיצה ימנית על כותרת עמודה והוספת עמודת Power throttling. ב-Windows 11, גם בעמודת Status בלשונית Processes מופיע Efficiency mode
האם ה-QoS של אפליקציית ה-foreground יורד על סוללה מגדירים DisableUserPresenceQos מפרק 6.2, ומשווים התנהגות לפני ואחרי
האם ה-thread הקריטי משתמש ב-MMCSS בקוד שלכם, בודקים אם קוראים ל-AvSetMmThreadCharacteristics / AvSetMmMaxThreadCharacteristics, ואם ה-handle שחוזר תקף. אם זה בשימוש, ה-priority עולה לפי Scheduling Category, ואפשר לראות זאת ברשימת ה-threads של Process Explorer (High הוא 23-26, Medium הוא 16-22, Low הוא 8-15)
הגדרת המשימה ב-MMCSS תחת HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Multimedia\SystemProfile\Tasks יש משימות כמו Audio, Pro Audio, Capture, Playback, ואפשר לבדוק Scheduling Category ו-Priority
latency של DPC / ISR לוקחים trace עם wpr -start GeneralProfile -filemode, עוצרים עם wpr -stop trace.etl, ובגרף DPC/ISR של WPA בודקים זמן לפי מודול
על איזו ליבה ה-thread רץ פותחים את אותו trace ב-CPU Usage (Precise) של WPA, ומסתכלים על עמודת ה-logical processor. המיפוי בין מספר logical processor ל-P-core / E-core תלוי בדגם, ולכן קודם בונים טבלת מיפוי עם כלי כמו Coreinfo של Sysinternals, ורק אז קוראים. אפשר להשוות אילו מספרים בשימוש בחזית מול במזעור

wpr היא הפקודה של Windows Performance Recorder, והיא כלולה ב-Windows ADK. מריצים אותה ממסוף עם הרשאות Administrator.

בעבודה מעשית, “האם הגענו ל-deadline” חשוב יותר מניצול CPU ממוצע. זו נקודה מהותית.

המדד שבודקים הוא ה-deadlineתרשים שמראה שבסוג הבעיה הזה ניצול CPU ממוצע לבדו לא מספיק, ומה שחשוב יותר הוא האם עיבוד מחזורי עמד ב-deadline.לבד לא מספיקבזה מסתכליםניצול CPU ממוצעהערכת יציבותהאם עמדנו ב-deadlineסופרים לפי מספר dropout או glitch

איור 18: גם ממוצע נמוך לא מונע deadline miss, ולכן סופרים אם עמדנו ב-deadline ורק אז מחליטים.

9. סיכום

אם מנסחים בקצרה מה קורה כשמעבירים את Processor scheduling ל-Background services:

  • מה שמשתנה אינו מהירות ה-CPU עצמה, אלא חלוקת CPU time בין foreground ל-background
  • Programs מקל על תחושת אפליקציית ה-foreground
  • Background services הופך עבודה רציפה ברקע לפחות נדחקת
  • לכן במקרים כמו audio, וידאו, capture, ניטור ותהליך resident, שבהם ה-deadline ברקע חשוב, זה לפעמים עוזר
  • במעבדי P-core / E-core, שיבוץ הליבה בפועל מושפע חזק גם מ-QoS, מדיניות power, hybrid scheduling ו-Thread Director
  • לכן ב-Windows של היום טבעי לראות את ההגדרה הזו כ-יכולה לעזור, אבל לא השחקן הראשי לבד

בקיצור, זו לא כפתור שמעלה את כוח ה-CPU, אלא כפתור שמחליף את חלוקת העבודה.

האם להעדיף את תחושת האפליקציה שבחזית, או להקל על עמידה ב-deadline של עבודה ברקע. כשרואים את זה כהגדרה שמטה מעט את האיזון לכיוון background, זה מתחבר.

ובעידן ה-CPU ההיברידי, מעל זה יושבת שכבה נוספת של QoS ובחירת P-core / E-core. כשמסתכלים עד לשם, מתבהרים גם “למה זה לפעמים עוזר” וגם “למה לפעמים זה לא”.

המקום של הכפתור הזה היוםתרשים שמראה שהכפתור מטה את חלוקת העבודה מעט לכיוון background, אבל בעידן CPU היברידי מעל השכבה הזו יושבות QoS ובחירת P-core/E-core, ולכן זה יכול לעזור אך אינו השחקן הראשי לבד.מעליה יושבתכפתור שמטה חלוקה לכיוון backgroundשכבת quantum והעדפהשכבת QoS ובחירת P-core / E-coreמתבהרת גם הסיבה שעוזר וגם הסיבה שלא

איור 19: הכפתור משפיע רק על השכבה התחתונה; בחירת הליבה היום נקבעת בשכבה שמעליה.

10. מקורות

מאמרים עדכניים עם אותן תגיות, להעמקה בנושאים קרובים.

העמודים האלה ממקמים את הנושא בהקשר רחב יותר של שירותים והחלטות.

המאמר קשור ישירות לשירותים הבאים.

שאלות נפוצות

שאלות נפוצות בפניות בנושא המאמר.

מה משתנה כשמעבירים את Processor scheduling ל-Background services?
לא מהירות ה-CPU ולא ה-clock. מה שמשתנה הוא איך Windows מחלק CPU time בין האפליקציה שב-foreground לבין עבודה שרצה ברקע. מבפנים זו הגדרה שמחוברת ל-Win32PrioritySeparation, והיא משפיעה על חלוקת ה-quantum (time slice) ועל כמה חזק מעדיפים את ה-foreground. Programs נוטה להעדיף את האפליקציה שבחזית; Background services מתייחס ל-foreground ול-background באופן שווה יותר. בחירה בהגדרה הזו לא הופכת את האפליקציה שלכם ל-Windows service.
למה Background services לפעמים מתקן ניתוקי audio (crackling)?
עיבוד audio לא מספיק בכך שהוא מהיר בממוצע. צריך למלא buffer עד deadline כל כמה מילישניות. תחת Programs, אפליקציית ה-foreground נוטה לרוץ רצפים ארוכים יותר, ו-thread של audio ברקע יכול לאחר בדיוק ברגע שהוא צריך CPU — גם כשבממוצע הכול תקין — ולהגיע ל-underrun. מעבר ל-Background services מחליש את העדפת ה-foreground, כך שעבודה רציפה ברקע מצליחה לקבל CPU בחזרה בקלות יותר, ולפעמים יורדים deadline miss. בעיות שמקורן ב-latency של DPC/ISR, חיסכון בחשמל ב-USB, באג בדרייבר, thermal throttling או EcoQoS לא נפתרות בהגדרה הזו.
האם Background services גורם לעבודת רקע לרוץ על P-core?
לא. על איזו ליבה thread נוחת — P-core או E-core — נקבע חזק יותר לפי QoS, מדיניות power, hybrid scheduling ו-Intel Thread Director, לא לפי ההגדרה הזו. ב-Windows 11, גם רק מזעור אפליקציה יכול להוריד את ה-QoS שלה, ועל סוללה היא נוטה יותר לנחות על efficient core. אם זה נהיה איטי רק אחרי מזעור, או רק על סוללה, כדאי לחשוד ב-QoS או בצד ה-power לפני שנוגעים בהגדרה הזו.
איך מבודדים את הסיבה לניתוקי audio או dropout?
קודם מקבעים תנאים: AC או סוללה, מצב power, גודל buffer, ומצב foreground / minimized. אחר כך משווים Programs מול Background services באותם תנאים, ומתעדים מספר dropout ו-latency של העיבוד. ב-CPU היברידי של Windows 11 בודקים אם זה מחמיר רק במזעור או רק על סוללה, ואז חושדים ב-QoS. ב-audio או וידאו בודקים קודם אם ה-thread הקריטי באמת רשום ל-MMCSS. אם זה עדיין לא נפתר, חופרים ל-DPC/ISR, USB ודרייברים. משם זה כבר לא עניין של ה-scheduler.

פרופיל הכותב

עמוד היכרות עם כותב המאמר.

Go Komura

מנהל KomuraSoft LLC

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

קישורים ציבוריים

חזרה לבלוג