Fast Kernel Headers, סט של תיקונים שמאיצים את הידור הקרנל ב-50-80%

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

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

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

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

אני שמח להכריז על הגרסה הפומבית הראשונה של הפרויקט החדש שלי "ראשי ליבה מהירים" שאני עובד עליו מאז סוף 2020, שהוא עיבוד מחדש מקיף של היררכיית הכותרות של ליבת לינוקס והתלות בכותרות, במטרה כפולה של:

- להאיץ את בניית הקרנל (זמני בנייה מוחלטים וגם מצטברים)

- סוג ניתוק של תת-מערכת והגדרות API זה מזה

כפי שרוב מפתחי הליבה יודעים, יש בערך 10,000 כותרות .h ראשיות בליבת לינוקס, בהיררכיות include / ו- arch / * / include /. במהלך 30+ השנים האחרונות, הם התפתחו לקבוצה מסובכת וכואבת של תלות צולבת שאנו מכנים בחיבה 'גיהנום של תלות'.

בין השינויים שנעשו הם: הפרדה של קבצי כותרות ברמה גבוהה זה מזה, אי הכללה של פונקציות מוטבעות המקשרות קבצי כותרות, מיפוי של קבצי כותרות לסוגים וממשקי API, אספקת קבוצה נפרדת של קבצי כותרות (בערך 80 קבצים היו תלות עקיפה המפריעה להרכבה, שנחשפו דרך קבצי כותרות אחרים של קבצים), הוספה אוטומטית של תלות ל קבצי ".h" ו- ".c", אופטימיזציה שלב אחר שלב של קבצי כותרת, שימוש במצב "CONFIG_KALLSYMS_FAST = y", איחוד סלקטיבי של קבצי C לבלוקים של assembly להפחתת מספר קבצי האובייקט.

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

  • לדוגמה, לפני אופטימיזציה, שימוש בקובץ הכותרת "linux / gfp.h" הביא לתוספת של 13543 שורות קוד והכללה של 303 קבצי כותרת תלויים, ולאחר אופטימיזציה הגודל הצטמצם ל-181 שורות ו-26 קבצים תלויים.
  • דוגמה נוספת: עיבוד מקדים של קובץ "kernel / pid.c" הלא מתוקן מחבר בין 94 אלף שורות קוד, שרובן אינן בשימוש ב-pid.c. פיצול קבצי הכותרות איפשר לנו להפחית את כמות הקוד שעובד שלוש פעמים, ולהפחית את מספר השורות שעובדו ל-36.

כאשר הליבה נבנתה מחדש לחלוטין עם הפקודה "make -j96 vmlinux" במערכת הבדיקה, התיקון הראה הפחתה בזמן ההידור של ענף v5.16-rc7 מ-231,34 ל-129,97, 15,5 שניות (מ-27,7 ל-XNUMX בנייה לכל שעה) וגם הגדילה את היעילות של השימוש בליבת המעבד במהלך הבנייה.

עם קומפילציה מצטברת, אפקט האופטימיזציה בולט עוד יותר: הזמן לבנייה מחדש של הליבה לאחר ביצוע שינויים בקבצי הכותרת הצטמצם משמעותית (מ-112% ל-173%, תלוי בקובץ הכותרת המשתנה).

אופטימיזציות זמינות כעת רק עבור ארכיטקטורות ARM64, MIPS, Sparc ו-x86 (32 סיביות ו-64 סיביות).

בְּעֲדִינוּת אם אתה מעוניין לדעת יותר על כך, אתה יכול לבדוק את הפרטים ב הקישור הבא.


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

היה הראשון להגיב

השאירו את התגובה שלכם

כתובת הדוא"ל שלך לא תפורסם.

*

*

  1. אחראי לנתונים: מיגל אנחל גטון
  2. מטרת הנתונים: בקרת ספאם, ניהול תגובות.
  3. לגיטימציה: הסכמתך
  4. מסירת הנתונים: הנתונים לא יועברו לצדדים שלישיים אלא בהתחייבות חוקית.
  5. אחסון נתונים: מסד נתונים המתארח על ידי Occentus Networks (EU)
  6. זכויות: בכל עת תוכל להגביל, לשחזר ולמחוק את המידע שלך.