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

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

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

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

סימולטור פלטפורמה מלאה, או "לבד בשטח הוא לא לוחם"

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

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

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

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

לרוב, סימולטורים של פלטפורמה מלאה מיושמים ברמת הוראות המעבד (ISA, ראה להלן). מאמר קודם). זה מאפשר לך ליצור את הסימולטור עצמו במהירות יחסית ובזול. רמת ה-ISA טובה גם כי היא נשארת פחות או יותר קבועה, בניגוד למשל לרמת ה-API/ABI שמשתנה לעתים קרובות יותר. בנוסף, הטמעה ברמת ההוראה מאפשרת לך להפעיל תוכנה בינארית כביכול ללא שינוי, כלומר, להריץ קוד שכבר הידור ללא כל שינויים, בדיוק כפי שהוא משמש בחומרה אמיתית. במילים אחרות, אתה יכול ליצור עותק ("dump") של הכונן הקשיח שלך, לציין אותו כתמונה לדגם בסימולטור של פלטפורמה מלאה, והרי! - מערכת ההפעלה ותוכניות אחרות נטענות בסימולטור ללא פעולות נוספות.

ביצועי סימולטור

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

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

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

הסימולטורים הנפוצים ביותר של פלטפורמה מלאה בשוק, כגון QEMU, VirtualBox או VmWare Workstation, הם בעלי ביצועים טובים. אולי אפילו לא מורגש למשתמש שהעבודה מתרחשת בסימולטור. זה קורה הודות ליכולות הווירטואליזציה המיוחדות המיושמות במעבדים, אלגוריתמי תרגום בינאריים ועוד דברים מעניינים. זה הכל נושא למאמר נפרד, אבל בקיצור, וירטואליזציה היא תכונת חומרה של מעבדים מודרניים המאפשרת לסימולטורים לא לדמות הוראות, אלא לשלוח אותן לביצוע ישירות למעבד אמיתי, אם, כמובן, הארכיטקטורות של הסימולטור והמעבד דומים. תרגום בינארי הוא תרגום של קוד מכונה אורח לקוד מארח וביצוע לאחר מכן על מעבד אמיתי. כתוצאה מכך, ההדמיה איטית רק במעט, פי 5-10, ולעתים קרובות אפילו פועלת באותה מהירות כמו המערכת האמיתית. למרות שזה מושפע מהרבה גורמים. לדוגמה, אם נרצה לדמות מערכת עם כמה עשרות מעבדים, אז המהירות תרד מיד בכמה עשרות פעמים אלו. מצד שני, סימולטורים כמו Simics בגרסאות העדכניות ביותר תומכים בחומרה מארח ריבוי מעבדים ומקבילים למעשה את הליבות המדומות על הליבות של מעבד אמיתי.

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

הגרף שלהלן מציג תלות משוערת של מהירות הסימולציה בפרטי הדגם.

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

הדמיית פעימה אחר פעימה

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

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

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

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

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

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

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

סימולציה מבוססת עקבות

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

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

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

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

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

מקור: www.habr.com

קנה אירוח אמין לאתרים עם הגנת DDoS, שרתי VPS VDS 🔥 קנה אחסון אתרים אמין עם הגנת DDoS, שרתי VPS VDS | ProHoster