עבור לתוכן

תפקיד ה Cache

Featured Replies

פורסם

ה Cache קיים גם ב-HD כמובן והוא הולך וגדל עם השנים כאשר לאחרונה הוציאה חברת מקסטור HD עם 16 MB של Cache

(הרעיון והביצוע דומים מאוד ל -Cache במעבד )

  • תגובות 58
  • צפיות 5.3k
  • נוצר
  • תגובה אחרונה
פורסם

בקשר לבחור מעלי ובקשר לנושא - סנדרה מציעה בדיקה שבודקת את המהירות העברת נתונים מ/לקאש. הבדיקה מעבירה קבצים של של 2, 4 קיי וככה עד רבע ג'יגה. יפה לראות איך הL1 הכי מהיר, אחריו, L2, L3, L4.... ובסוף כשמידע כבר לא נכנס לקאש הוא צריך להגיע לזיכרון ואז רואים נפילה ענקית במהירות.

x0d טוען שלא ניתן לכתוב אל הקאש במכוון דרך תוכנה, אז כיצד הסנדרה עושה זאת?

פורסם

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

פורסם

בקשר לבחור מעלי ובקשר לנושא - סנדרה מציעה בדיקה שבודקת את המהירות העברת נתונים מ/לקאש. הבדיקה מעבירה קבצים של של 2, 4 קיי וככה עד רבע ג'יגה. יפה לראות איך הL1 הכי מהיר, אחריו, L2, L3, L4.... ובסוף כשמידע כבר לא נכנס לקאש הוא צריך להגיע לזיכרון ואז רואים נפילה ענקית במהירות.

ובסוף כשנגמר הזיכרון, (לאלו מכם עם ה 256MBRAM כמוני) המידע עובר להרד דיסק ורואים נפילה רצינית עוד יותר.

פורסם

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

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

אני מכיר שלוש דרכים לשליטה בקאש:

1. באמצעות דגלים בTLB - מערכת הזכרון הוירטואלי - שליטה בהאם page מסויים בזכרון יהיה cached או לא. כמובן שכמעט כולם כן cached.

2. באמצעות MTRR - memory type range register. אפשר לומר בפירוש למעבד שאיזור זכרון פיזי כלשהו יהיה cached, ואיזה סוג של caching.

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

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

זה משהו איזוטרי שבפירוש נועד בשביל כרטיסי PCI (בעיקר כרטיסי מסך), וגם יש רק איזה 5-6 רגיסטרים כאלו כמדומני.

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

3. הוראות fence, flush למעבד. אני לא חזק בinstruction set של אינטל - אני לרוב רועה בשדות אחרים - אבל יש אפשרות לוודא שהcache יכתב לזכרון (flush),

בכל רגע נתון.

שתי הפעולות הראשונות מצריכות בפירוש לעבוד בkernel mode, לגבי השלישית אני לא בטוח איזה instructions אפשר לבצע מuser mode ואיזה לא.

במעבדים שאני עובד עליהם, יש אפשרות לשלוט בcache, כלומר לנעול way בקאש, כך שישקף תמיד כתובת מסויימת. אני לא שמעתי על אפשרות כזו בx86, אך יתכן והיא קיימת.

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

אז בודקים כמה סייקלים עברו, וזהו.

בשביל צורת עבודה כזו, הסנדרה צריכה לרוץ בkernel mode, כלומר כdriver. אני אף פעם לא הרצתי את זה, ואני לא באמת יודע מה היא עושה. סתם ניחוש.

בקיצור, יש שליטה כלשהי בקאש, אבל היא לרוב מסתכמת ב"את-מי-נכניס-לקאש-את-מי-נשאיר-בחוץ".

פורסם

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

אני מכיר שלוש דרכים לשליטה בקאש:

1. באמצעות דגלים בTLB - מערכת הזכרון הוירטואלי - שליטה בהאם page מסויים בזכרון יהיה cached או לא. כמובן שכמעט כולם כן cached.

2. באמצעות MTRR - memory type range register. אפשר לומר בפירוש למעבד שאיזור זכרון פיזי כלשהו יהיה cached, ואיזה סוג של caching.

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

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

זה משהו איזוטרי שבפירוש נועד בשביל כרטיסי PCI (בעיקר כרטיסי מסך), וגם יש רק איזה 5-6 רגיסטרים כאלו כמדומני.

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

