שאלה:
RAID5 עובד בשיטת פויינטרים או כמו בקרת תצורה?
תודה
תגובות לכתבה: מה זה RAID?
- kingikra
- חבר שלא מהעולם הזה
- הודעות: 8040
- הצטרף: דצמבר 2006
- נתן תודות: 335 פעמים
- קיבל תודות: 242 פעמים
הבנת את השאלה שלי מצוין אבל עכשיו אני לא מבין איך זה עובדurisavor כתב:אם הבנתי את השאלה שלך, אז לא זה ולא זה. העבודה נעשית ברמת בלוקים. אין פה ניהול גירסאות משום סוג שהוא.kingikra כתב:שאלה:
RAID5 עובד בשיטת פויינטרים או כמו בקרת תצורה?
תודה......
איך יכול להיות שעל דיסק בנפח 1 ג'יגה, מתאכסן דאטא של דיסקים בגודל 2 ג'יגה אלא אם כן זה מכווץ, פויינטרים (TRANSACTION LOG של דאטאבייס). למיען האמת, בקרת תצורה באמת לא רלוונטי פה במחשבה שניה.
- urisavor
- חבר פעיל במיוחד
- הודעות: 908
- הצטרף: ספטמבר 2009
- מיקום: רחובות
- נתן תודות: 46 פעמים
- קיבל תודות: 54 פעמים
לא...בraid5 על שלושה דיסקים של 1 טרה כל אחד יושבים 2 טרה נתונים בסך הכל . כל בלוק מחולק לשני חלקים, שנכתבים לשני דיסקים שונים, ובלוק שלישי מחושב מהם, ונכתב על הדיסק השלישי. החישוב הוא כזה, שבהנתן כל שניים מהבלוקים, ניתן לשחזר את השלישי. באופן כזה, אם הולך דיסק, אז ניתן לשחזר אותו מהדיסקים שנותרו.
מבחינת מערכת ההפעלה, היא רואה דיסק יחיכ (בדוגמה לעיל דיסק יחיד של 2 טרה).
מבחינת מערכת ההפעלה, היא רואה דיסק יחיכ (בדוגמה לעיל דיסק יחיד של 2 טרה).
אני אנסה להסביר קצת...
שימו לב להבדל בין ביט (bit) לבין בייט (byte).
בייט אחד=שמונה ביטים (לשם ההבנה אפשר לומר שבייט מייצג תו בודד, למשל a, זה לא 100% נכון - אבל זה מספיק)
Raid5 בגדול עובד עם משהו בסגנון שער XOR.
שער XOR מקבל שני פרמטרים, 0 או 1.
אם הפרמטרים שונים הוא מחזיר 1 אם הם שווים הוא מחזיר 0.
בסופו של יום הכל נכתב על הדיסק בתור או 0 או 1 (ביטים)
על מנת לאפשר שרידות שמאפשרת איבוד דיסק אחד בודד, מה שעושים זה לוקחים את כל הביטים (1 או 0) מאותו מקום בדיוק בכל הדיסקים ומעבירים בשער.
התוצאה המתקבלת היא ה- parity bit.
עכשיו נניח שאבד אחד הביטים של המידע, תמיד ניתן לחשב אותו... עושים XOR להכל ולפי ה- parity bit ניתן לדעת מה הוא היה.
ניתן להבין בקלות למה, כשיוצרים מערך RAID5, "מאבדים" גודל של דיסק אחד (זה המקום שצריך עבור כל ה- parity bits).
ד"א, ה- parity bits לא נכתבים כולם על אותו דיסק, עבור כל בייט, דיסק אחר משמש כ- parity - זה אמור לתת ביצועים טובים יותר.
בנוסף ניתן להבין למה לכתוב לתצורת RAID5 זה "יקר" - עבור כל בייט שנכתב יש חישוב של parity bit... (=בקר טוב יותר כותב יותר מהר.. יש לו מעבד מהיר יותר ו- cache)
ד"א, במקרה ואחד הדיסקים נפל, גם הקריאות "מתייקרות" - יש צורך לחשב כל בייט גם בקריאה...
תומר.
שימו לב להבדל בין ביט (bit) לבין בייט (byte).
בייט אחד=שמונה ביטים (לשם ההבנה אפשר לומר שבייט מייצג תו בודד, למשל a, זה לא 100% נכון - אבל זה מספיק)
Raid5 בגדול עובד עם משהו בסגנון שער XOR.
שער XOR מקבל שני פרמטרים, 0 או 1.
אם הפרמטרים שונים הוא מחזיר 1 אם הם שווים הוא מחזיר 0.
בסופו של יום הכל נכתב על הדיסק בתור או 0 או 1 (ביטים)
על מנת לאפשר שרידות שמאפשרת איבוד דיסק אחד בודד, מה שעושים זה לוקחים את כל הביטים (1 או 0) מאותו מקום בדיוק בכל הדיסקים ומעבירים בשער.
התוצאה המתקבלת היא ה- parity bit.
עכשיו נניח שאבד אחד הביטים של המידע, תמיד ניתן לחשב אותו... עושים XOR להכל ולפי ה- parity bit ניתן לדעת מה הוא היה.
ניתן להבין בקלות למה, כשיוצרים מערך RAID5, "מאבדים" גודל של דיסק אחד (זה המקום שצריך עבור כל ה- parity bits).
ד"א, ה- parity bits לא נכתבים כולם על אותו דיסק, עבור כל בייט, דיסק אחר משמש כ- parity - זה אמור לתת ביצועים טובים יותר.
בנוסף ניתן להבין למה לכתוב לתצורת RAID5 זה "יקר" - עבור כל בייט שנכתב יש חישוב של parity bit... (=בקר טוב יותר כותב יותר מהר.. יש לו מעבד מהיר יותר ו- cache)
ד"א, במקרה ואחד הדיסקים נפל, גם הקריאות "מתייקרות" - יש צורך לחשב כל בייט גם בקריאה...
תומר.
ובהמשך למה ש-byoyo אמר
בכל העברת מידע דיגיטלית (או שמירה במקרה של דיסקים), מוסיפים ביטים לצורך זיהוי ותיקון שגיאות.
ישנם מספר רב של אלגוריתמים שקובעים איך מחשבים את הביטים שמתווספים, ומה יכולות של התוספת הזאת. לכל קוד שכזה (קוד = אלגוריתם) יש נתונים האומרים כמה שגיאות הוא יכול לזהות (כמה ביטים שגויים) וכמה כאלו הוא יכול גם לתקן (מספר נמוך יותר). ככלל אצבע, ככל שמוסיפים יותר יתירות יכולת הזיהוי והתיקון עולה.
במערך דיסקים יש חשיבות עליונה ליכולת לשחזר = לתקן את כל הביטים הפגומים, ולכן נדרשים קודים יחסית יקרים מבחינת האורך שלהם --> הרבה דיסקים.
בתקשורת חשובה יותר יכולת זיהוי השגיאה ופחות יכולת התיקון (ניתן לבקש לשדר שוב אם זוהתה טעות). ולכן אורך היתירות שם קטן יותר.
בכל העברת מידע דיגיטלית (או שמירה במקרה של דיסקים), מוסיפים ביטים לצורך זיהוי ותיקון שגיאות.
ישנם מספר רב של אלגוריתמים שקובעים איך מחשבים את הביטים שמתווספים, ומה יכולות של התוספת הזאת. לכל קוד שכזה (קוד = אלגוריתם) יש נתונים האומרים כמה שגיאות הוא יכול לזהות (כמה ביטים שגויים) וכמה כאלו הוא יכול גם לתקן (מספר נמוך יותר). ככלל אצבע, ככל שמוסיפים יותר יתירות יכולת הזיהוי והתיקון עולה.
במערך דיסקים יש חשיבות עליונה ליכולת לשחזר = לתקן את כל הביטים הפגומים, ולכן נדרשים קודים יחסית יקרים מבחינת האורך שלהם --> הרבה דיסקים.
בתקשורת חשובה יותר יכולת זיהוי השגיאה ופחות יכולת התיקון (ניתן לבקש לשדר שוב אם זוהתה טעות). ולכן אורך היתירות שם קטן יותר.
מידע משלים
RAID מציע פשרה בין עלות, ביצועים ושרידות וכאשר בוחרים את סוג הRAID צריך לקחת את שלושת המיימדים האלה בחשבון
כדי להבין את ההשפעה על הביצועים צריך להבין איך דיסק עובד ובשביל זה צריך להבין איך דיסק בנוי.
אני אנסה להסביר (ההסבר הוא לדיסקים רגילים ולא לSSD אבל העקרונות יכולים לעבור טרנספורמציה)
בנייה
כל דיסק בנוי ממערך של פלטות (plates), כל פלטה מחולקת לtracks (כמו תקליט ווניל) וכל track מחולק ל-sectors
כשמסתכלים על הכל בתלת מימד זה נראה כמו סדרת גלילים (cylinders) הנוצרים מכל הtracks באותו מרחק מהמרכז, כל sector בתלת מימד מקבל כתובת יחודית הנקראת block
התמונה הבאה מנסה להמחיש את זה:
מעל ומתחת לכל פלטה יש ראש קורא והראש יכול לזוז רק לשני כיוונים פנימה (לכיוון המרכז) והחוצה
פעולה
הדיסקים כל הזמן מסתובבים וכאשר ניתנת פקודת קריאה כתיבה הראש זז קדימה או החוצה לtrack המבוקש, ואז הוא ממתין לסיבוב של הדיסק כדי שהבלוק הרצוי יתמקם מתחת לראש , בממוצע מדובר על המתנה של חצי סיבוב. סך כל הזמן שעובר ברגע קבלת הפקודה ועד תחילת הקריאה נקרא access time
לדוגמא , נניח שהדיסק מסתובב במהירות של 10000 RPM (10000 סיבובים לדקה) הזמן לעשות חצי סיבוב הוא 3ms, ונניח שהזמן הממוצע של הראש לזוז בין tracks הוא 5ms אז הaccess time הוא 8ms, זה זמן לגישה אקראית לבלוק, אם הגישה היא רציפה (כלומר גישה לבלוקים עוקבים כמובן שהזמן הראה יותר מהיר, לכן חשוב לעשות defrag )
מכיוון שלוקח זמן לדיסק לגשת לקריאה (בדוגמא 8ms) יש מגבלה על הכמות של פקודות אותן הדיסק יכול לקבל בשניה, בדיסק הדוגמא שלנו הכמות היא 1000ms/8ms=125 כלומר 125 פקודות לשניה (IOPS)
אבל מה קורה אם האפליקציה שלנו צריכה 200IOPS לשם כך צריך לחבר שני דיסקים למערך אחד והמערך הזה מסוגל לנפק 250IOPS (ע"פ דיסק הדוגמא)
וכאן למעשה הומצא הRAID הראשון , RAID 0
RAID0
כמו שהסברתי הפתרון הזה נועד להגברת המהירות ע"י חיבור דיסקים במערך אחד, בנוסף הנפח שמתקבל הוא כמספר הדיסקים, אולם כמו שנאמר במאמר , אם דיסק אחד מתקלקל המידע אבוד.
RAID1
בגלל חוסר אמינותם של הדיסקים היה צורך ליצר שרידות מידע במצב של כשל דיסק, לשם כך חיברו שני דיסקים ביחד כשאשר הם העתק מדוייק אחד של השני כך שאם אחד הדיסקים נפגע, הדיסק הנוסף יכיל את כל המידע וכך תושג ההשרדות. מבחינת פעילות כל IO (פקודת דיסק) שמגיע לכתיבה מוכפל ונכתב על שני הדיסקים , אולם כל IO שמגיע לקריאה מנותב רק לאחד הדיסקים , וזה נותן ביצועי קריאה כמו RAID0
זהו הפתרון היקר ביותר אבל גם השריד ביותר ובמינימום פגיעה בביצועים
RAID5
פתרון זה נועד הוריד את עלות פתרון RAID1 כאשר עדין מספקים שרידות גבוהה אולם במחיר כבד של ביצועים
אני אפנה למאמר לתמונה של RAID5 אתם יכולים לראות בתמונה הזאת כי הדיסקים מחולקים לשכבות (בציור יש 4 שכבות A,B,C,D כל שכבה מנוהלת כיחידה אחת ודיסק את נבחר לשמור את מידע השרידות ע"י פעולת XOR המיצרת parity, בציור הparity מצויין כp קטנה ליד כל אחת מהשכבות.
בקריאת מידע הביצועים הם דומים לRAID0 קצת יותר נמוכים (כי דיסק אחד תמיד מכיל את המיגע להשרדות ,parity, ולא יכול לשמש לקריאה
בכתיבת מידע יש פגיעה רצינית בביצועים, קודם צריך לקרוא את המידע הישן , אחר כך צריך לחשב שוב את הparity ע"י XOR , ולבסוף לכתוב אותו שוב, כלומר על כל בקשה של IO לכתיבה צריך לבצע שתי בקשות כתיבה על הדיסקים (פי שתיים יותר איטי) בנוסף בגלל שהRAID צריך לנהל את החלוקה לdata וparity הוא צריך לשמור את המידע בבלוקים קטנים יחסית למשל של 512KB כלומר אם מגיעה בקשה של 1MB היא תפוצל לשתי בקשות אותן יבצעו פעמים (עבור 1MB בקשה, ביצועים איטיים פי 4, עבור בקשה בגודל 2MB ביצועיים איטיים פי
סיכום
כשבוחרים RAID חייבים להבין כיצד הוא עובד ולבצע החלטה שמבוססת על עלות, ביצועים, שרידות
ולהתאים את הRAID לאפליקציה הרצוייה.
אם המידע שאנו מאכסנים הוא בעיקר סרטים RAID5 אמור לספק את הסחורה במחיר הנמוך ביותר , עם רמת שרידות טובה
כדי להבין את ההשפעה על הביצועים צריך להבין איך דיסק עובד ובשביל זה צריך להבין איך דיסק בנוי.
אני אנסה להסביר (ההסבר הוא לדיסקים רגילים ולא לSSD אבל העקרונות יכולים לעבור טרנספורמציה)
בנייה
כל דיסק בנוי ממערך של פלטות (plates), כל פלטה מחולקת לtracks (כמו תקליט ווניל) וכל track מחולק ל-sectors
כשמסתכלים על הכל בתלת מימד זה נראה כמו סדרת גלילים (cylinders) הנוצרים מכל הtracks באותו מרחק מהמרכז, כל sector בתלת מימד מקבל כתובת יחודית הנקראת block
התמונה הבאה מנסה להמחיש את זה:
מעל ומתחת לכל פלטה יש ראש קורא והראש יכול לזוז רק לשני כיוונים פנימה (לכיוון המרכז) והחוצה
פעולה
הדיסקים כל הזמן מסתובבים וכאשר ניתנת פקודת קריאה כתיבה הראש זז קדימה או החוצה לtrack המבוקש, ואז הוא ממתין לסיבוב של הדיסק כדי שהבלוק הרצוי יתמקם מתחת לראש , בממוצע מדובר על המתנה של חצי סיבוב. סך כל הזמן שעובר ברגע קבלת הפקודה ועד תחילת הקריאה נקרא access time
לדוגמא , נניח שהדיסק מסתובב במהירות של 10000 RPM (10000 סיבובים לדקה) הזמן לעשות חצי סיבוב הוא 3ms, ונניח שהזמן הממוצע של הראש לזוז בין tracks הוא 5ms אז הaccess time הוא 8ms, זה זמן לגישה אקראית לבלוק, אם הגישה היא רציפה (כלומר גישה לבלוקים עוקבים כמובן שהזמן הראה יותר מהיר, לכן חשוב לעשות defrag )
מכיוון שלוקח זמן לדיסק לגשת לקריאה (בדוגמא 8ms) יש מגבלה על הכמות של פקודות אותן הדיסק יכול לקבל בשניה, בדיסק הדוגמא שלנו הכמות היא 1000ms/8ms=125 כלומר 125 פקודות לשניה (IOPS)
אבל מה קורה אם האפליקציה שלנו צריכה 200IOPS לשם כך צריך לחבר שני דיסקים למערך אחד והמערך הזה מסוגל לנפק 250IOPS (ע"פ דיסק הדוגמא)
וכאן למעשה הומצא הRAID הראשון , RAID 0
RAID0
כמו שהסברתי הפתרון הזה נועד להגברת המהירות ע"י חיבור דיסקים במערך אחד, בנוסף הנפח שמתקבל הוא כמספר הדיסקים, אולם כמו שנאמר במאמר , אם דיסק אחד מתקלקל המידע אבוד.
RAID1
בגלל חוסר אמינותם של הדיסקים היה צורך ליצר שרידות מידע במצב של כשל דיסק, לשם כך חיברו שני דיסקים ביחד כשאשר הם העתק מדוייק אחד של השני כך שאם אחד הדיסקים נפגע, הדיסק הנוסף יכיל את כל המידע וכך תושג ההשרדות. מבחינת פעילות כל IO (פקודת דיסק) שמגיע לכתיבה מוכפל ונכתב על שני הדיסקים , אולם כל IO שמגיע לקריאה מנותב רק לאחד הדיסקים , וזה נותן ביצועי קריאה כמו RAID0
זהו הפתרון היקר ביותר אבל גם השריד ביותר ובמינימום פגיעה בביצועים
RAID5
פתרון זה נועד הוריד את עלות פתרון RAID1 כאשר עדין מספקים שרידות גבוהה אולם במחיר כבד של ביצועים
אני אפנה למאמר לתמונה של RAID5 אתם יכולים לראות בתמונה הזאת כי הדיסקים מחולקים לשכבות (בציור יש 4 שכבות A,B,C,D כל שכבה מנוהלת כיחידה אחת ודיסק את נבחר לשמור את מידע השרידות ע"י פעולת XOR המיצרת parity, בציור הparity מצויין כp קטנה ליד כל אחת מהשכבות.
בקריאת מידע הביצועים הם דומים לRAID0 קצת יותר נמוכים (כי דיסק אחד תמיד מכיל את המיגע להשרדות ,parity, ולא יכול לשמש לקריאה
בכתיבת מידע יש פגיעה רצינית בביצועים, קודם צריך לקרוא את המידע הישן , אחר כך צריך לחשב שוב את הparity ע"י XOR , ולבסוף לכתוב אותו שוב, כלומר על כל בקשה של IO לכתיבה צריך לבצע שתי בקשות כתיבה על הדיסקים (פי שתיים יותר איטי) בנוסף בגלל שהRAID צריך לנהל את החלוקה לdata וparity הוא צריך לשמור את המידע בבלוקים קטנים יחסית למשל של 512KB כלומר אם מגיעה בקשה של 1MB היא תפוצל לשתי בקשות אותן יבצעו פעמים (עבור 1MB בקשה, ביצועים איטיים פי 4, עבור בקשה בגודל 2MB ביצועיים איטיים פי
סיכום
כשבוחרים RAID חייבים להבין כיצד הוא עובד ולבצע החלטה שמבוססת על עלות, ביצועים, שרידות
ולהתאים את הRAID לאפליקציה הרצוייה.
אם המידע שאנו מאכסנים הוא בעיקר סרטים RAID5 אמור לספק את הסחורה במחיר הנמוך ביותר , עם רמת שרידות טובה
- shlomiassaf
- חבר ותיק
- הודעות: 1444
- הצטרף: נובמבר 2005
- מיקום: חיפה והקריות
- נתן תודות: 42 פעמים
- קיבל תודות: 70 פעמים