הודעה על גרסת המקור השנייה לניסיון של לחץ על Compute

Kenneth Christiansen
Kenneth Christiansen
Arnaud (Arno) Mandy

בשנה האחרונה Intel שיתפה פעולה עם Google ועם גורמים אחרים באמצעות Compute Pressure API. ב-Chrome 115 אפשר להירשם לגרסת מקור לניסיון כדי לבדוק את ה-API החדש. בפוסט הזה נסביר את הבעיות שה-API נועד לפתור, ונציג לכם איך להשתמש בו.

הבעיה

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

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

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

לעיתים קרובות מפתחים בוחרים לפתח את המכנה המשותף הנמוך ביותר, ונמנעים משימוש בתכונות מסוימות שעלולות להטיל מס על מכשירים ישנים יותר או פחות בעלי יכולות. אבל אם אפשר היה למטב את החוויה של משתמשים שיש להם ציוד מתאים, שנמצאים בסביבה המתאימה כדי להפיק ממנו תועלת, למה לא לעשות את זה? לדוגמה, כשמצטרפים לשיחת וידאו מהטלפון, סביר להניח שרק צפייה ברמקול הנוכחי היא החוויה הטובה ביותר. אבל במחשב, יהיה נחמד לראות את כל המשתתפים בשיחה, והחומרה בדרך כלל מתאימה לביצוע המשימה. לשם כך, נדרשת טלמטריה של החומרה בזמן אמת, בלי לפגוע בפרטיות המשתמשים. הטלמטריה יכולה לשמש לתזמון משימות ולהפעלה ולהשבתה של התכונות בהדרגה כדי להבטיח חוויית משתמש חלקה. כאן תוכלו להיעזר ב-Compute Pressure API.

מה זה Compute Pressure API?

ה-Compute Pressure API כולל מצבים ברמה גבוהה שמייצגים את הלחץ על המערכת. המצבים הכלליים האלה מבטיחים איזון טוב בין פרטיות (ולא שיתוף יותר מדי מידע ספציפי שעלול לזהות את המשתמש) לבין מידע שהמפתחים יכולים בקלות להסיק לגביו. בנוסף, זה מאפשר לאפליקציה להשתמש במדדי החומרה המתאימים כדי לוודא שהמשתמשים יוכלו לנצל את כל כוח העיבוד שזמין להם, כל עוד המערכת לא נמצאת בלחץ שלא ניתן לנהל.

לדוגמה, מעבדים מודרניים מיועדים לפעול בצורה תקינה ברוב המצבים בליבה יחידה או בכל הליבות, כך שממשק API שמקודד 80% מהניצול בפועל כקריטי עלול לגרום לכך שמפתחים לא ינצלו את היכולות של החומרה ויוכלו להציע חוויית משתמש לא אופטימלית. מצד שני, יכול להיות שאין קירור מתאים במערכת, או שטמפרטורת הסביבה גבוהה מאוד כמו בקיץ, והמערכת עלולה לווסת עוד לפני הגעה לניצול גבוה של המעבד. ה-API הנוכחי פועל על בסיס לחץ גלובלי של המעבד (CPU), אבל אנחנו מתכננים להפעיל את האפשרות להפעיל לחץ על המעבד (CPU) לכל דף ב-thread הראשי ובעובדים.

אלה המצבים של הלחץ המחשוב:

  • נומינליים: עומסי העבודה הנוכחיים יוצרים לחץ מינימלי, ומאפשר למערכת לפעול בתדר שעון נמוך יותר כדי לשמור על צריכת אנרגיה.
  • סבירה: המערכת פועלת בצורה תקינה. הכול חלק, והיא יכולה לדרוש עבודה נוספת ללא בעיות.
  • חשוב: יש קצת לחץ על המערכת, אבל אפשר לנהל אותו וגם המערכת פועלת טוב, אבל יכול להיות שהיא מתקרבת למגבלות שלה:
    • מהירות השעון (בהתאם להספק של AC או DC) גבוהה באופן עקבי.
    • הטמפרטורה גבוהה, אבל עדיין ניתנת לניהול ולא גורמת לויסות נתונים.

אם תוסיפו עוד עבודה, המערכת עלולה לעבור למצב קריטי.

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

הפעלה של Compute Pressure API

כברירת מחדל, Compute Pressure API לא מופעל ב-Chrome, אבל אפשר להתנסות בו ב-Chrome 115 על ידי הפעלה מפורשת של הפונקציונליות. אפשר להפעיל אותו באופן מקומי על ידי הפעלת הדגל enable-experimental-web-platform-features.

כדי להפעיל אותה לכל המבקרים באפליקציה שלכם, מתבצעת כרגע גרסת מקור לניסיון שמסתיימת ב-Chrome בגרסה 118 ( 18 ביולי 2023). כדי להשתתף בניסוי, עליכם להירשם ולכלול מטא-רכיב עם אסימון המקור לניסיון, בכותרת ה-HTML או ה-HTTP. למידע נוסף עיינו בפוסט תחילת העבודה עם גרסאות מקור לניסיון.

בחינת לחץ מחשוב

קטע הקוד הבא מדגים איך לעקוב אחרי שינויים בלחץ המחשוב ולפעול על פיהם:

// The `records` parameter is a sequence of records between two
// consecutive callbacks. Currently it contains ten entries, but
// this is an implementation detail.
function callback(records) {
  const lastRecord = records.pop();
  console.log(`Current pressure ${lastRecord.state}`);
  if (lastRecord.state === 'critical') {
    // Reduce workers load by 4.
  } else if (lastRecord.state === 'serious') {
    // Reduce workers load by 2.
  } else {
    // Do not reduce.
  }
}

const observer = new PressureObserver(callback, {
  // Sample rate in Hertz.
  sampleRate: 1,
});
observer.observe('cpu');

קטע הקוד הבא מדגים איך להשתמש ב-Compute Pressure API מ-iframe:

<iframe src="https://mysite.com/" allow="compute-pressure">
  <script>
    // Use Compute Pressure API.
  </script>
</iframe>

תמיכה בפלטפורמות

Compute Pressure API זמין ב-Chrome 115 ב-Linux, ב-ChromeOS, ב-macOS וב-Windows.

הדגמה (דמו)

נסו את ההדגמה המוטמעת שבהמשך כדי לראות איך מצב הלחץ המחשוב משתנה בהתאם ללחץ מלאכותי כלשהו.

אם הדפדפן לא תומך ב-API, תוכלו לראות בסרטון הבא הקלטה של ההדגמה.

משוב

המשוב מהמפתחים חשוב מאוד בשלב הזה, לכן כדאי לדווח על בעיות ב-GitHub ולציין הצעות ושאלות.

אישורים

התמונה הראשית (Hero) נוצרה על ידי רוברט אנאש באתר UnFlood. המאמר הזה נבדק על ידי רייצ'ל אנדרו ותומאס סטיינר.