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

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

Мир знает Майкла по учебнику "פרגמטיקה של שפת תכנות", מה לגבי עבודה "אלגוריתמים לסינכרון ניתן להרחבה על מעבדי זיכרון משותף" קיבל את פרס דיקסטרה כאחד המפורסמים בתחום המחשוב המבוזר. אולי אתה גם מכיר אותו כמחבר של אותו אלגוריתם מייקל-סקוט.

יחד עם דאג לי, הוא פיתח את האלגוריתמים הלא-חוסמים והתורים הסינכרוניים המניעים את ספריות ג'אווה. יישום "מבני נתונים כפולים" ב-JavaSE 6 שיפרו את הביצועים פי 10 ThreadPoolExecutor.

תוכן:

  • קריירה מוקדמת, אוניברסיטת רוצ'סטר. פרויקט שרלוט, שפת Lynx;
  • ממשק קוהרנטי מדרגי IEEE, נעילת MCS;
  • הישרדות בעולם משתנה ללא הרף;
  • האם התלמידים הופכים מטומטמים יותר? מגמות גלובליות, בינאום;
  • עבודה יעילה עם תלמידים;
  • כיצד להתעדכן בהכנת קורסים וספרים חדשים;
  • קישורים בין עסקים לאקדמיה;
  • יישום מעשי של רעיונות. MCS, MS, CLH, JSR 166, עבודה עם דאג לי ועוד;
  • זיכרון עסקה;
  • ארכיטקטורות חדשות. ניצחונו של זיכרון העסקאות קרוב;
  • זיכרון לא נדיף, Optane DIMM, מכשירים מהירים במיוחד;
  • הטרנד הגדול הבא. מבני נתונים כפולים. הידרה.

הראיון נערך על ידי:

ויטלי אקסנוב — на данный момент пост-док в IST Austria и сотрудник кафедры «Компьютерные Технологии» Университета ИТМО. Занимается исследованиями в области теории и практики конкурентных структур данных. До работы в IST, он получил PhD в Университете Париж Дидро и в Университете ИТМО под руководством профессора Петра Кузнецова.

אלכסיי פדורוב - מפיק בחברת JUG Ru Group, חברה רוסית המארגנת כנסים למפתחים. אלכסיי השתתף בהכנת יותר מ-50 כנסים, והרזומה שלו כולל הכל מתפקיד מהנדס פיתוח ב-Oracle (JCK, Java Platform Group) ועד לתפקיד מפתח ב-Odnoklassniki.

ולדימיר סיטניקוב - מהנדס ב-Netcracker. עשר שנים של עבודה על הביצועים והמדרגיות של מערכת ההפעלה NetCracker, תוכנה המשמשת מפעילי טלקום לאוטומציה של תהליכי ניהול ציוד רשת ורשת. מתעניין בבעיות ביצועים של Java ו-Oracle Database. מחבר של יותר מתריסר שיפורי ביצועים במנהל ההתקן הרשמי של PostgreSQL JDBC.

קריירה מוקדמת, אוניברסיטת רוצ'סטר. פרויקט שרלוט, שפת Lynx.

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

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

Виталий: נתחיל במשהו רחוק. באוניברסיטאות רבות יש משהו כמו התמחות בתחום מסוים אחד. עבור אוניברסיטת קרנגי מלון זהו מחשוב מקביל, עבור MIT זה קריפטוגרפיה, רובוטים ו-multithreading. האם יש התמחות כזו באוניברסיטת רוצ'סטר?

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

Виталий: Вы начали заниматься Computer Science, когда область многопоточного программирования только зарождалась. По списку ваших публикаций видно, что первые работы касались достаточно широкого спектра вопросов: управление памятью в многопоточных системах, распределенные файловые системы, операционные системы. Почему такая разносторонность? Вы пытались найти своё место в исследовательском сообществе?

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

IEEE Scalable Coherent Interface, נעילת MCS.

Виталий: אתה יכול לספר לי קצת יותר על זה?

