פייסבוק פרסמה תיקונים המשפרים את בקר הזיכרון של ה- Slab בלינוקס

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

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

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

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

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

אם חשבונאות kmem מושבתת, הליבה יכולה להשתמש בשטח פנוי בדפי לוח לצורך הקצאות אחרות. «

בקר הזיכרון המוצע של לוח מאת רומנו גושצ'ין בשנה האחרונה היה די מבטיח כמו מגביר את היעילות של השימוש בלוח, להקטין את גודל הזיכרון בשימוש עבור לוח ב 30-45% ולהפחית באופן משמעותי את צריכת זיכרון הליבה הכוללת.

גם הצביעו על התיקונים המיושמים שפייסבוק כבר משתמשת בקוד בייצור בשרתים שלהם והייתה חיסכון של ~ 650-700MB + עבור שרתי אינטרנט חזיתיים, אחסון במטמון נתונים ושרתי DNS, בין היתר.

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

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

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

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

התיקון מכיל כמה חלקים עצמאיים למחצה, אשר יכולים למצוא את השימוש בהם גם מחוץ לבקר הזיכרון של הלוח:

  • ממשק ה- API של Subpage Load, שניתן להשתמש בו בעתיד לספירת אובייקטים אחרים שאינם בגודל של דף, למשל הקצאות percpu
  • ניתן לעשות שימוש חוזר בממשק ה- API של mem_cgroup_ptr, שבו מצביעים נספרים ל- memcg, לצורך השבה יעילה של אובייקטים אחרים, למשל מטמון דף.

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

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

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


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

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

*

*

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