יום ראשון, 26 בפברואר 2012

חומרה: מבט מפוכח על מהפכת ה SSD

טוב, אני יודע שרוב הקוראים של הבלוג הם אנשי תוכנה. מה לעזאזל יש למתכנת הג'אווה / #C להתעסק בברזלים של המחשב שמתקין בכלל איש ה-IT?
"מבחינתי שיהיה בצבע ירוק עם כוכבים, העיקר שהקוד של IFile יעבוד" - יכול לומר מתכנת אפליקציה שאינה דורשת ביצועים גבוהים.

התמונה משתנה כאשר אנו זקוקים לביצועים טובים יותר. המערכת שלנו היא לא רק התוכנה אלא גם החומרה - והבנה מה קורה שם למטה יכולה להיות כלי רב-עוצמה.

הנה 37Signals הראו שלא תמיד זקוקים לארכיטקטורה מתוחכמת כדי להשיג Internet Scale, צריך רק טרה זיכרון וכונני SSD על כל מכונה. רגע! טרה זיכרון?? - מסתבר שטרה זיכרון עולים כיום 12 אלף דולר - משכורת וחצי של מתכנת בארה"ב.

חכו רגע... אני שומע קולות ביקורת:
"בעיות ביצועים יש לפתור בתוכנה - לא בחומרה"
"הממ לא מבינים כלום, זה טוב להתחלה - אבל הם לא ישרדו"
"SSD יקרים מדי"
"SSD נשחקים. פתאום כל המידע שנשמר עליהם יעלם - ואז מה?"

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

חומרה - מה מתחדש?
אני מניח שרובכם למד באוניברסיטאות בעשור האחרון, ואני אמשיך ואניח שהאוניברסיטאות לימדו אתכם חומר בן עשור ויותר - כלומר אתם מכירים (לפחות) תאוריה של מעבד 8086 עם כמות זעומה של זיכרון.
מאז המספרים גדלים ללא-היכר, אך מלבד להכפיל את כל המספרים פי מאה מיליון מלאן-תלפים - האם משהו השתנה?!

