ניתן לקבוע את צריכת החשמל של רכיבים בודדים על ידי השוואת הערך הנוכחי המחושב באמצעות כשהרכיב נמצא במצב הרצוי (למשל, מופעל, פעיל או סריקה) הרכיב כבוי. מודדים את הזרם המיידי הממוצע שמשורטט במכשיר מתח נומינלי באמצעות מוניטור מתח חיצוני, כמו כלים לניטור סוללה (כגון תוכנת Monsons Solution Inc. , Power Monitor ו-Power Tool).
לעיתים קרובות יצרנים מספקים מידע על הצריכה הנוכחית של רכיב מסוים. יש להשתמש במידע זה אם הוא מייצג במדויק את המתח שנובע מסוללת המכשיר בפועל. עם זאת, צריך לבדוק את הערכים שסופקו על ידי היצרן לפני שמשתמשים בערכים האלה במכשיר פרופיל כוח.
שליטה בצריכת החשמל
בזמן המדידה, צריך לוודא שלמכשיר אין חיבור למקור טעינה חיצוני, כחיבור USB למארח פיתוח המשמש להפעלת Android Debug Bridge (adb). המכשיר בבדיקה עלולים שאף זרם מהמארח יקצר את המדידה. הימנעות מחיבור USB חיבורים במצב 'בדרכים' (OTG), כי מכשיר ה-OTG עשוי לשאוב זרם מהמכשיר בבדיקה.
לא כולל הרכיב שנמדד, המערכת צריכה לפעול ברמת הספק קבועה צריכה כדי להימנע ממדידות לא מדויקות שנגרמות על ידי שינויים ברכיבים אחרים. מערכת פעילויות שעלולות לגרום לשינויים לא רצויים במדידות האנרגיה כוללות:
- פעילות סלולרית, Wi-Fi ו-Bluetooth קולטת, משדרת או סורקת את התוכן. מתי לא מודדים את עוצמת הרדיו הסלולרי, יש להגדיר את המכשיר למצב טיסה ולהפעיל Wi-Fi או Bluetooth בתור המתאים.
- הפעלה/כיבוי של המסך. צבעים שמוצגים כשהמסך פועל יכולים להשפיע על צריכת הסוללה בטכנולוגיות מסך מסוימות. כיבוי המסך כשמודדים ערכים של רכיבים שלא נמצאים במסך.
- השעיה/המשך של המערכת. מצב של כיבוי מסך עלול לגרום להשעיית מערכת, להציב חלקים של המכשיר במצב של חשמל נמוך או כבוי. יכולה להיות לכך השפעה על צריכת החשמל של רכיבים שנמדדים והם מציגים שונים מדי פעם בקריאות כוח ממשיך לשלוח התראות וכו'. לפרטים, ראה שליטה במערכת להשעות.
- מעבדים (CPU) משנים את המהירות ונכנסים למצב לא פעיל של מתזמן הבקשות בעוצמה נמוכה או יוצאים ממנו.
במהלך פעולה רגילה, המערכת מבצעת התאמות בתדירות גבוהה במהירויות המעבד (CPU), כלומר מספר הפעמים
ליבות של המעבד (CPU) ומצבי ליבה אחרים של המערכת, כמו המהירות של אפיק הזיכרון ומתח של מסילות חשמל
שקשור למעבדים (CPU) ולזיכרון. במהלך הבדיקה, הכוונונים האלה משפיעות על מדידות האנרגיה:
- פעולות להתאמת מהירות המעבד (CPU) יכולות להפחית את שינוי קנה המידה של השעון והמתח של אוטובוסי זיכרון ורכיבי ליבה אחרים של המערכת.
- פעילות התזמון יכולה להשפיע על אחוז הזמן שמעבדים מקדישים למצבים של חוסר פעילות במהירות נמוכה. לקבלת פרטים על מניעת ההתאמות האלה במהלך הבדיקה, אפשר לעיין בכתובת שליטה במהירויות המעבד (CPU).
לדוגמה, Joe Droid רוצה לחשב את הערך screen.on
עבור מכשיר. הוא
מפעיל מצב טיסה במכשיר, מפעיל את המכשיר במצב נוכחי יציב, מחזיק במעבד
קבועה במהירות, ומשתמשת בנעילה חלקית של מצב שינה כדי למנוע השעיה של המערכת. לאחר מכן, יוסי מסובב את המכשיר
כבוי ומודדת (200 מיליאמפר לשעה). בשלב הבא, אבי מפעיל את מסך המכשיר לפחות
ומודדת מדידה נוספת (300 מיליאמפר לשעה). הערך של screen.on
הוא
100 mA (300 עד 200).
הערה: לרכיבים שאין להם צורת גל שטוחה של צריכה נוכחית פעיל (כמו רדיו סלולרי או Wi-Fi), וכלי למעקב אחרי מודלים.
כשמשתמשים במקור חשמל חיצוני במקום בסוללה של המכשיר, המערכת עשויה להיתקל בעיות עקב תרסיס סוללה שאינו מחובר או פינים עם מד דלק משולבים (כלומר קריאה של טמפרטורת הסוללה או קיבולת הסוללה שנותרה עלולה לכבות את הליבה או את Android ). סוללות מזויפות יכולות לספק אותות בפינים של תרסיסים או מד דלק שמחקים טמפרטורה וקריאת מצב החיוב של מערכת רגילה, ועשויים גם לספק לידים נוחים באמצעות חיבור לספקי כוח חיצוניים. לחלופין אפשר לשנות את המערכת כך שתתעלם נתונים לא תקינים מהסוללה החסרה.
בקרה על השעיית המערכת
בקטע הזה מוסבר איך למנוע מצב השעיה של המערכת כשלא רוצים שהוא יפריע בשילוב עם מדידות אחרות, ואיך למדוד את כוח ההתקפה של מצב תשעה של המערכת שרוצים למדוד אותו.
מניעת השעיית מערכת
השעיה של המערכת עלולה ליצור שונות לא רצויה במדידות של הספק ובמיקום של רכיבי המערכת במצבים של צריכת חשמל נמוכה שלא מתאימים למדידת צריכת חשמל פעילה. כדי למנוע מהמערכת כדי להשעות את המסך כשהמסך כבוי, צריך להשתמש בנעילה חלקית זמנית של מצב שינה. מחוברים באמצעות כבל USB את המכשיר למארח פיתוח ואז מריצים את הפקודה הבאה:
adb shell "echo temporary > /sys/power/wake_lock"
במצב wake_lock
, מצב כיבוי המסך לא גורם להשעיית המערכת.
(חשוב לזכור לנתק את כבל ה-USB מהמכשיר לפני המדידה של צריכת החשמל).
כדי להסיר את נעילת מצב השינה:
adb shell "echo temporary > /sys/power/wake_unlock"
מדידה של השעיית מערכת
כדי למדוד את צריכת החשמל במצב השעיה של המערכת, צריך למדוד את הערך של
cpu.idle
בפרופיל הכוח. לפני המדידה:
- מסירים את חסימות מצב שינה קיימות (כפי שמתואר למעלה).
- מעבירים את המכשיר למצב טיסה כדי להימנע מפעילות בו-זמנית ברדיו הסלולרי, יכול לפעול במעבד בנפרד מחלקי ה-SoC שנשלטים על ידי השעיית המערכת.
- כדי לוודא שהמערכת נמצאת במצב השעיה:
- אישור התוצאות הנוכחיות נשמר לערך קבוע. ערכי הקריאה צריכים להיות בטווח המצופה טווח של צריכת החשמל במצב ההשעיה של SoC וגם של צריכת החשמל של המערכת רכיבים שנשארים פעילים (למשל, USB PHY).
- המערכת בודקת את הפלט של קונסולת המערכת.
- בדיקת אינדיקטורים חיצוניים לגבי סטטוס המערכת (למשל, נורית LED שנכבית כאשר המכשיר לא מחובר השעיה).
שליטה במהירויות של המעבד (CPU)
ניתן להעביר מעבדים פעילים למצב אונליין או להעביר אותם למצב אופליין, לקבל את מהירות השעון ולשייך אותם מתחים השתנו (שעשויים להשפיע גם על מהירויות אפיק הזיכרון ועל מצבי כוח אחרים של הליבה של המערכת), ויכול להיכנס למצבים של חוסר פעילות בהספק נמוך יותר בזמן שהוא נמצא בתוך לולאת ללא פעילות של הליבה. בזמן מדידה של מעבדים שונים למצבי עוצמה של פרופיל כוח, להימנע משונות של משיכת כוח כאשר מודדים פרמטרים אחרים. פרופיל החשמל מבוסס על ההנחה שלכל המעבדים יש מהירויות ומאפייני כוח זהים.
בזמן שמודדים את עוצמת המעבד (CPU), או כשעוצמת המעבד (CPU) קבועה לצורך ביצוע מדידות אחרות, יש להמשיך
מספר המעבדים (CPU) שמתעדכנים באופן קבוע באינטרנט (למשל, מעבד אחד באינטרנט והשאר
אופליין/בחשמל מנותק). יכול להיות שלא תהיה אפשרות להשאיר את כל המעבדים (CPU) מלבד מעבד אחד במצב של חוסר פעילות
תוצאות. הפסקת ה-framework של Android באמצעות adb shell stop
יכולה לצמצם את מערכת
תזמון פעילות.
צריך לציין את מהירויות המעבד (CPU) שזמינות למכשיר בפרופיל החשמל
רשומה אחת (cpu.speeds
). כדי לקבל רשימה של מהירויות המעבד (CPU) הזמינות, מריצים את:
adb shell cat /sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state
המהירויות האלה תואמות למדידות ההספק המקבילות בערך cpu.active
.
בפלטפורמות שבהן מספר הליבות שהועברו לאינטרנט משפיע באופן משמעותי על צריכת החשמל, אולי יהיה צורך לשנות את מנהל ההתקן או את המושל של cpufreq בפלטפורמה. רוב הפלטפורמות תומכות שליטה במהירות המעבד (CPU) באמצעות מושל ה-cpufreq של מרחב המשתמשים ושימוש בממשקי sysfs כדי להגדיר המהירות שלו. לדוגמה, כדי להגדיר מהירות של 200MHz במערכת עם רק מעבד אחד (CPU) אחד או עם כל המעבדים (CPU) שחולקים אפשר להשתמש במסוף המערכת או במעטפת adb כדי להריץ את הפקודות הבאות:
echo userspace > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
echo 200000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq
הערה: הפקודות המדויקות משתנות בהתאם לאופן שבו הטמעת את ה-cpufreq בפלטפורמה.
הפקודות האלה מבטיחות שהמהירות החדשה לא חורגת מהגבולות המותרים, מגדירות את המהירות החדשה, ואז מדפיסה את המהירות שבה המעבד פועל בפועל (לצורך אימות). אם הערכים הנוכחיים של הפרמטר המהירות המינימלית לפני הביצוע גבוהה מ-200,000, ייתכן שצריך להפוך את הסדר בין שתי השורות הראשונות, או להריץ את השורה הראשונה שוב כדי להוריד את המהירות המינימלית כשמגדירים את המהירות המקסימלית.
כדי למדוד צריכת זרם של מעבד שפועל במהירויות שונות, צריך להשתמש במסוף המערכת את המעבד בלולאה שמאוגדת למעבד (CPU), באמצעות הפקודה:
# while true; do true; done
מודדים בזמן שהלולאה מתבצעת.
מכשירים מסוימים יכולים להגביל את מהירות המעבד המקסימלית בזמן ביצוע ויסות נתונים תרמי בגלל מדידת טמפרטורה (כלומר, לאחר הפעלת מעבדים במהירויות גבוהות למשך תקופות ממושכות). צפייה למשך הגבלה כזו, באמצעות הפלט של מסוף המערכת בעת ביצוע מדידות או על ידי בדיקת יומן ליבה (kernel) אחרי המדידה.
עבור הערך cpu.awake
, מודדים את צריכת החשמל כשהמערכת לא נמצאת
להשעות משימות ולא לבצע אותן. המעבד (CPU) צריך להיות בלולאת מצב לא פעילה במתזמן המשימות בעל עוצמה נמוכה
, ייתכן שהפעלתם הוראה של ARM Wait for Event או במצב של צריכת חשמל נמוכה שספציפית ל-SoC
עם זמן אחזור ליציאה מהירה שמתאים לשימוש ללא פעילות.
לערך של cpu.active
, צריך למדוד את צריכת החשמל כשהמערכת לא במצב השעיה וגם
לא לבצע משימות. מעבד CPU אחד (בדרך כלל המעבד הראשי) צריך להריץ את המשימה, וכל שאר המעבדים (CPU)
במצב לא פעיל.
מדידת הספק במסך
כשמודדים את השימוש במסך בחשמל, חשוב לוודא שמכשירים אחרים בדרך כלל מופעלים כשהמסך מופעלות גם הן. לדוגמה, אם מסך המגע והתאורה האחורית של המסך פועלים בדרך כלל כשהמסך מופעל, ודאו שהמכשירים האלה פועלים כשאתם מודדים כדי לקבל דוגמה מציאותית מסך צריכת חשמל.
צריכת החשמל של חלק מטכנולוגיות התצוגה משתנה בהתאם לצבעים המוצגים. למדידה של אספקת החשמל עשויה להשתנות באופן משמעותי בהתאם למה שמוצג על המסך בזמן מדידה. בזמן המדידה, צריך לוודא שבמסך מוצג משהו עם אספקת חשמל של מסך מציאותי. התמקדו בין הקיצוניים של מסך שחור לחלוטין ( צורכת את ההספק הנמוך ביותר עבור טכנולוגיות מסוימות) ומסך לבן בלבד. אפשרות מקובלת היא לצפות של לוח זמנים באפליקציית היומן, שיש בה שילוב של רקע לבן ורכיבים לא לבנים.
מודדים את צריכת החשמל של המסך במינימום ומקסימום בהירות התצוגה/התאורה האחורית. כדי להגדיר בהירות מינימלית:
- משתמשים בממשק המשתמש של Android (לא מומלץ). מגדירים את ההגדרות > בהירות התצוגה את פס ההזזה למידה המינימלית של התצוגה. עם זאת, ממשק המשתמש של Android מאפשר להגדיר בהירות רק מינימום 10-20% מהבהירות האפשרית של הפאנל או של התאורה האחורית, ואינו מאפשר הגדרה הבהירות כל כך נמוכה עד שאי אפשר לראות את המסך בלי להתאמץ.
- שימוש בקובץ sysfs (מומלץ). אם זמין, השתמש בקובץ sysfs כדי לשלוט את רמת הבהירות עד לבהירות המינימלית שנתמכת על ידי החומרה.
בנוסף, אם קובץ ה-sysfs של הפלטפורמה מאפשר להפוך את חלונית ה-LCD, את התאורה האחורית להפעיל או להשבית את מסך המגע, אפשר להשתמש בקובץ כדי למדוד מדידות כשהמסך פועל וכבוי. אחרת, להגדיר נעילה חלקית של מצב שינה כך שהמערכת לא תשעה, ואז להפעיל ולכבות את את המסך באמצעות לחצן ההפעלה.
מדידת עוצמת ה-Wi-Fi
ביצוע מדידות של חיבור Wi-Fi ברשת שקטה יחסית. הימנעות מהצגת עבודות נוספות עיבוד נפחים גבוהים של תעבורת נתונים בשידור, שלא קשורה לפעילות שנמדדת.
הערך wifi.on
מודד את צריכת החשמל כשה-Wi-Fi מופעל, אבל לא
בשידור או קבלה באופן פעיל. הערך הזה נמדד בדרך כלל כדלתא בין השרטוט הנוכחי
השעיית מערכת (שינה) עם Wi-Fi מופעל לעומת השבתה.
הערך wifi.scan
מודד את צריכת החשמל במהלך סריקת Wi-Fi לצורך גישה
נקודות. אפליקציות יכולות להפעיל סריקות Wi-Fi באמצעות המחלקה WifiManager
startScan()
API. אפשר גם לפתוח את ההגדרות > רשת Wi-Fi, שמבצעת נקודת גישה (AP)
סורקת כל כמה שניות עם עלייה נראית בצריכת החשמל, אבל צריך להפחית את צריכת החשמל
מהמדידות האלה.
הערה: מומלץ להשתמש בהגדרה מבוקרת (כמו iperf) כדי ליצור רשת לקבלה ולשדר .