מייקל: זה סיפור מצחיק שלא נמאס לי לספר לכולם. זה קרה בכנס ASPLOS בבוסטון - זה היה בסוף שנות ה-80 או תחילת שנות ה-90. ג'ון מלור-קרומי (ג'ון מלור-קרומי), выпускник нашего факультета. Я был с ним знаком, но мы до этого не вели совместных исследований. Мэри Вернон (מרי ורנון) מוויסקונסין נשא הרצאה על מערכת מרובת מעבדים שהם פיתחו בוויסקונסין: ויסקונסין מולטיקוב. ל-Multicube הזה היה מנגנון סנכרון ברמת החומרה שנקרא Q on Sync Bit, ומאוחר יותר הוא שונה ל-Q on Lock Bit כי זה נשמע כמו גבינת קולבי, שזה היה משחק מילים. אם אתה מעוניין במנגנוני ריבוי השחלות, אתה בוודאי יודע שקולבי הפך בסופו של דבר למנוע הסנכרון של תקן IEEE Scalable Coherent Interface. זה היה מנגנון נעילה שיצר מצביעים ממטמון אחד למשנהו ברמת החומרה כך שכל בעל מנעול ידע של מי תורו. כשג'ון ואני שמענו על זה, הסתכלנו אחד על השני ואמרנו: למה לעשות את זה ברמת החומרה? האם לא ניתן להשיג את אותו הדבר באמצעות השוואה והחלפה? לקחנו את אחת המחברות ששוכבות בכיתה ושרבטנו עליה חסימת MCS, בעוד מרי המשיכה בדיווח שלה. בהמשך יישמנו אותו, התנסנו, הרעיון התברר כמוצלח ופרסמנו את המאמר. באותו זמן, עבורי, הנושא הזה נראה רק הסחת דעת מהנה, ולאחר מכן תכננתי לחזור למערכות הפעלה. אבל אז התעוררה בעיה נוספת באותו קו, ובסופו של דבר סנכרון, ריבוי פתילים ומבני נתונים הפכו למומחיות שלי. כפי שאתה יכול לראות, כל זה קרה במקרה.

Виталий: את חסימת MCS אני מכיר כבר הרבה זמן, אבל עד עכשיו לא ידעתי שזו העבודה שלך, ולא הבנתי שזה ראשי תיבות של שמות המשפחה שלך.

איך לשרוד בעולם המשתנה ללא הרף?

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

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

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

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

Виталий: האם תוכל לתת לנו רמז על מה הייתה ההרצאה הזו?

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

האם התלמידים הופכים מטומטמים יותר? מגמות גלובליות, בינלאומיות.

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

מייקל: От нас, стариков, действительно можно услышать много негатива. Подсознательно у нас есть склонность ожидать, что студенты освоят весь тот 30-летний опыт, который уже есть у нас. Если у меня есть более глубокое понимание, чем в 1985 году, то почему его нет у студентов? Наверное, потому что им 20 лет, как вам такое? Думаю, наиболее существенные изменения в последние десятилетия касаются демографического состава: у нас сейчас значительно больше международных студентов, за исключением канадцев. Раньше канадцев было много, поскольку мы находимся очень близко к границе с Канадой, и студенты оттуда могут ездить домой на выходных. Но сейчас в Канаде много хороших университетов, и канадцы предпочитают учиться у себя, в США их стало ездить значительно меньше.

אלכסיי: האם לדעתך מדובר בטרנד מקומי או עולמי?

מייקל: אני לא זוכר בדיוק מי, אבל מישהו אמר שהעולם שטוח. התחום שלנו הפך להרבה יותר בינלאומי. ועידות ACM בעבר הם התקיימו אך ורק בתוך ארצות הברית, אחר כך החליטו לקיים אותם פעם ב-4 שנים במדינות אחרות, וכעת הם מתקיימים בכל העולם. שינויים אלה השפיעו אפילו יותר IEEE, поскольку она всегда была более интернациональной организацией, чем ACM. А руководители программ (program chairs) есть из Китая, Индии, России, Германии и многих других стран, потому что везде сейчас очень много чего происходит.

אלכסיי: אבל, כנראה, יש כמה היבטים שליליים של בינלאומיות כזו?

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

אלכסיי: כלומר, מחסומים ודברים כאלה. זה ברור.

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

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

אלכסיי: ואיך למצוא את האיזון הארור בין הראשון לשני?

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

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

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

Виталий: ואם ענית לא נכון, אתה מודח מהכיתה :)

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

אלכסיי: האם השאלות האלה מובילות לפעמים לרעיונות שאתה עצמך לא חשבת עליהם קודם? האם הם בלתי צפויים? האם הם מאפשרים לך להסתכל על בעיה באור חדש?

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

אלכסיי: אז התלמידים שאלו אותך שאלות שעל בסיסן אפשר היה אז לפרסם מאמר?