מהירות רכיבי המחשב השונים מתקדמים עם הזמן - אל לא באותו הקצב. הדבר דומה מאוד לסדרי גודל של אלגוריתמים: נניח (O(n ו (O(n*lgn. כאשר ערכו של n הוא קטן הם יראו דומים, אך ככל שילך n ויגדל יתרבו הפערים עד ששני הביטויים (או היעילויות) יהיו מורגשות ביותר.


כך רכיבי המחשב הבסיסיים:
מעבד מרכזי (CPU), זיכרון (memory), כונן קשיח (HD) ורשת (network).
בואו נבחן את קצב ההתפתחות שלהם:

בראש אצים-רצים המעבדים, המכפילים את כוחם פי 2 כל 18 חודשים, או פי 100 בעשור. כיום הם כ"כ מהירים כך שהם הפכו במידת מה למשאב עודף: רוב המחשבים הבייתיים לא זקוקים ליותר מהמעבד הבסיסי ביותר. "גיימרים" משקיעים את כספם במאיצים גרפיים במקום במעבד ובחוות השרתים יש מגמה לקנות המון זיכרון על חשבון כח העיבוד (כל נושא ה In Memory Database).
אינטל - שחייה ממכירת מעבדים החלה להוסיף יכולות של כרטיס גרפי ישר לתוך ה CPU ולהתמקד בצריכת חשמל נמוכה [1]. מהירות המעבד הפכה כמעט ל Commodity.

מקום שני אצה-רצה הרשת, עם קצב גדילה של מרשים 50% בשנה או פי 57 בעשור.
אמנם הרשת החלה בנקודת פתיחה אומללה (למי שזוכר מודמים של 1200 סק"ש - שבהתחשב בסיביות הביקורת זה 120 בתים בשנייה) - אך היא מתקדמת בקצב מרשים ביותר וכיום: "אצלנו - אינרנט של 20Mbps זה סטנדרט!" [2]

מקום שלישי נמצאים הכוננים הקשיחים. אין לי נתונים מדוייקים, אך שיערוך גס שעשיתי מכמה גרפים מציג התקדמות בקצב ההעברה (transfer rate) של פי 15 עד 20 בעשור. קצב העברה של כוננים מגנטיים דיי נבלם בשנים האחרונות והוא עומד על כ 100MBps בערך [3]. יש לציין שנפח האיכסון, פרמטר חשוב אחר, גדל מעריכית ובקצב גדול בהרבה - בערך פי 100 בעשור.

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

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

מהו כונן SSD? (בקצרה)
SSD (קיצור ל Solid State Drive) הם כוננים מבוססי טכנולוגיה של זכרונות פלאש (בניגוד לדיסקים מגנטיים).
מכיוון שאין להם חלקים מכניים הם שקטים יותר, צורכים פחות חשמל, ויכולים לספוג זעזועים קשים מבלי להפגע (לא באחרויותי!).

ברשת ניתן להתקל במספרים לא מבוקרים שמצוטטים גם באתרי חדשות חשובים כגון "SSD מהיר פי 1000 עד 10000 מכונן קשיח רגיל". זה לא מקרה נדיר שאתרי חדשות מובילים מפרסמים מידע לא רציני. את הדיוק העיתונאי הם שומרים בעיקר למדור הפוליטיקה - שם יקנסו ב 300 אלף ש"ח על כל טעות - על פי חוק חדש. אם תתקינו כונן SSD חדיש במחשב שלכם תזכו לזמן טעינה של תוכנות הקצר בממוצע פי 2. כלומר, וורד יטען ב 2 שניות במקום ב 4 שניות. מי שקנה כונן SSD בעקבות כתבה "מהיר פי 1000 ויותר " פשוט עלול להתאכזב.

שלא תבינו לא נכון: קרוב לוודאי ש SSD הוא השדרוג הכי משמעותי שאתם יכולים לבצע כיום במחשב שלכם.


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


הבלוף של יצרני ה SSD (או למה RAID 0 מת)
עם הזמן, הופכים כונני ה SSD למוצר שיכול לרכוש גם המשתמש הביתי / הסטארט-אפ הקטן. בפחות מ 1000 שקל ניתן לקנות כונן בגודל 120GB שיכול להגיע לקצב קריאה של כמעט 600MBps! פי שש מכונן מגנטי מהיר!

SSD - שימו לב כמה זמן הגישה הוא מהיר! כך זה שכל מה שזקוקים לו הוא זרם חשמלי ולא זרוע מכנית שצריכה לנוע.

ווהו וואו - בטח אתם חושבים לעצמכם "אני אהיה ממש טיפש עם לא אקנה אחד כזה". "אולי אפילו אקנה שניים".

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

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

מקרא: Sequential - הוא קצב קריאה רציפה (נאמר קובץ של 1M ומעלה) ויש גם נתונים על קריאה של קבצים קטנים יותר.

מקור: theSSDReview.com

מקור: theSSDReview.com

ברור לי שאתם קוראים נבונים ותבחרו את הדיסק שמופיע במסגרת הכחולה. בעוד כונני SSD מציגים קצב קריאה של 500MBps לקריאה רציפה - נתון זה הוא לא מעניין כי פחות מ1% מהפעילות הרגילה של כונן קשיח היא פעילות על קבצים בגודל 512K ומעלה (למשל: העברת סרט וידאו מדיסק לדיסק. בתוך אותו הדיסק השינוי הוא רק ברישום של מערכת הקבצים) קריאה וכתיבה של קבצים בגודל 4K קוראת בקצב של עשרות MBps בכוננים המהירים ביותר.

שני נתונים החשובים על מנת להבין את התמונה השלמה:
  • דיסק מגנטי קורא קבצים בגודל 4K בקצב של פחות מ 1MBps.
  • בשימוש ממוצע בכונן הקשיח - כ 70% מהפעולות הם על קבצים (ליתר דיוק "בלוקים") בגודל 4K או 8K - כך שנתון זה הוא בעל משמעות מכריעה.
כאשר מציבים את המשקולות של אחוזי השימוש - ברור למדי שדיסק קשיח יש לבחור ע"פ פעולות הכתיבה של בלוקים ("קבצים") בגודל 4K ו 8K.

כונן SSD לא יעתיק קבצי ענק בצורה מהיר הרבה יותר והוא לא יגרום לתוכנות להטען מהר הרבה יותר.
אך אם יש לכם בסיס נתונים או Cache שמבצע המון פעולות קריאה וכתיבה של בלוקים קטנים וללא הרף - ההבדל המעשי הוא בין כ 300 פעולות לשנייה האפשריות על דיסק מגנטי מהיר במיוחד מול כמה עשרות אלפי פעולות לשנייה האפשריות על דיסק SSD מהיר במיוחד. פאקטור של פי 100-200 יותר פעולות. מהפכה.

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

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

רק בן חצי שנה - אבל נראה כמו בנג'מן באטן
העניין הוא שכונני SSD עוברים שחיקה מהירה.

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

בכל מקרה עבור מחשב ביתי, אפילו כונן ללא תמיכה ב TRIM עשוי לשרוד כמה שנים בצורה סבירה [4].
עבור מחשב לעבודה כדאי בהחלט שתהיה תמיכה ב TRIM.
עבור שרתים גם TRIM לא יעזור: שרת שעובד 24x7, והכונן מאפשר לו רבבות של פעולות בשנייה - הולך לשחוק את הכונן בקצב מהיר.

לעצם כך ישנם כונני SSD המוגדרים כ Enterprise Class - כוננים אשר לרוב משתמשים בטכנולוגיית SLC היקרה והנשחקת פחות ומשתמשים ב"ספיירים" של תאי זיכרון - ומתוכננים להחזיק מעמד כמה שנים תחת עבודה ממושכת. הם יעלו בערך פי 4 יותר, אם מדובר בשרת ממוצע. עבור מקרי קצה של כתיבה אינטנסיבית במיוחד ודרישות לכונן יציב כסלע - טושיבה תמכור לכם כונן 400GB אותו תוכלו לטחון ללא-אבחנה במשך 11 שנה במחיר פעוט של 7000$ לחתיכה.

וריאנטים אחרים של כונני SSD לשרתים יכולים לספק מהירויות גבוהות במיוחד ולרוב מתחברים ישירות לחריץ ה PCI-Express על מנת לדלג על בקר הדיסקים (חיבור SATA) על מנת לספק בערוץ ישיר נתונים לתוך המעבד במהירות מסחררת.

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


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

מדוע שלא תקנו דיסק מגנטי גדול וזול ועוד דיסק SSD קטן, נאמר 64GB, ואת כל הגישות שצריכות מהירות גבוהה תבצעו רק עליו? תאזנו בין נפח אכסון (דיסק מגנטי) למהירות (כונן SSD).

ייתכן ויהיו שימליצו לכם "לקנות דיסק SSD עבור מערכת ההפעלה". זוהי גישה מיושנת (אולי בת שנתיים) ולא כ"כ יעילה - רוב רובם של הקבצים של מערכת ההפעלה שוכבים כאבן שאין לה הופכין. הכנסו למשל בחלונות 7 לתיקיה C:\Windows\winsxs והסבירו לי מה מאכסנת שם מערכת ההפעלה בנפח של קרוב ל 10GB.

הגישה החדשה יותר (שנות העשרה) היא לתת לתוכנה לסדר לכם את הקבצים בהם משתמשים בתדירות גבוהה על ה SSD בעצמה: הקבצים אליהם ניגשים הרבה - על SSD וכל השאר - על הדיסק הגדול והאיטי. ניתן לעשות זאת בעזרת כונן SSD יעודי לתפקיד Caching כגון OCZ Synapse או Crucial Adrenaline המסופקים עם תוכנה מתאימה [5].

ישנם כוננים המגיעים בחבילה אחת האורזת דיסק מגנטי ודיסק SSD כגון Seagate Momentus XT (מה שנקרא דיסק היברידי - אם אחרי הפרסומות לבנק מזרחי אתם יכולים עוד להתייחס למילה הזו ברצינות).

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

עדכון 11.11.12: אפל הציגה גרסה משלה לכונן היברידי.

כך נראה הדיסק ההיברידי הראשון. פשוטו כמשמעו.

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

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

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




[1] היום, בחדרי השרתים, בוחרים מעבדים ע"פ כח חישוב לוואט. על כל וואט משלמים לא רק בחשבון החשמל. מכיוון שקירור הוא כבר קרוב לאופטימום על וואט עולה גם בחשמל של מערכת המיזוג ובנדל"ן - יש גבול כמה ניתן לקרר מטר מעוקב מבלי שהעלויות יזנקו.

[2] חבר סיפר לי שבקליפורניה, לפני שנתיים, 100 מגה היה דיי מקובל בקרב חובבי מחשבים. הנה נתונים עולמיים של הממוצע הביתי. לא שחשבתי שלקחתם את הפרסומת ברצינות.

[3] יש להבחין שנפח איכסון / קצב העברה של רכיבי אכסון נוהגים למדוד בבתים בשניה (Bps), בעוד מהירות של רשת מודדים בביטים לשנייה (bps) - מידה הקטנה פי 8 (כי יש 8 ביטים בבית). יש לשים לב האם האות B היא קטנה או גדולה על מנת לא להתבלבל.
לכן, כשאתם גולשים באינטרנט "5 מגה", או 5Mbps, - אתם יכולים להעביר רק "625KBps".

[4] שחיקה זו היא הסיבה מדוע ממליצים לא לבצע Defrag על כונני SSD. התמורה מאיחוד קבצים היא זניחה עבור כונן SSD (שקורא קבצים קטנים במהירות) - והשחיקה היא רבה.

[5] התוכנה, בשם Dataplex, יודעת לנהל ברזולוציה אפילו יותר מדוייקת מקבצים: רזולוציה של בלוקים של מערכת הקבצים - שגודלם לרוב 4K.


12 תגובות:

  1. מאלף כתמיד, רק שזה מבט מפוכח ולא מפוכך...

    השבמחק
  2. אחלה פוסט: אינפורמטיבי וקל לקריאה. כן ירבו.

    השבמחק
  3. לגבי מפוכך... אני לא יודע על מה אתה מדבר ;-)
    תודה!

    השבמחק
  4. השכלתי, תודה.

    השבמחק
  5. פוסט מצויין ליאור רציתי רק להעיר שיש הבדל בין מהירות לבין throughput המהירות של מעבדים נעצרה כבר יותר מעשור אבל ה throughput ממשיך לגדול לפי חוק מור. לגבי זיכרון RAM המהירות לא גדלה אבל בהחלט אם רוצים אפשר להגדיל את ה throughput וזה גם מה שעושים בשרתים רציניים (נקרא interleaving) מהרבה בחינות גדילת כח החישוב של של המעבד מקבילה לגידול במספר הטרנזיסטורים והמקבילה של זה היא גדילת נפח הזיכרון שהיא אקספוננצילית. כנ"ל גם בקשר לקצב קריאה מכונן אם מחברים כמה ביחד אפשר להכפיל את המהירות פי כמה. וזה כמובן גם נכון לגבי כונני SSD

    השבמחק
  6. היי lifey,

    אני מבין את ההקבלה (שמעבדים לא עוברים את ה 4 ומשהו גיגה-הרץ, אלא יש ריבוי ליבות) - וזו אבחנה יפה. אולם בכל זאת מעבד יכול לבצע עוד ועוד פעולות מסוג *שונה* בשנייה ו RAID 0 או RAID 5 או multi-channel memory - אינם יכולים (אני מניח שלזה התכוונת).
    הם יכולים לבצע קריאה של בלוק גדול יותר של מידע בכל פעם (דבר שמגביר לכאורה את ה throughput).

    אולם, למעבד שזקוק לרוב לחתיכות קטנות של מידע - זה לא עוזר. תביא לו אלף בתים בזמן שהיית מביא קודם לכן 100 בתים - אך הוא זקוק עדיין רק ל 20 הבתים הראשונים.
    כלומר, טכניקות אלו עוזרות לחלק מהפעולות, אבל ע"פ מחקר של SSDReview - זה פחות מ1% מסך הפעולות של הדיסק.

    לכן הייתרון ב RAID 0 הוא כמעט ולא משמעותי. אתה יכול להכפיל בעזרת RAID את קצב ההעברה פי 4 או 8 - אך העניין הוא מהירות הגישה לקבצים קטנים, שזה 70% מהפעולות ויותר, ושם לא יצרת שום שיפור.

    כנ"ל לגבי זכרון: יש היום זכרון quad channel, אבל המעבד עדיין מחכה בממוצע 400 cycles עד שהוא מקבל את תא הזכרון הראשון - לא שונה ממצב בו יש single channel.

    כלומר טכניקות אלו יוצרות שיפור - אך יישומו מוגבל למקרים מסויימים. ניתן לנסות לתכנת את המידע שהיה רציף כמו שתיארתי בפוסט זה: http://www.softwarearchiblog.com/2011/12/data-oriented-programming.html, אך מלאכה זו אינה קלה.

    SSD משפר את מס' הקבצים שנקראים/נכתבים בשנייה (מה שנקרא IOPS) בערך פי 100 - שזו קפיצת מדרגה משמעותית הרבה יותר מפי 5 בקצב ההעברה של מידע רציף - וזה מרכז העניין.


    האמת שהפוסט החל בשם "מותו של ה RAID 0" בכיוון שהיה אמור להסביר בדיוק את העניין הזה, אך חששתי שזו שהתעסקות בפרטים של Latency מול Throughput מול TPS תשעמם את רוב הקוראים ושיכתבתי אותו לקראת הסוף למצבו הנוכחי. מי יודע... אולי היה כדאי להשאיר חלקים לפוסט המשך שבו אפשר יהיה לדון יותר לעומק הפרטים...

    השבמחק
  7. נהניתי מאד לקרוא ולשתף את הפוסט הזה. הבלוג הזה באמת אחד הטובים שיש.

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

    תודה,
    דן

    השבמחק
  9. תודה, אני שמח לשמוע!

    תגובות כאלו נותנות לי את הכח להמשיך ולכתוב.


    ליאור

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

    השבמחק
  11. שלום רותם,

    אני חושב שהפורום הממולץ לדיון כזה הוא: http://hwzone.co.il/community/index.php?board=24.0

    אנשים פה עלולים לעודד אותך להוצאות יקרות :)

    לגבי כונן SSD: את יכולה לחסוך כמה שניות בכל טעינה של מסמך (וורד, אקסל) במחיר של בערך 1000 שקל. זו העדפה מאוד אישית.

    אני באמת חושב שתקבלי פרספקטיבה יותר רחבה בלינק שלמעלה.

    ליאור

    השבמחק
  12. ממליץ להיזהר עם כונני SSD, כי הבקרים שלהם נתונים לעומסים שיכולים לשרוף אותם. קרה לי עם כונן של TRANSCEND ושמעתי בחנות KSP על החזרות רבות של כונני SANDISK. כך שלא כדאי לשים עליהם מידע רגיש (רק את ה-OS ותוכנות), ותמיד לגבות.

    השבמחק