במהלך השנה האחרונה, Intel שיתפה פעולה עם Google וגורמים אחרים בנושא Compute Pressure API. ב-Chrome 115, אפשר להירשם לגרסת מקור לניסיון כדי לעזור לבדוק את ה-API החדש. בפוסט הזה מוסבר מהן הבעיות שה-API נועד לפתור, ומוסבר איך משתמשים בו.
הבעיה
האינטרנט הופך לפלטפורמה מרכזית לאפליקציות, עם יכולות חדשות שמאפשרות להשתמש באפליקציות כמו שיחות ועידה בווידאו, וגם מספקות למשתמשים חוויה נעימה. חוויות מבוססות-אינטרנט נטענות באופן מיידי, הן נגישות מכל מקום ואין צורך בהתקנה מראש.
המשתמשים רוצים אפליקציות רספונסיביות שנטענות במהירות. הם גם רוצים להפיק את המקסימום מחיי הסוללה שלהם, וליהנות ממכשירים שקטים שלא חמים למגע. לפעמים קשה להשיג את התוצאות האלה כשאתם גם יוצרים חוויות מתקדמות, כי אנימציות חלקות וטשטוש של וידאו ברקע צורכים הרבה כוח עיבוד, מעמידים את החומרה במגבלות שלה ומחלישים את הסוללות.
בנוסף, יש מגוון עצום של מכשירים שמשמשים לגישה לאפליקציות אינטרנט. למחשב נייד בן חמש שנים יהיו יכולות שונות מאוד מאלה של מחשב שולחני חדש לגמרי, גם אם שתי המכשירים יפעלו באותה גרסת דפדפן.
מפתחים בדרך כלל בוחרים לפתח לפי המכנה המשותף הנמוך ביותר, ומשתדלים להימנע משימוש בתכונות מסוימות שעלולות להעמיס על מכשירים ישנים או עם יכולות נמוכות יותר. עם זאת, אם אפשר לבצע אופטימיזציה של החוויה למשתמשים שיש להם ציוד מתאים והם נמצאים בסביבה המתאימה כדי ליהנות ממנה, למה לא לעשות זאת? לדוגמה, כשמצטרפים לשיחת וידאו מהטלפון, כנראה שהכי טוב לראות רק את המשתתף שמדבר. עם זאת, במחשב, כדאי לראות את כל משתתפי השיחה, והחומרה בדרך כלל עומדת במשימה. כדי להשיג את זה, צריך נתוני טלמטריה של החומרה בזמן אמת, בלי לפגוע בפרטיות המשתמשים, שאפשר להשתמש בה לתזמון משימות ולהפעלה והשבתה של תכונות בהדרגתיות כדי להבטיח חוויית משתמש חלקה. כאן נכנס לתמונה Compute Pressure API.
מהו Compute Pressure API?
ב-Compute Pressure API יש מצבים ברמה גבוהה שמייצגים את הלחץ על המערכת. המצבים ברמה גבוהה האלה מבטיחים איזון טוב בין פרטיות (לא שיתוף של יותר מדי מידע ספציפי שעלול לזהות משתמש) לבין מידע שמפתחים יכולים להסיק ממנו בקלות. בנוסף, היא מאפשרת להשתמש במדדי החומרה המתאימים כדי לוודא שהמשתמשים יכולים לנצל את כל כוח העיבוד שזמין להם, כל עוד המערכת לא נמצאת בלחץ בלתי נסבל.
לדוגמה, מעבדים מודרניים מיועדים לפעול בצורה תקינה בשימוש של 100% ברוב המצבים, בליבה אחת או בכל הליבות, כך שממשק API שמגדיר שימוש של 80% כקריטי עלול לגרום למפתחים לנצל בצורה לא מספקת את יכולות החומרה ולהציע חוויית משתמש לא אופטימלית. לעומת זאת, יכול להיות שהמערכת לא מצוידת בקירור מתאים או שטמפרטורת הסביבה גבוהה מאוד, כמו בקיץ, והמערכת עשויה לבצע הגבלת עומס עוד לפני שהיא מגיעה לניצול גבוה של המעבד. ה-API הנוכחי פועל על לחץ גלובלי על מעבד, אבל אנחנו מתכננים להתנסות בהפעלת לחץ על מעבד לכל דף בשרשור הראשי ובעובדים.
ללחץ על משאבי המחשוב יש את המצבים הבאים:
- נומינלי: עומסי העבודה הנוכחיים יוצרים לחץ מינימלי, ומאפשרים למערכת לפעול בתדר שעון נמוך יותר כדי לחסוך באנרגיה.
- סביר: המערכת פועלת בצורה תקינה, הכול חלק והיא יכולה לבצע משימות נוספות ללא בעיות.
- חמור: יש לחץ רציני על המערכת, אבל אפשר להתמודד איתו, והמערכת פועלת בצורה טובה אבל עשויה להתקרב למגבלות שלה:
- מהירות השעון (בהתאם למתח AC או DC) גבוהה באופן עקבי.
- הטמפרטורות גבוהות אבל עדיין ניתנות לניהול ולא גורמות לויסות נתונים (throttle).
בשלב הזה, אם תוסיפו עוד עבודה, המערכת עשויה לעבור למצב קריטי.
- קריטי: המערכת עומדת להגיע למגבלות שלה, אבל היא עדיין לא הגיעה למגבלה. סטטוס קריטי לא אומר שהמערכת מוגבלת באופן פעיל, אבל המצב הזה לא בר-קיימא לטווח הארוך, ויכול לגרום להגבלת הקצב אם עומס העבודה יישאר ללא שינוי. האות הזה הוא הקריאה האחרונה לאפליקציית האינטרנט להקל על עומס העבודה שלה.
הפעלת 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 לחץure API זמין ב-Chrome 115 ב-Linux, ב-ChromeOS, ב-macOS וב-Windows.
הדגמה (דמו)
כדאי לנסות את הדמו המוטמע בהמשך כדי לראות איך מצב לחץ המחשוב משתנה בהתאם ללחץ מלאכותי כלשהו.
אם הדפדפן שלכם לא תומך ב-API, תוכלו לצפות בסרטון הבא כדי לראות הקלטה של הדמו.
משוב
המשוב של המפתחים חשוב מאוד בשלב הזה, לכן מומלץ לדווח על בעיות ב-GitHub עם הצעות ושאלות.
קישורים מועילים
- הסבר ציבורי
- מפרטים
- באג מעקב ב-Chromium
- הרשומה ב-ChromeStatus.com
- בדיקת תגים
- כוונה לערוך ניסוי
- דמו של Compute Pressure API | מקור הדמו של Compute Pressure API
תודות
התמונה הראשית (Hero) נוצרה על ידי Robert Anasch ב-Unsplash. הבדיקה של המאמר בוצעה על ידי Rachel Andrew ו-Thomas Steiner.