מייקל: כן. 

Виталий: באיזו תדירות אתה מקיים את השיחות האלה עם תלמידים? מתי הם רוצים ללמוד יותר ממה שנסקר במהלך השיעור?

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

Виталий: איך אתה מצליח למצוא זמן לתקשר עם התלמידים? עד כמה שידוע לי, בארה"ב יש למורים הרבה עבודה - הגשת מועמדות למענקים וכדומה. 

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

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

אלכסיי: האם אתה ממשיך כרגע ללמד קורסים שאתה מלמד במשך זמן רב? משהו כמו מבוא למדעי המחשב.

מייקל: הדבר הראשון שעולה על הדעת כאן הוא קורס בשפות תכנות. 

אלכסיי: עד כמה שונה הגרסה של היום של הקורס הזה ממה שהיה לפני 10, 20, 30 שנה? אולי מה שיותר מעניין כאן זה לא הפרטים של קורס מסוים, אלא המגמות הכלליות.

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

Виталий: אז השאלה הבאה שלי תהיה קשורה לקודמתה. איך להתעדכן בתחום הזה? אני חושד שעדכון קורס כזה דורש הרבה עבודה - צריך להבין שפות חדשות, להבין את הרעיונות המרכזיים. איך אתה עושה את זה?

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

קישור בין עסקים לאקדמיה

Виталий: בואו נדבר על הקשר בין מחקר עסקי למדעי. ברשימת העבודות שלך, מצאתי מספר מאמרים על קוהרנטיות מטמון. אני מבין שהאלגוריתמים של עקביות המטמון היו לא יציבים בזמן שהם פורסמו? או לא מספיק נרחב. עד כמה היו הרעיונות שלך נפוצים בפועל?

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

אלכסיי: בהקשר זה, שאלה אישית יותר: עד כמה חשוב לך שהרעיונות שלך יושמו בפועל? או שאתה לא חושב על זה?

מייקל: Я обожаю задавать этот вопрос в интервью с другими людьми, абитуриентами или кандидатами, желающими работать на факультете. Мне не кажется, что на этот вопрос есть правильный ответ. У людей, делающих классные вещи, может быть самая разная мотивация. Меня проблемы привлекают, потому что они лично мне кажутся интересными, а не из-за их практической пользы. Но с другой стороны, когда какая-нибудь интересная штука всё-таки находит себе применение, мне это очень нравится. Так что тут всё непросто. Но в начале работы всё-таки мной движет не идея конечного использования в мире, а стройность идеи и желание её исследовать и посмотреть, что из неё выйдет. Если в итоге она даст практическую отдачу — отлично. 

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

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

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

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

אלכסיי: איך זה היה לפני שלושים שנה? היו אז בעיות?

מייקל: אז זה היה קצת שונה. באמצע עד סוף שנות ה-1980, המדע נחשב כחסר משאבי מחשוב. כדי לתקן מצב זה, הקרן הלאומית למדע (קרן המדע הלאומית) создал программу координированных экспериментальных исследований (Coordinated Experimental Research, CER). Задачей этой программы было предоставить вычислительную инфраструктуру для кафедр Computer Science, и она добилась существенных изменений. На предоставленные ею деньги мы в Рочестерском университете купили в 1984 году 128-узловый BBN Butterfly, это было за год до моего появления там. На тот момент это был самая большая в мире многопроцессорная система с общей памятью. У неё было 128 процессоров, каждый на отдельной материнской плате, она занимала четыре стойки. Каждый процессор имел мегабайт памяти, 128 мегабайт оперативной памяти в то время было невообразимым количеством. На этой машине мы впервые реализовали блокировку MCS. 

אלכסיי: אז אם אני מבין אותך נכון, אז כרגע הבעיה בחומרה נפתרה? 

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

יישום מעשי של רעיונות. MCS, MS, CLH, JSR 166, עבודה עם דאג לי ועוד.

Виталий: כבר דיברת על איך התחלת לעבוד על אלגוריתמי סנכרון. יש לך שני מאמרים מאוד מפורסמים על блокировке MCS и תור מייקל-סקוט (MS), שבמובן מסוים יושמו בג'אווה. (הערת העורך: ניתן לצפות בכל הפרסומים по ссылке). שם החסימה הזו יושמה בכמה שינויים והתברר блокировка CLH, והתור יושם כמתוכנן. אבל שנים רבות חלפו בין פרסום המאמרים שלך לבין יישומם המעשי. 