3. הוראות fence, flush למעבד. אני לא חזק בinstruction set של אינטל - אני לרוב רועה בשדות אחרים - אבל יש אפשרות לוודא שהcache יכתב לזכרון (flush),

בכל רגע נתון.

שתי הפעולות הראשונות מצריכות בפירוש לעבוד בkernel mode, לגבי השלישית אני לא בטוח איזה instructions אפשר לבצע מuser mode ואיזה לא.

במעבדים שאני עובד עליהם, יש אפשרות לשלוט בcache, כלומר לנעול way בקאש, כך שישקף תמיד כתובת מסויימת. אני לא שמעתי על אפשרות כזו בx86, אך יתכן והיא קיימת.

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

אז בודקים כמה סייקלים עברו, וזהו.

בשביל צורת עבודה כזו, הסנדרה צריכה לרוץ בkernel mode, כלומר כdriver. אני אף פעם לא הרצתי את זה, ואני לא באמת יודע מה היא עושה. סתם ניחוש.

בקיצור, יש שליטה כלשהי בקאש, אבל היא לרוב מסתכמת ב"את-מי-נכניס-לקאש-את-מי-נשאיר-בחוץ".

ידע שלא נגמר...הא?

על אילו מעבדים אתה עובד?

פורסם

אתה יכול לשפוך קצת אור על המעבדים האלה? לא שמעתי אף פעם על דבר כזה..

בשביל מה אתה משתמש בהם? אפשר בכלל להשיג אותם בארץ?

פורסם

אלה לא מעבדים לPC. זה DSP (בערך; זה יותר כמו CPU עם יכולות DSP), לאפליקציות embedded.

להשיג בארץ? דרך אנאלוג ישראל, כמובן :)

מה אני עושה איתם? אני אפרסם שזה יהיה מסחרי, אם זה יעניין מישהו.. ;D

פורסם

צריך לעשות עוד דיונים כאלה, שיהיו יזומים ע"י האדמינים. יותר מעניין מ"קניתי זיכרון DDR400 אבל הוא עובד רק ב200 מגה-הרץ!!!1" ויותר תורם לידע, לא?

פורסם

בהחלט

  • 2 חודשים מאוחר יותר...
פורסם

בלי לגרוע מדברי XOD המעניינים, ניתן כמובן לקרוא על נושא זה בעמוד

http://en.wikipedia.org/wiki/CPU_cache

נכון שמדובר באנגלית אבל יש שמה פירוט נוסף על נושא זה (ובכלל זה שיטות CACHE ועוד)

וגם על הנושא בכלליות ולא במעבד (הוא קיים בעוד רכיבים):

http://en.wikipedia.org/wiki/Cache

פורסם

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

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

אם משתמשים בבלוק של 4K , אין סיבה שיהיה צורך להכניס אותו במכוון לקאש, חסר למעבד שלא יעשה את זה בעצמו.

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

פורסם

x0d אתה תותח!!!

יש לי שאלה, למה לא לעשות את הקאש חיצוני כך שזה יקטין את הגודל של המעבד ויוזיל עלויות?

אני מאמין שהתשובה נמצאת כאן

ורק בשביל שתבין כמה הקאש חשוב - כל ההבדל בין סלרונים לאחיהם עתירי הביצועים (פנטיום 2, 3, וכו'), היה תמיד בקאש! (אני לא יודע איך זה בדורות האחרונים ממש, אבל כנראה שזה ממשיך באותה צורה). לסלרונים הראשונים לא היה קאש כלל, מה שגרר ביצועים יותר מפאתטיים. אחר כך אינטל כבר הוסיפו קאש, קטן אך מהיר; 128K, אבל ON-DIE שפועל במהירות המעבד. באותם ימים, לפנטיום 2 היה 512K, אבל OFF-DIE - כלומר, על שבבים נפרדים, מחוץ למעבד - שעבד בחצי ממהירות המעבד.

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

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

את הפסקה הראשונה הבנתי, את השניה לא כל כך

פורסם

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

כשמדובר בבלוקים של 4K, ההנחה סבירה. כשמדובר במשהו קצת יותר משמעותי, אה, זה נהיה בעייתי.

oMer_Hasarut,

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

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

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

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים