חדשות היום

הארכת תוחלת חיי מוצרים באמצעות Wear-Leveling

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

תרשים 1

תרשים 1

מדדי אורך חיים של פלאש
מדדי אורך החיים של זיכרון הפלאש נמצאים בדרך כלל בעמוד הראשון של נתוני יצרי הזיכרון.
שמירת הנתונים
מחזור סיבולת (Endurance cycle)
ערך שמירת הנתונים מופיע לעיתים לטווח של 20 שנה עבור טמפרטורת הפעלה נתונה. ככל שגדלו טווחי הטמפרטורה והתקרבו לטמפרטורת ההפעלה, קטנו זמני שמירת הנתונים בהתאם. חשוב לציין שערך שמירת הנתונים נמדד מרגע תכנות הרכיב. הערך השני, מחזורי הסיבולת, הוא מדד של מספרי הכתיבה והמחיקה שהפלאש יכול לעבור לפני שהוא הופך לבלתי אמין.
זיכרון הפלאש מאורגן למספר בלוקים או סקטורים מחיקים כאשר כל אחד חייב להימחק לפני כתיבת נתונים. גודל בלוק טיפוסי הוא 128KB, אולם תלוי ברכיב הספציפי, זה עשוי לנוע בין 512KB ועד 4,0996KB ויותר. לא ניתן לכתוב מחדש כתובת נתונה בתוך בלוק בלי מחיקתה קודם. מחזורי מחיקה הם מחזורים מצטברים ומשפיעים רק על אותם בלוקים ממוחזרים. במילים אחרות, שגיאה בבלוק מחוק מוגבל לנתונים באותו בלוק בלבד.  טווחי מחזורי מחיקה של פלאש SLC נע בין 1,000 ועד 100,000. בעוד שטווחים אלו עם הבדלי גודל משמעותיים, זה דווקא השימוש האפליקטיבי בפלאש שיגדיר באמת את חיי המוצר.
מה זה בעצם

Wear-Leveling?
Wear-Leveling הוא תהליך שנועד להבטיח שהתקן הזיכרון או מערך של התקנים נמצאים בשימוש אחיד על מנת להאריך את חייו הכוללים של הפלאש. לקבלת דוגמה פשטנית של Wear-Leveling בואו נבחן אפליקציה של מקליט נתונים עם המאפיינים הבאים:
יישום: מכשיר האוסף ומאחסן נתוני שטח של 24 השעות האחרונות על ידי כתיבה ושכתוב הנתונים לאותו מקום על הפלאש
גודל קובץ הנתונים שיירשם: 128KB
גודל בלוק מחיקה (של הפלאש): 128KB
סיבולת זיכרון הפלאש: 1,000 מחזורים
עם בלוק חלופי אחד, ההנחה שהמכשיר משתמש במחזור אחד ליום בכל שנה:
(1,000 מחזורים ÷ 365 ימים) * 1 בלוק מחיק חלופי = 2.74 שנים בדוגמה זו התוצאה מראה שייקח בערך 2.74 שנים למחזור למחוק סקטור אחד 1,000 פעמים. המשמעות שעבור מכשיר מקליט נתונים כדי להתאים את עצמו לכללי כתיבה ומחיקה של זיכרון פלאש, אומר שצריך היה להשלים פעולת מחיקה כדי להתחיל כתיבה של הסט של נתוני היום הבא. כדי להפוך את מקליט הנתונים לאמין יותר, וכדי לוודא שאינו מאבד יום שלם של הקלטת נתונים, צריך להפריש בלוק ולכתוב עליו את יום ההקלטה השני ורק אז למחוק את הבלוק הראשון, וזאת לאחר שיום ההקלטה השני הוקלט בהצלחה. תוצאה המתקבלת היא למעשה יישום של סכימה פשוטה של Wear-Leveling.
עם שני בלוקים חילופיים, ההנחה שהמכשיר עובר מחזור אחד כל יומיים בכל שנה: (1,000 מחזורים ÷ 365 ימים)* 2 בלוקים מחיקים חלופיים = 5.48 שנים
עם פרמטרים אלה, תקופת זמן מיחזור הפלאש לאורך חייו גדל מ 2.74 שנים ל 5.48 שנים!
דוגמה פשוטה זו ממחישה כיצד חלוקת סט קבוע של כתיבה על פני יותר סקטורים של פלאש יכול להגדיל את משך הזמן לפני הגעתו של הרכיב למגבלותיו.  החלק הבא, מתאר את המשתנים החשובים של הפלאש הקשורים ל-Wear-Leveling וטכניקות לבדיקת אורך החיים של פלאש ליישומים שונים.

הנתונים הבאים מתארים את המושג של Wear-Leveling. לדיסק הבזק (flash disk) בדוגמה הבאה יש סיבולת מקסימלית של 100,000 מחזורים. איור 1 מראה דיסק שאינו עושה שימוש בתוכנת Wear-Leveling, בעוד איור 2 מציג דיסק מנוהל עם התוכנה. יצוין שהסקטורים שחרגו מ-100,000 מחזורים באיור 1 אינם יכולים לאחסן נתונים ואפילו השחיתו את הנתונים המאוכסנים. סקטורים אלה מייצגים את האזורים הנמצאים בשימוש אינטנסיבי. בהקבלה, על גבי דיסק FAT למשל זה יהיה האזור בו נמצאת טבלת ה-FAT שהשחתתו תגרום לדיסק להפוך לבלתי קריא.
אזורי שימוש הפיזיים התחתונים של הדיסק, אשר עשוי לכלול קוד יישום ואת מערכת ההפעלה לעולם לא יגיע לסיבולת פלאש המקסימלית. ללא Wear-Leveling הסקטורים בשימוש נמוך מבוזבזים. ומנגד השימוש בדיסק באיור 2 מתחלק מאופן שווה ומאפשר אמינות ואורך חיים מקסימלי.

יישום מקצועי של
Wear-Leveling
יישום נכון של Wear-Leveling יכתוב נתונים לפלאש בידיעה שלא ניתן פשוט לשכתב אותם לדיסק בצורה סדירה. כיצד כותבים אלגוריתמיים כאלה זה מעבר להתייחסות המאמר, אבל הרעיון הוא לכתוב ביעילות ברחבי הפלאש לפני שכתוב לאותו מקום.
סכמה של Wear-Leveling בנוי ממנהל יעיל של פלאש המבצע מעקב אחרי המחיקות שנעשות בכל בלוק. במקרה כזה בלוקים בשימוש גבוה וגם נמוך מנוטרים. המקרה הזה נקרא Wear-Leveling דינמי. כאשר המחיקות מצטברות, מתקיימת בקרה בין הספירות הגבוהות והנמוכות. אם נוצרת קבוצה מסוימת של אילוצים, מתבצעת פעולת Wear-Leveling אשר מחליפה בין הבלוק שנמחק הכי פחות פעמים עם הבלוק שהיה בשימוש לאחרונה.
שני פרמטרים שולטים במחיקות Wear-Leveling. הראשון הוא ההבדל המרבי המותר לפני שמתקיימת מחיקת Wear-Leveling, והשני מגביל את התדירות של מחיקות Wear-Leveling. בהתחשב בצורך לשמור על רמת ביצועים גבוהה של קריאה/כתיבה לפלאש, תוכנת ניהול הפלאש לעולם לא תעשה שימוש במחיקות Wear-Leveling אם אינן נחוצות. במקום זה, תוכנת הניהול תעבור מאזור בעל שימוש גבוה של פלאש לאזורי שימוש נמוכים כך שלאורך זמן ישמר הממוצע בתיחום מוגדר מראש. חשוב לציין שהמערכת מנצלת את כל שטח הדיסק דרך הזזה ״בכוח״ של אזורים סטטיים של הפלאש שאחרת לא יכתבו. על מנת להבטיח שתהליך הWear-Leveling לא יפגע בביצועים או שלמות נתוני מֵטָ‏א דָ‏אטָ‏ה, תוכנת ניהול הפלאש חייבת להתחיל מחיקה הרבה לפני שצבר הכתיבות שווה לגודל הדיסק.
השוואה בין FlashFX ל-JFFS2
מערכת ניהול קבצים בפלאש בקוד פתוח למערכת ההפעלה לינוקס נקראת JFFS2 . לצורך מאמר זה לא נכנס ליתרונות וחסרונות של מערכת הקבצים הזו, אבל נשווה את תוצאות הביצועים למערכת מסחרית קיימת.
כדי להתגבר על בעיות הקשורות לניהול נכון של כתיבה/קריאה של נתונים לפלאש, קיימים מספר פתרונות מסחריים. במקרה זה, ניקח לדוגמה פתרון פופולרי של חברת Datalight הנקרא FlashFX. במקרה זה נמדדה האפקטיביות של אלגורתמי ה-Wear-Leveling דרך ספירת פעולת המחיקה של כל בלוק על המדיה, והושווה הערך הגבוה ביותר לנמוך ביותר. המדידה נעשתה כאשר בערך 10% מהנתונים על המדיה היו סטטיים (נכתבו למדיה ולא שוכתבו שוב) וזה בהשוואה למצב בו 60% מהנתונים היו סטטיים. בטבלה ניתן לראות את הערכים הגבוהים והנמוכים של כל מקרה שנבחן.
גרפים 1-3 מראים את ספירת המחיקה של כל 512 בלוקים של מדיית פלאש על טווח של למעלה מ 4000 ספירות מחיקה. למערכת הקבצים של לינוקס JFFS2 קיימת ספירת מחיקה שמשתנה במידה רבה בתוך הטווח הזה לעומת FlashFX השומרת על ספירת מחיקה בטווח של 900 מחיקות.

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

אבי כהן, פרטק

תגובות סגורות