אלכסיי: זה נראה בערך 10 שנים במקרה של התור.

מייקל: לפני שהתכונות הללו הופיעו בספרייה הסטנדרטית של Java?

Виталий: כן. מה עשית כדי שזה יקרה? או שהם לא עשו כלום?

מייקל: Я могу рассказать вам, как очередь MS попала в Java 5. За несколько лет до её появления я работал с группой Марка Мойерса (Mark Moyers) из Sun Microsystems в их лаборатории под Бостоном. Он организовал семинар для своих знакомых, занимавшихся интересными проблемами в многопоточности, поскольку он хотел найти темы, которые можно было бы продать их компании. Там я впервые встретил Дага Ли (Doug Lea). Даг, я и ещё где-то 25 других людей из Sun вместе обсуждали презентацию Дага о JSR 166, שהפך מאוחר יותר ל-java.util.concurrent. לאורך הדרך אמר דאג שהוא רוצה להשתמש בתור של MS, אבל בשביל זה הוא צריך מונה למספר האלמנטים בתור לממשק. כלומר, זה היה צריך להיעשות בשיטה נפרדת, אטומית, מדויקת ומהירה. הצעתי פשוט להוסיף מספרים סידוריים לצמתים, לקחת את המספר של הצומת הראשון והאחרון ולהחסיר אחד מהשני. דאג גירד בראשו, אמר "למה לא", ובסופו של דבר עשה בדיוק את זה. דנו ביישום גישה זו בספריה, אבל דאג עשה את רוב העבודה בעצמו. כתוצאה מכך, הוא הצליח לבסס תמיכה מצוינת בריבוי ההליכים ב-Java. 

אלכסיי: אז, אם אני מבין נכון, שיטת .size() הייתה צריכה להיות חלק מהממשק הסטנדרטי בתור, והייתה צריכה להיות לה מורכבות אלגוריתמית של O(1)?

מייקל: כן, ובנוסף לכך, נדרש מונה נפרד.

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

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

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

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

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

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

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

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

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

זיכרון עסקה

Виталий: Может, немного поговорим о транзакционной памяти?

מייקל: אני חושב שכדאי להגיד לפחות קצת כי השקעתי בזה הרבה מאמץ. זה נושא שיש לי עליו יותר פרסומים מכל נושא אחר. אבל יחד עם זאת, באופן מוזר, תמיד הייתי מאוד סקפטי לגבי זיכרון עסקה. לדעתי, מאמר מאת הרלי ומוס (M. Herlihy, J. E. B. Moss) פורסם לפני זמנו. בתחילת שנות ה-1990, הם הציעו שזיכרון טרנזקציות יכול לעזור למתכנתים מוכשרים לעבוד על מבני נתונים מרובי הליכי, כך שמבנים אלה יוכלו לשמש כספריות על ידי מתכנתים רגילים. כלומר, זה יעזור לדאג לי לעשות את ה-JSR 166 שלו. אבל זיכרון טרנזקציות לא נועד להקל על תכנות מרובה-הליכים. אבל זה בדיוק איך זה התחיל להיתפס בתחילת שנות ה-2000, כשזה התפשט. הוא פורסם כדרך לפתור את בעיית התכנות המקבילות. הגישה הזו תמיד נראתה לי חסרת סיכוי. זיכרון עסקה יכול רק להקל על כתיבת מבני נתונים מקבילים. זה, כך נראה לי, מה שהיא השיגה. 

על הקושי בכתיבת קוד מרובה חוטים

אלכסיי: מעניין מאוד. נראה שיש מחסום מסוים בין מתכנתים רגילים לבין אלה שיכולים לכתוב קוד מרובה הליכי. בשנה שעברה, דיברתי מספר פעמים עם אנשים שהטמיעו מסגרת אלגוריתמית כלשהי. למשל, עם מרטין תומסון, כמו גם עם מתכנתים שעובדים על ספריות מרובות הליכים. (הערת העורך: מרטין תומפסון הוא מפתח מפורסם מאוד, הוא כתב מפריע и Aeron. ויש לו גם להגיש תלונה בכנס Joker 2015 שלנו, הקלטת וידאו זמין ביוטיוב. הוא אותו דבר נפתח הכנס הזה הקלטת מפתח тоже достуна). По их словам, главная трудность в том, чтобы алгоритмы были одновременно быстрыми и простыми в использовании. То есть они пытаются как раз преодолеть этот барьер и привлечь как можно больше людей в эту область. Что вы об этом думаете?

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

אלכסיי: Потому что когда они пытаются избежать сложности, алгоритм становится менее универсальным.

מייקל: Здесь главное — правильно спроектированные абстракции. Мне кажется, что это вообще главное для компьютерных систем как области. Этот термин любит употреблять Батлер Лэмпсон (Butler Lampson), и нас он называет «торговцами абстракциями». Простых технологий сегодня не существует. В процессорах, которые мы используем, по 10 миллиардов транзисторов — о простоте тут речи быть не может. При этом ISA значительно проще процессора, поскольку мы очень долго работали над тем, чтобы обеспечить для неё высокую производительность и относительно простой интерфейс. Но и с ней не всё гладко. Та же проблема с ускорителями, которые сейчас появляются на рынке. Возникают вопросы — как сделать правильный интерфейс для GPU, механизм шифрования, сжатие, механизм перекодирования, механизм линейной алгебры или даже более гибкую FPGA. Как сделать интерфейс, который обеспечит простоту использования инструмента и скроет сложность? Не избавится от неё, а именно скроет от простого программиста. 

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

מייקל: זו שאלה טובה - האם מישהו מאיתנו באמת מבין את מודל הזיכרון?

Виталий: במיוחד ב-C++.

מייקל: דבר עם הנס בוהם מתישהו. הוא אחד האנשים החכמים ביותר שאני מכיר, מומחה מוביל במודלים של זיכרון. הוא יגיד לך מיד שיש הרבה שהוא לא מבין. אבל אם נחזור לסוגיית ההפשטות, אז לדעתי הרעיון החשוב ביותר בתחום דגמי הזיכרון ב-30 השנים האחרונות התבטא. בעבודת הגמר של שריתה אדווה. (הערת העורך: רשימה מלאה של פרסומים זמינה по ссылке).

אלכסיי: השאלה שלי היא: האם המחסום הזה נובע מעצם המושג? 

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

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

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

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

ולדימיר: האם אתה מחפש פתרונות ארכיטקטוניים חדשים שיכולים להיות שימושיים עבור אלגוריתמים? 

מייקל: כמובן, יש הרבה דברים שהייתי רוצה שייושמו. 

ולדימיר: איזה סוג, למשל?

מייקל: В первую очередь — несколько простых расширений для нашей транзакционной памяти аппаратного уровня в процессорах Intel и IBM. В особенности мне хотелось бы, чтобы не-транзакционные только что произошедшие load и store были сразу же доступны внутри транзакций. Они сразу же приводят к циклам в последовательности happens-before, так что с ними могут быть сложности. Но если поддерживать уровни абстракции, существует множество очень интересных вещей, которые можно сделать за пределами транзакции, пока она происходит. Я не знаю, насколько трудно это было бы реализовать, но это было бы очень полезно. 

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

Виталий: כדי לסיים לדבר על זיכרון עסקה, יש לי עוד שאלה אחת בנושא זה. האם זיכרון עסקאות יחליף בסופו של דבר מבני נתונים סטנדרטיים עם ריבוי הליכים?

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

זיכרון לא נדיף, Optane DIMM, מכשירים מהירים במיוחד.

Виталий: הדבר האחרון שהייתי רוצה לדבר עליו הוא נושא המחקר הנוכחי שלך: זיכרון לא נדיף. מה צפוי לנו בתחום הזה בעתיד הקרוב? אולי אתה יודע על יישומים יעילים שכבר קיימים? 

מייקל: אני לא מומחה חומרה, אני יודע רק מה שקראתי בחדשות ומה עמיתיי אומרים לי. כולם כבר שמעו שאינטל מוכרת Optane DIMM, שיש להם בערך פי 3 זמן השהיית קריאה ופי 10 מהשהיית הכתיבה מאשר זיכרון RAM דינמי. בקרוב הם יהיו זמינים בגרסאות בנפח גדול מאוד. זה מצחיק לחשוב שיכול להיות לך מחשב נייד עם כמה טרה-בייט של זיכרון RAM שניתן להתייחס אליו בתים. סביר להניח שבעוד 10 שנים נחליט להשתמש בטכנולוגיה החדשה הזו, מכיוון שאנו משתמשים ב-DRAM - פשוט הגבר את הווליום. אבל הודות לעצמאות אנרגטית נפתחות בפנינו הזדמנויות חדשות לגמרי. אנו יכולים לשנות באופן מהותי את מחסנית האחסון כך שלא תהיה הפרדה בין זיכרון עבודה שניתן להתייחסות לבתים וזיכרון מתמשך מובנה בלוק. לפיכך, לא נצטרך להעביר בסידרה את כל מה שצריך להעביר מתוכנית אחת לאחרת לקבצים בעלי מבנה בלוק. מכאן נוכל להפיק עקרונות חשובים רבים המשפיעים על מערכות הפעלה, סביבות זמן ריצה ומאגרי נתונים מבוזרים. תחום זה מאוד מעניין לעבוד בו. באופן אישי, קשה לי לחזות למה כל זה יוביל, אבל הבעיות כאן משעשעות ביותר. ייתכנו כאן שינויים מהפכניים, והם נובעים באופן טבעי מאוד מהעבודה על ריבוי פתילים, שכן שחזור כשל הוא תהליך של "ריבוי פתילים" לצד הפעולה הרגילה של המערכת. 

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

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

מייקל: צודק לחלוטין.

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

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

ולדימיר: Есть ещё одна проблема. Новые, значительно большие объемы RAM будет невозможно разместить в CPU. Поэтому из-за физических ограничений эта RAM должна быть изолированной. 

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

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

מייקל: כן. אין מה לעשות בקשר למהירות האור. 

ולדימיר: לצערי. 

הטרנד הגדול הבא. מבני נתונים כפולים. הידרה.

Виталий: למיטב הבנתי, אתה קולט טרנדים חדשים מהר מאוד. היית מהראשונים שעבדו בזיכרון עסקה, ואחד הראשונים שעבדו בזיכרון לא נדיף. מה לדעתך יהיה הטרנד הגדול הבא? או אולי זה סוד?

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

אלכסיי: Последний вопрос в этом интервью будет про ваше выступление на Hydra и занятие в школе. Если я правильно понял, то доклад на школе будет про алгоритмы без блокировки, а на конференции про двойные структуры данных. Не могли бы вы сказать пару слов об этих докладах?

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

אלכסיי: מה הציפיות שלך ממבנה הנתונים הזה? האם זה ישפר את הביצועים בכל המקרים הנפוצים, או שהוא מתאים יותר למצבים מסוימים? 

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

Виталий: הרשו לי להבהיר: האם תדברו על אותו דבר גם בבית הספר וגם בכנס?

מייקל: בבית הספר אני אדבר в целом о многопоточных структурах данных, с изложением основных принципов в начале занятия. Я подразумеваю, что аудитория знает, что такое потоки, и знакома с блокировками. Ориентируясь на эти базовые знания, я буду рассказывать о структурах данных без блокировок. Я дам обзор наиболее важных проблем в этой области, затрону темы вроде управления памятью. Не думаю, что там будет что-либо сложнее очереди MS.

אלכסיי: Планируете ли вы рассказать о двойных структурах данных в конце вашего занятия в школе?

מייקל: Я их упомяну, но много времени уделять им не буду. Им будет посвящен доклад на Hydra. Там будет рассказано о проекте, который в итоге вошёл в Java, а также о работе с Джо Израелевичем над созданием двойного варианта очереди LCRQ, и о создании почти универсальной конструкции для двойных структур данных.

אלכסיי: אז אפשר להמליץ ​​על ההרצאה בבית הספר למתחילים, ואת ההרצאה על מבני נתונים כפולים על הידרה - לאנשים שכבר יש להם קצת ניסיון?

מייקל: Поправьте меня, если я не прав, но аудитория на Hydra будет довольно разноплановой, в том числе там будет много экспертов по Java, и вообще людей, которые специально многопоточным программированием не занимаются. 

Виталий: כן זה נכון.

אלכסיי: По крайней мере, мы на это надеемся.

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

Виталий: האם תיתן דו"ח באותו אופן שאתה נותן הרצאות? כלומר לדבר עם הקהל ולהתאים את עצמו למצב?

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

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

Виталий: תודה. 

מייקל: אשמח לפגוש אותך בסנט פטרבורג. 

אלכסיי: גם לנו, יש לנו עיר יפה. היית פה פעם?

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

אלכסיי: אגב, תהיה לנו תוכנית טיולים לדוברים. תודה רבה על הראיון, ויום נעים!

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

מקור: www.habr.com

הוספת תגובה