"Эмпірычныя вынікі толькі для публікацыі, рэальныя матывы работ - эстэтычныя". Вялікае інтэрв'ю з Майклам Скотам

"Эмпірычныя вынікі толькі для публікацыі, рэальныя матывы работ - эстэтычныя". Вялікае інтэрв'ю з Майклам Скотам Майкл Скот - ужо 34 гады як прафесар Computer Science у Рочэстэрскім універсітэце, а ў родным універсітэце Wisconsin-Madison быў дэканам на працягу пяці гадоў. Ён займаецца даследаваннямі ў галіне паралельнага і размеркаванага праграмавання і дызайну моў і навучае гэтаму студэнтаў.

Свет ведае Майкла па падручніку "Programming Language Pragmatics", а праца "Algorithms for scalable synchronization on shared-memory multiprocessors" атрымала прэмію Дэйкстры як адна з найбольш вядомых у галіне размеркаваных вылічэнняў. Таксама вы можаце ведаць яго як аўтара таго самага алгарытму Майкла-Скота.

Разам з Дагам Лі распрацаваў тыя неблакіруючыя алгарытмы і сінхронныя чэргі, на якіх працуюць бібліятэкі Java. Укараненне "dual data structures" у JavaSE 6 дазволіла ў 10 разоў палепшыць прадукцыйнасць ThreadPoolExecutor.

Змест:

  • Пачатак кар'еры, Рочэстэрскі універсітэт. Праект Charlotte, мова Lynx;
  • IEEE Scalable Coherent Interface, блакіроўка MCS;
  • Выжыванне ў свеце, які пастаянна змяняецца;
  • Ці становяцца студэнты дурнейшыя? Глабальныя трэнды, інтэрнацыяналізацыя;
  • Эфектыўная праца са студэнтамі;
  • Як не адстаць пры падрыхтоўцы новых курсаў і кніг;
  • Сувязь паміж бізнесам і акадэміяй;
  • Практычная рэалізацыя ідэй. MCS, MS, CLH, JSR 166, праца з Дагам Лі і многае іншае;
  • Транзакцыйная памяць;
  • Новыя архітэктуры. Блізкая перамога транзакцыйнай памяці;
  • Энерганезалежная памяць, Optane DIMM, звышхуткія прылады;
  • Наступны вялікі трэнд. Dual data structures. Hydra.

Інтэрв'ю вядуць:

Віталь Аксёнаў - На дадзены момант пост-док у IST Austria і супрацоўнік кафедры «Кампутарныя Тэхналогіі» Універсітэта ІЦМА. Займаецца даследаваннямі ў галіне тэорыі і практыкі канкурэнтных структур даных. Да працы ў IST, ён атрымаў PhD ва Універсітэце Парыж Дзідро і ва Універсітэце ІЦМА пад кіраўніцтвам прафесара Пятра Кузняцова.

Аляксей Фёдараў - прадзюсар у JUG Ru Group, расійскай кампаніі, якая займаецца арганізацыяй канферэнцый для распрацоўшчыкаў. Аляксей удзельнічаў у падрыхтоўцы больш за 50 канферэнцый, а ў яго рэзюмэ ёсць усё што заўгодна, пачынальна ад пазіцыі інжынера-распрацоўніка ў Oracle (JCK, Java Platform Group), і сканчаючы пазіцыяй дзеўрэла ў кампаніі Аднакласнікі.

Уладзімір Сітнікаў - Інжынер у кампаніі Netcracker. Дзесяць гадоў працуе над прадукцыйнасцю і маштабаванасцю NetCracker OS – ПЗ, выкарыстоўванага аператарамі сувязі для аўтаматызацыі працэсаў кіравання сеткай і сеткавым абсталяваннем. Захапляецца пытаннямі прадукцыйнасці Java і Oracle Database. Аўтар больш за дзесятак паляпшэнняў прадукцыйнасці ў афіцыйным PostgreSQL JDBC-драйверы.

Пачатак кар'еры, Рочэстэрскі універсітэт. Праект Charlotte, мова Lynx.

Аляксей: Для пачатку я хацеў расказаць вам, што мы ў Расіі ўсё вельмі любім Сomputer Science, Data Science і алгарытмы. Прама да непрыстойнасці. Мы ўсё чыталі кнігу Cormen, Leiserson і Rivest. Таму маючая адбыцца канферэнцыя, школа і само гэтае інтэрв'ю павінны карыстацца вялікай папулярнасцю. Нам паступіла мноства пытанняў для гэтага інтэрв'ю ад студэнтаў, праграмістаў і чальцоў супольнасці, таму мы вельмі ўдзячныя вам за гэтую магчымасць. Ці карыстаецца Computer Science такім жа каханнем у ЗША?

Майкл: Наша вобласць настолькі рознабаковая, у ёй так шмат напрамкаў, і яна ўплывае на грамадства такімі рознымі спосабамі, што мне цяжка адказаць вам адназначна. Але факт у тым, што дзякуючы ёй за апошнія 30 гадоў адбыліся каласальныя змены ў бізнэсе, прамысловасці, мастацтве і грамадстве ў цэлым.

Віталь: Давайце пачнем з чаго-небудзь аддаленага. У многіх універсітэтах назіраецца нешта накшталт спецыялізацыі на адным пэўным напрамку. Для універсітэта Карнегі-Меллона гэта паралельныя вылічэнні, для MIT – крыптаграфія, робаты і шматструменнасць. А ці ёсць падобнага роду спецыялізацыя ў Рочэстэрскім універсітэце?

Майкл: Калі шчыра, я б сказаў, што CMU і MIT спецыялізуюцца па ўсіх напрамках. На нашай кафедры заўсёды больш за ўсё ўвагі надавалася штучнаму інтэлекту. Палова людзей, якія ў нас працуюць, займаюцца ІІ або чалавека-кампутарным узаемадзеяннем — гэтая доля большая, чым на іншых кафедрах, і так было заўсёды. Але калі я вучыўся ва ўніверсітэце, у мяне не было курсаў па ІІ, і я ніколі ў гэтай галіне не працаваў. Так што мая катэдра спецыялізуецца на праблеме, да якой я адносін не маю. Суцяшэннем служыць тое, што другая па важнасці для нашай кафедры праблема - гэта паралельнае і шматструменнае праграмаванне, гэта значыць мая спецыялізацыя.

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

Майкл: Будучы студэнтам, я ўдзельнічаў у праекце Charlotte ва ўніверсітэце Вісконсіна, у рамках якога распрацоўвалася адна з першых размеркаваных аперацыйных сістэм. Там я працаваў разам з Рафаэлем Фінкелем (Raphael Finkel) і Марвінам Саламонам (Marvin Solomon). Мая дысертацыя была прысвечана распрацоўцы мовы для сістэмнага софту для размеркаваных сістэм - цяпер пра яе ўсё ўжо забыліся, і дзякуй богу. Я стварыў мову праграмавання Lynx, які павінен быў спрасціць стварэнне сервераў для размеркаванай аперацыйнай сістэмы са слабым злучаннем. Паколькі на той момант я ў асноўным займаўся аперацыйнымі сістэмамі, то меркаваў, што і мая кар'ера будзе ў асноўным звязана з імі. Але ў Рочэстэр універсітэт быў вельмі маленькі, і з-за гэтага розныя групы там вельмі цесна размаўлялі адзін з адным. Там не было дзясятка іншых адмыслоўцаў па аперацыйных сістэмах, з якімі я мог бы мець зносіны, так што ўсе кантакты былі з людзьмі, якія працавалі ў зусім іншых абласцях. Мне гэта вельмі падабалася, быць універсалам - вялікая перавага для мяне. Калі ж казаць канкрэтна аб шматструменных структурах дадзеных і алгарытмах сінхранізацыі, то імі я пачаў займацца зусім выпадкова.

IEEE Scalable Coherent Interface, блакіроўка MCS.

Віталь: Можна крыху падрабязней пра гэта?

Майкл: Гэта пацешная гісторыя, якую я не стамляюся ўсім расказваць. Яна адбылася на канферэнцыі ASPLOS у Бостане - гэта было ў канцы 80-х або ў пачатку 90-х. На канферэнцыі прысутнічаў Джон Мэлор-Крамі (John Mellor-Crummey), выпускнік нашага факультэта. Я быў з ім знаёмы, але мы да гэтага не вялі сумесных даследаванняў. Мэры Вернан (Mary Vernon) з Вісконсіна выступала з дакладам аб шматпрацэсарнай сістэме, якую яны распрацоўвалі ў Вісконсіне: Wisconsin Multicube. У гэтым Multicube на ўзроўні жалеза быў механізм сінхранізацыі, які зваўся Q on Sync Bit, а пазней ён быў пераназваны ў Q on Lock Bit, таму што так яго можна было прамаўляць як назоў сыра Colby, гэта значыць гэта быў такі каламбур. Калі вы цікавіцеся механізмамі шматструменнасці, вы, мусіць, ведаеце, што Colby у скончаным выніку стаў механізмам сінхранізацыі стандарту Scalable Coherent Interface ад IEEE. Гэта быў механізм блакавання, які ствараў паказальнікі з аднаго кэша на іншы на ўзроўні жалеза, каб кожны трымальнік блакавання ведаў, чыя за ім чарга. Калі Джон і я пра гэта пачулі, мы пераглянуліся і сказалі: а навошта гэта рабіць на ўзроўні жалеза? Хіба нельга таго ж самага дабіцца пры дапамозе compare-and-swap? Мы ўзялі адзін з блакнотаў, якія ляжалі ў аўдыторыі, і накідалі на ім блакіроўку MCS, Пакуль Мэры працягвала свой даклад. У наступстве мы яе рэалізавалі, паэксперыментавалі, ідэя аказалася ўдалай, і мы апублікавалі артыкул. Тады для мяне гэтая тэма здавалася толькі пацешным адцягненнем, пасля якога я планаваў вярнуцца да аперацыйных сістэм. Але затым узнікла іншая праблема ў тым жа кірунку, і ў канчатковым выніку сінхранізацыя, шматструменнасць і структуры дадзеных сталі маёй асноўнай спецыяльнасцю. Як бачыце, адбылося гэта ўсё выпадкова.

Віталь: Я даўно знаёмы з блакіроўкай MCS, але да бягучага моманту я не ведаў, што гэта Вашая праца, і не разумеў, што гэта акронім ад Вашых прозвішчаў.

Як выжываць у пастаянна свеце, які змяняецца?

Аляксей: У мяне ёсць пытанне па звязанай тэме. 30 ці 40 гадоў таму было больш свабоды ў розных спецыяльнасцях. Хочаш пачаць кар'еру ў шматструменнасці або размеркаваных сістэмах - калі ласка, хочаш заняцца аперацыйнымі сістэмамі - ніякіх праблем. У кожнай вобласці было вельмі шмат адкрытых пытанняў і мала экспертаў. Цяпер з'явіліся вузкія спецыялізацыі: няма проста экспертаў па аперацыйных сістэмах у цэлым, ёсць спецыялісты па асобных сістэмах. Тое ж самае са шматструменнасцю і размеркаванымі сістэмамі. Але праблема ў тым, што нашыя жыцці не бясконцыя, кожны можа прысвяціць даследаванням толькі некалькі дзесяцігоддзяў. Як выжыць у гэтым новым свеце?

Майкл: Мы ў гэтым плане не асаблівыя, усё тое ж самае адбывалася некалі і ў іншых абласцях. Мне пашанцавала, што я пачаў працаваць у Computer Science, калі гэтая сфера была ў "падлеткавым" узросце. Некаторыя асновы ўжо былі закладзены, але ўсё было яшчэ вельмі няспелае. Такая магчымасць з'яўляецца нячаста. Электратэхніка існуе ўжо вельмі даўно, фізіка - яшчэ даўжэй, матэматыка - ці ледзь не з пачатку часоў. Але гэта не значыць, што ў матэматыцы ніхто больш не робіць цікавых адкрыццяў. Адкрытых праблем па-ранейшаму шмат, але ў той жа час і вучыцца трэба больш. Вы дакладна заўважылі, што зараз значна больш спецыялізацый, чым было раней, але гэта толькі значыць, што мы апынуліся ў той жа сітуацыі, што і большасць астатніх абласцей чалавечай дзейнасці.

Аляксей: Мяне тут цікавіць больш практычны аспект пытання. У мяне матэматычная адукацыя, і падчас вучобы я часта наведваў канферэнцыі і працаваў над рознымі навуковымі тэмамі. Я выявіў, што мае даклады ніхто ў аўдыторыі не разумеў, і сапраўды гэтак жа, даклады іншых людзей былі зразумелыя толькі для іх саміх. У высокаўзроўневых тэмах гэта не так, але як толькі пачынаеш у штосьці паглыбляцца, аўдыторыя за табой перастае паспяваць. Як вы з гэтым змагаецеся?

Майкл: Не заўсёды паспяхова. Нядаўна я падрыхтаваў даклад, у якім сышоў занадта глыбока ў тэхнічныя падрабязнасці. Па ходзе дакладу стала відаць, што большая частка аўдыторыі мяне не разумее, так што мне прыйшлося прыстасоўвацца да сітуацыі на хаду. Слайды было ўжо не змяніць, так што атрымалася не занадта ўдала - таму, наогул кажучы, я стараюся слайды не выкарыстоўваць. У цэлым, мая парада такая — улічвайце сваю аўдыторыю. Трэба ведаць, да каго вы звяртаецеся, які ў іх узровень ведаў і што ім трэба пачуць, каб ацаніць вашу працу.

Віталь: А вы не маглі б намякнуць, пра што была гэтая лекцыя?

Майкл: Калі шчыра, я хацеў бы на гэтую тэму не распаўсюджвацца, каб пакінуць ананімнымі тых людзей, пра якіх ідзе гаворка. Сутнасць у тым, што мы часта апускаемся занадта глыбока ў тонкасці той праблемы, над якой працуем, таму нам становіцца складана растлумачыць у пачатку даклада, чаму гэтая праблема цікавая і важная і як яна звязана з пытаннямі, якія слухачы ўжо ведаюць. Па маіх назіраннях, студэнтам гэты навык даецца цяжэй за ўсё. І гэта ж было слабым бокам майго нядаўняга даклада. Правільна пабудаваны даклад павінен з самага пачатку знайсці кантакт з аўдыторыяй, растлумачыць ёй, у чым менавіта заключаецца праблема і як яна суадносіцца з ужо вядомымі ёй тэмамі. Наколькі тэхнічнай будзе гэтая ўступная частка, залежыць ад аўдыторыі. Калі яна зусім разнамасная, то даклад можа быць шматступенным. Уступ павінен быць даступны ўсім, а да канца частка, магчыма, ужо не будзе за вамі паспяваць, але людзі, адносна знаёмыя з вашай вобласцю, змогуць разабрацца ва ўсім.

Ці становяцца студэнты дурнейшыя? Глабальныя трэнды, інтэрнацыяналізацыя.

Аляксей: Вы назіраеце за студэнтамі ўжо некалькі дзясяткаў гадоў. Ці становяцца студэнты дурнейшымі ці разумнейшымі ад дзесяцігоддзя да дзесяцігоддзя ці ад года да года? У Расіі прафесары пастаянна скардзяцца, што студэнты з кожным годам дурнеюць, і незразумела, што з гэтым рабіць.

Майкл: Ад нас, старых, сапраўды можна пачуць шмат негатыву. Падсвядома ў нас ёсць схільнасць чакаць, што студэнты асвояць увесь той 30-гадовы досвед, які ўжо ёсць у нас. Калі ў мяне ёсць больш глыбокае разуменне, чым у 1985 годзе, дык чаму яго няма ў студэнтаў? Мусіць, таму што ім 20 гадоў, як вам такое? Думаю, найбольш істотныя змены ў апошнія дзесяцігоддзі тычацца дэмаграфічнага складу: у нас зараз значна больш за міжнародных студэнтаў, за выключэннем канадцаў. Раней канадцаў было шмат, бо мы знаходзімся вельмі блізка да мяжы з Канадай, і студэнты адтуль могуць ездзіць дадому на выходных. Але зараз у Канадзе шмат добрых універсітэтаў, і канадцы аддаюць перавагу вучыцца ў сябе, у ЗША іх стала ездзіць значна менш.

Аляксей: Як вы думаеце, гэта мясцовы трэнд ці глабальны?

Майкл: Не памятаю дакладна хто, але нехта сказаў, што свет плоскі. Наша вобласць стала значна больш інтэрнацыянальнай. Канферэнцыі ACM раней праходзілі выключна ўнутры ЗША, потым вырашылі раз на 4 гады праводзіць іх у іншых краінах, а цяпер яны праходзяць па ўсім свеце. Яшчэ ў большай ступені гэтыя змены закранулі IEEE, паколькі яна заўсёды была больш міжнароднай арганізацыяй, чым ACM. А кіраўнікі праграм (program chairs) ёсць з Кітая, Індыі, Расіі, Германіі і многіх іншых краін, таму што ўсюды зараз вельмі шмат чаго адбываецца.

Аляксей: Але, напэўна, ёсць нейкія негатыўныя бакі такой інтэрнацыяналізацыі?

Майкл: Я б сказаў, што ўсе негатыўныя бакі датычацца не тэхнікі, а палітыкі. Калісьці галоўнай праблемай быў той факт, што ЗША кралі самых разумных і таленавітых людзей у краінаў ва ўсім сьвеце. А цяпер асноўная праблема - гэта палітычныя гульні паміж рознымі краінамі вакол віз і іміграцыі.

Аляксей: Гэта значыць бар'еры і да таго падобныя рэчы. Зразумела.

Уладзімір: Асабіста мне цікава, якога падыходу вы прытрымліваецеся, калі выкладаеце новы прадмет студэнтам. Ёсць бо розныя варыянты: можна імкнуцца ў першую чаргу натхніць іх паспрабаваць нешта новае, а мага больш увагі надаваць падрабязнасцям таго, як уладкована вызначаная тэхналогія. Што аддаеце перавагу вы?

Эфектыўная праца са студэнтамі

Аляксей: І як знайсці чортаў баланс паміж першым і другім?

Майкл: Праблема ў тым, што заняткі не заўсёды праходзяць так, як мне хацелася б. Звычайна я загадзя даю студэнтам матэрыял для чытання, каб яны ў яго ўглыбіліся, па меры сіл разабраліся і сфармулявалі пытанні па тых месцах, якія зразумець не ўдалося. Тады ў класе можна засяродзіцца менавіта на найболей цяжкіх момантах і даследаваць іх усім разам. Гэта тое, як мне найбольш падабаецца весці заняткі. Але з улікам той нагрузкі, якая зараз ляжыць на студэнтах, мне далёка не заўсёды атрымліваецца зрабіць так, каб яны падрыхтаваліся загадзя. У выніку даводзіцца надаваць агульнаму пераказу матэрыялу значна больш часу, чым хацелася б. Нягледзячы на ​​гэта, я стараюся, каб нашыя заняткі былі інтэрактыўнымі. У адваротным выпадку прасцей адзін раз запісаць відэа, якое студэнты могуць потым глядзець у сябе дома. Сэнс жывых заняткаў - у чалавечым узаемадзеянні. На занятках я аддаю перавагу карыстацца не слайдамі, а мелам і дошкай, за выключэннем асобных выпадкаў, калі якая-небудзь дыяграма занадта складаная, каб яе адлюстраваць на дошцы. Дзякуючы гэтаму мне няма неабходнасці прытрымлівацца цвёрдага плана занятку. Паколькі няма строга вызначанага парадку, у якім я даю матэрыял, гэта дазваляе адаптавацца да аўдыторыі ў залежнасці ад пытанняў, якія я атрымліваю. Увогуле, я стараюся, каб заняткі былі як мага больш інтэрактыўнымі, каб выкладзены мной матэрыял залежаў ад пытанняў, якія мне задаюць.

Уладзімір: Гэта вельмі здорава. На маю вопыту даволі складана дабіцца ад слухачоў пытанняў. Нават калі загадзя просіш задаваць любыя пытанні, не важна, дурныя ці разумныя, яны ўсё роўна маўчаць. Як вы з гэтым спраўляецеся?

Майкл: Вы будзеце смяяцца, але калі дастаткова доўга моўчкі стаяць, то рана ці позна ўсім стане нязручна, і хто-небудзь ды задасць пытанне. Ці можна задаць простае тэхнічнае пытанне з адказам "так" ці "не", каб вызначыць, ці зразумелі людзі, пра што толькі што ішла гаворка. Напрыклад, ці ёсць у прыведзеным прыкладзе гонка даных? Хто лічыць, што так? Хто лічыць, што не? Хто ўвогуле нічога не разумее, таму што ў агульнай складанасці паднялася толькі палова рук?

Віталь: І калі ты адказаў няправільна, вылятаеш з класа 🙂

Майкл: Калі ты не адказаў нічога, то мусіш задаць пытанне. Я павінен зразумець, што менавіта студэнту трэба ведаць, каб адказаць на пытанне, якое я толькі што задаў. Трэба, каб яны дапамаглі мне дапамагчы ім. Я гатовы падладзіцца пад іх, каб яны разабраліся ў праблеме. Але калі я ня ведаю, што адбываецца ў іх у галаве, я не магу гэтага зрабіць. І калі дастаткова доўга не даваць студэнтам спакою, то ў выніку часам яны задаюць правільныя пытанні, гэта значыць такія, дзякуючы якім я бачу, што менавіта адбываецца ў галовах у студэнтаў. 

Аляксей: Ці намаўляюць часам гэтыя пытанні на ідэі, пра якія вы самі раней не думалі? Ці бываюць яны нечаканымі? Ці дазваляюць зірнуць на нейкую праблему ў новым святле?

Майкл: Бываюць пытанні, дзякуючы якім адкрываецца новы спосаб падачы матэрыялу. Часта бываюць пытанні, якія прыводзяць да цікавых праблем, пра якія я не планаваў казаць. Студэнты мне часта кажуць, што ў мяне ёсць схільнасць адыходзіць ад тэмы занятку, калі такое адбываецца. І, паводле іх, вельмі часта гэта бывае найболей цікавая частка занятку. Зусім рэдка, літаральна некалькі разоў, студэнты задавалі пытанні, якія сутыкалі на новы напрамак у даследаванні і вырасталі ў артыкул. Гэта значна гушчару адбываецца ў гутарках са студэнтамі, а не падчас заняткаў, але зрэдку было і падчас заняткаў. 

Аляксей: Гэта значыць, студэнты задавалі вам пытанні, на аснове якіх потым можна было апублікаваць артыкул?

Майкл: Так. 

Віталь: Наколькі часта ў вас адбываюцца такія размовы са студэнтамі? Калі яны жадаюць даведацца больш, чым было расказана падчас занятку?

Майкл: З маімі аспірантамі - пастаянна. У мяне іх недзе 5 ці 6 чалавек, і мы ўвесь час з імі нешта абмяркоўваем. А размовы такога кшталту са студэнтамі, якія проста наведваюць мае заняткі – не надта часта. Хаця хацелася б, каб гэта адбывалася часцей. Падазраю, што яны проста баяцца прыходзіць на факультэт у гадзіны прыёму. Кожны семестр некаторым студэнтам атрымоўваецца пераадолець гэты псіхалагічны бар'ер, і з імі заўсёды вельмі цікава размаўляць пасля заняткаў. Праўда, калі б усе студэнты былі настолькі ж смелыя, у мяне проста не хапіла б часу. Так што магчыма ўсё працуе так, як трэба. 

Віталь: Як вам удаецца знаходзіць час для зносін са студэнтамі? Наколькі я ведаю, у ЗША ў выкладчыкаў вельмі шмат працы - заяўкі на гранты і таму падобнае. 

Майкл: Шчыра кажучы, праца са студэнтамі - гэта той аспект маёй дзейнасці, які мне падабаецца больш за ўсё. Так што матывацыі да гэтага ў мяне дастаткова. Вялікая частка часу, якое я праводжу ў сваім офісе, сыходзіць на ўсякага роды сустрэчы. Цяпер лета, таму графік менш шчыльны, але падчас навучальнага года кожны дзень з 9 да 17 у мяне ўсё забіта. Даследчая праца, рэцэнзіі, гранты - для ўсяго гэтага застаюцца толькі вечары і выходныя. 

Як не адстаць пры падрыхтоўцы новых курсаў і кніг?

Аляксей: Ці працягваеце вы зараз чытаць якія-небудзь курсы, якія вы чытаеце на працягу доўгага часу? Што-небудзь накшталт увядзення ў Computer Science.

Майкл: Першае, што тут прыходзіць у галаву - курс моў праграмавання. 

Аляксей: Наколькі моцна адрозніваецца сённяшні варыянт гэтага курса ад таго, які быў 10, 20, 30 гадоў таму? Магчыма, тут цікавейшыя не падрабязнасці асобнага курса, а агульныя тэндэнцыі.

Майкл: Мой курс моў праграмавання быў некалькі незвычайны ў той час, калі я яго стварыў. Я стаў чытаць яго ў канцы 1980-х, замяніўшы майго калегу, Дага Болдуіна (Дуг Болдуін). Тэма курса толькі ўскосна ставілася да маёй спецыялізацыі, але калі ён сышоў, я аказаўся лепшым кандыдатам для правядзення гэтага курса. Мне не падабаўся ніводны з існавалых тады падручнікаў, таму я ў канчатковым выніку сам напісаў падручнік для гэтага курса. (Заўвага рэдакцыі: гаворка ідзе пра кнігу "Programming Language Pragmatics") Цяпер ён выкарыстоўваецца ў больш чым 200 універсітэтах па ўсім свеце. Мой падыход незвычайны ў тым плане, што ў ім свядома змешваюцца праблемы праектавання мовы і яе рэалізацыі, і вялікая ўвага надаецца ўзаемадзеянню паміж гэтымі аспектамі ва ўсіх магчымых галінах. Асноўны падыход застаўся нязменным, як і многія базавыя паняцці: абстракцыі, прастора імён, модульнасць, тыпы. А вось набор моў, пры дапамозе якога гэтыя паняцці дэманструюцца, памяняўся цалкам. Калі курс быў толькі створаны, у ім было мноства прыкладаў на Pascal, а сёння многія мае студэнты аб такой мове нават не чулі. Затое яны ведаюць Swift, Go, Rust, таму я павінен казаць аб мовах, якія ў хаду сёння. Акрамя таго, зараз студэнты добра разбіраюцца ў скрыптовых мовах, а калі я пачынаў выкладаць гэты курс, ён цалкам быў прысвечаны кампіляваным мовам. Зараз жа трэба шмат матэрыялу пра Python, Ruby і нават Perl, таму што гэта тое, на чым у нашыя дні пішуць код, у гэтых мовах адбываецца мноства цікавых рэчаў, у тым ліку ў галіне праектавання моў. 

Віталь: Тады маё наступнае пытанне будзе звязана з папярэднім. Як не адстаць у гэтай галіне? Я падазраю, што абнаўляць такі курс патрабуе вялікага аб'ёму працы - трэба разбірацца ў новых мовах, разумець асноўныя ідэі. Як вам гэта ўдаецца?

Майкл: Я не магу пахваліцца, што ў мяне гэта заўжды на 100% атрымліваецца. Але часцей за ўсё я проста раблю тое, што робяць усе астатнія - чытаю інтэрнэт. Калі я хачу разабрацца ў Rust, я забіваю яго ў Google, іду на старонку Mozilla і чытаю выкладзенае тамака кіраўніцтва. Гэта па частцы рэчаў, якія адбываюцца ў камерцыйнай распрацоўцы. Калі ж казаць аб навуцы, то тут трэба сачыць за дакладамі на галоўных канферэнцыях. 

Сувязь паміж бізнесам і акадэміяй

Віталь: Давайце пагаворым аб сувязі паміж бізнесам і навуковымі даследаваннямі. У спісе вашых прац я знайшоў некалькі артыкулаў аб узгодненасці кэша (cache coherence). Наколькі я разумею, падчас іх публікацыі алгарытмы ўзгодненасці кэша былі нестабільнымі? Ці недастаткова распаўсюджанымі. Наколькі агульнапрынятымі былі вашыя ідэі на практыцы?

Майкл: Я дакладна не ўпэўнены, пра якія менавіта публікацыі вы гаворыце. Я даволі шмат працы прарабіў з маімі студэнтамі Білам Балоскі (William Bolosky) і Леанідасам Кантатанасісам (Leonidas Kontothanassis) у пачатку 1990-х над кіраваннем памяццю машын Нэймана. У той час у бізнэсе яшчэ не было разумення таго, як правільна зрабіць шматпрацэсарную сістэму: ці варта ствараць падтрымку доступу да выдаленай памяці на ўзроўні жалеза, ці варта рабіць памяць размеркаванай, ці можна выконваць загрузку кэша з выдаленай памяці, ці неабходна перамяшчаць старонкі ў аперацыйнай сістэме. Біл і Леанідас абодва працавалі ў гэтай галіне і даследавалі падыходы без выдаленай загрузкі кэша. Гэта наўпрост не адносілася да ўзгодненасці кэша, але ўсё ж гэта была праца над кіраваннем памяццю NUMA, і пасля з гэтага выраслі сучасныя падыходы да page placement у сучасных аперацыйных сістэмах. Увогуле, Біл і Леанідас прарабілі важную працу, хоць і не найболей уплывовую ў гэтай вобласці – у той час над гэтым жа працавала шмат іншых людзей. Пазней я займаўся тэмай, злучанай з узгодненасцю кэша ў кантэксце апаратнай транзакцыйнай памяці (hardware transactional memory). Гурт, разам з якім я працаваў над гэтай праблемай, атрымаў у выніку некалькі патэнтаў. За імі стаяць даволі цікавыя ідэі, але я ня думаю, што яны ў выніку атрымаюць практычную рэалізацыю. Так ці інакш, мне складана меркаваць аб іх прыбытковасці. 

Аляксей: У сувязі з гэтым больш асабістае пытанне: наколькі для вас важна, каб вашыя ідэі былі рэалізаваны на практыцы? Ці вы не думаеце пра гэта?

Майкл: Я люблю задаваць гэтае пытанне ў інтэрв'ю з іншымі людзьмі, абітурыентамі ці кандыдатамі, якія жадаюць працаваць на факультэце. Мне не падаецца, што на гэтае пытанне ёсць правільны адказ. У людзей, якія робяць класныя рэчы, можа быць самая розная матывацыя. Мяне праблемы прывабліваюць, таму што яны асабіста мне здаюцца цікавымі, а не з-за іх практычнай карысці. Але з іншага боку, калі якая-небудзь цікавая штука ўсё ж такі знаходзіць сабе ўжыванне, мне гэта вельмі падабаецца. Так што тут усё няпроста. Але ў пачатку працы ўсё ж такі мной рухае не ідэя канчатковага выкарыстання ў свеце, а складнасць ідэі і жаданне яе даследаваць і паглядзець, што з яе выйдзе. Калі ў выніку яна дасць практычную аддачу - выдатна. 

Аляксей: Дзякуючы вашай адукацыі і вопыту вы лепш за многіх здольныя ацаніць каштоўнасць чужых ідэй. Вы можаце параўнаць іх і вызначыць, што з чым лепей працуе. Я ўпэўнены, што ў вас ёсць меркаванне аб рэчах, якія выкарыстоўваюцца зараз на практыцы буйнымі вытворцамі накшталт Intel. Наколькі з вашага пункту гледжання слушны курс, якім ідуць гэтыя кампаніі?

Майкл: Практыка заўсёды круціцца вакол таго, што можа мець камерцыйны поспех, гэта значыць ствараць прыбытак, і пра гэта вам лепш спытаць у каго-небудзь іншага. Мая праца ў асноўным заканчваецца публікацыямі, а ў галіне аперацыйных сістэм яны ацэньваюцца па паказчыках прадукцыйнасці: хуткасць, спажыванне энергіі, памер кода. Але мне заўсёды падавалася, што гэтыя эмпірычныя вынікі дадаюцца ў артыкулы толькі для таго, каб іх можна было апублікаваць, а рэальныя матывы для працы ў людзей эстэтычныя. Даследчыкі ацэньваюць рашэнні з мастацкага боку, ім важна, наколькі ідэі элегантныя, і яны імкнуцца стварыць нешта лепшае, чым ужо існуючыя падыходы. Даследнікамі рухаюць асабістыя, суб'ектыўныя, эстэтычныя матывы. Але ў самім артыкуле аб гэтым не напішаш, для праграмнага камітэта гэтыя рэчы не з`яўляюцца аргументамі. На шчасце, элегантныя рашэнні часцей за ўсё таксама аказваюцца хуткімі і таннымі. Мы разам з дзясяткам маіх калегаў абмяркоўвалі гэтую тэму недзе 15 гадоў таму і ў выніку напісалі напісалі пра гэта артыкул. Думаю, зараз яе яшчэ можна знайсці, яна называецца How to evaluate systems research ці нешта ў такім родзе, у яе больш за дзесятак аўтараў. Гэта адзіны артыкул, у якім я аўтар разам з Сашай Фёдаравай, так што калі вы зробіце пошук яе імя ў маім спісе публікацый, то знойдзеце тое, што трэба. Там гаворыцца аб ацэнцы даследаванняў сістэм і аб тым, наколькі важная элегантнасць. 

Аляксей: Гэта значыць, паміж стандартам таго, што лічыцца добрым вынікам у навуцы і ў бізнесе, існуе розніца. У навуцы ацэньваецца прадукцыйнасць, энергаспажыванне, TDP, прастата рэалізацыі і шматлікае іншае. Ці ёсць у вас магчымасць весці такога роду даследаванні ва ўніверсітэце? Ці ёсць у вас лабараторыя з рознымі машынамі і рознымі архітэктурамі, у якой можна было ставіць эксперыменты?

Майкл: Так, у нашай кафедры вельмі шмат розных цікавых машын. Часцей за ўсё яны маленькія, у нас ёсць невялікі кластар і шмат шматпрацэсарных сістэм з рознымі паскаральнікамі. Акрамя таго, на кампусе ёсць велізарны вылічальны цэнтр, які абслугоўвае навукоўцаў з некалькіх дзясяткаў розных дысцыплін. У ім каля тысячы вузлоў і дваццаці тысяч ядраў, усё на Linux. Калі ўзнікае запатрабаванне, то заўсёды можна купіць трохі AWS. Так што з жалезам у нас значных абмежаванняў няма. 

Аляксей: А як ішло справу трыццаць гадоў таму? Тады праблемы былі?

Майкл: Тады было крыху інакш. У сярэдзіне-канцы 1980-х лічылася, што навуцы не хапае вылічальных рэсурсаў. Каб выправіць гэтую сітуацыю, Нацыянальны навуковы фонд (National Science Foundation) стварыў праграму каардынаваных эксперыментальных даследаванняў (Coordinated Experimental Research, CER). Задачай гэтай праграмы было даць вылічальную інфраструктуру для кафедр Computer Science, і яна дабілася істотных змен. На прадстаўленыя ёю грошы мы ў Рочэстэрскім універсітэце купілі ў 1984 году 128-вузловы BBN Butterfly, гэта было за год да майго з'яўлення тамака. На той момант гэта была самая вялікая ў свеце шматпрацэсарная сістэма з агульнай памяццю. У яе было 128 працэсараў, кожны на асобным матчыным поплатку, яна займала чатыры стойкі. Кожны працэсар меў мегабайт памяці, 128 мегабайт аператыўнай памяці ў той час было няўяўнай колькасцю. На гэтай машыне мы ўпершыню рэалізавалі блакаванне MCS. 

Аляксей: Гэта значыць, калі я правільна вас зразумеў, то на дадзены момант праблема з жалезам вырашана? 

Майкл: Увогуле і цэлым - так. Ёсць некалькі агаворак: па-першае, калі вы займаецеся архітэктурай кампутара на ўзроўні мікрасхем, то ў акадэмічным асяроддзі гэта рабіць складана, паколькі ў бізнэсе для гэтага існуюць значна больш дасканалыя прылады. Калі вам трэба штосьці менш за 10 нанаметраў, то гэта прыйдзецца заказваць у кагосьці на баку. У гэтай вобласці значна прасцей быць даследнікам у Intel. Калі вы працуеце над аптычнымі сувязямі на чыпах або над цвёрдацельнай памяццю, то вы знойдзеце ў бізнэсе тэхналогіі, якіх пакуль няма ў навуцы, так што даводзіцца ствараць саюзы. Напрыклад, Стывен Свансан (Стывен Суонсан) стварыў такое таварыства для новых тэхналогій памяці. Гэтая форма не заўсёды працуе, але ў некаторых выпадках яна можа быць вельмі пасьпяховай. Акрамя таго, у навуцы цяжэй ідзе развіццё найболей магутных вылічальных сістэм. Самыя маштабныя праекты з суперкампутарамі, якія зараз ёсць у ЗША, Японіі і Кітаі, усё сканцэнтраваны ў бізнэсе. 

Практычная рэалізацыя ідэй. MCS, MS, CLH, JSR 166, праца з Дагам Лі і многае іншае.

Віталь: Вы ўжо расказалі пра тое, як пачалі працаваць над алгарытмамі сінхранізацыі. У вас ёсць два вельмі вядомыя артыкулы аб блакіроўцы MCS и чарзе Майкла-Скота (MS), якія ў пэўным сэнсе былі рэалізаваны ў Java. (Заўвага рэдакцыі: усе публікацыі можна паглядзець па спасылцы). Там гэтая блакіроўка была рэалізавана з некаторымі зменамі і атрымалася блакіроўка 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, чакаецца, што вынік будзе даступны адразу ж, а не ў залежнасці ад рэальнага памеру калекцыі. Зразумела, дзякуй.

Майкл: Некалькімі гадамі пазней я працаваў над падвойнымі структурамі дадзеных (dual data structures) з маім студэнтам Білам Шэрэрам (Bill Scherer) — уласна, пра іх будзе мой даклад на Hydra. Даг падышоў да нас і сказаў, што яны спатрэбіліся б яму ў Java Executor Framework. Разам з Білам яны стварылі дзве рэалізацыі, так званыя сумленныя і несумленныя чэргі (fair and unfair queues). Я кансультаваў іх па гэтым праекце, хоць і не ўдзельнічаў у напісанні ўласна кода. У выніку хуткасць executors значна павялічылася. 

Уладзімір: Ці сутыкаліся вы з няслушнымі рэалізацыямі вашых алгарытмаў ці з просьбамі дадаць новыя фічы? Наогул практыка павінна супадаць з тэорыяй, але дастаткова часта яны адрозніваюцца. Выкажам здагадку, вы напісалі алгарытм, і на паперы ён працуе, але людзі, якія займаюцца рэалізацыяй, сталі прасіць у вас больш фіч або які-небудзь налады алгарытму. Ці былі ў вас такія сітуацыі?

Майкл: Адзіны прыклад, у якім да мяне падышлі і спыталі "як рэалізаваць" - гэта пытанне Дага, пра якое я ўжо расказваў. Але было некалькі выпадкаў, калі згодна з практычнымі патрэбамі ўносіліся цікавыя змены. Напрыклад, каманда K42 з IBM канвертавала блакіроўку MCS і зрабіла стандартны інтэрфейс, дзякуючы якому не было неабходнасці перадаваць туды і зваротна вузел чаргі падпраграмам acquire і release. Дзякуючы гэтаму стандартнаму інтэрфейсу ідэя, прыгожая ў тэорыі, стала працаваць на практыцы. Дзіўна, што яны так і не апублікавалі пра гэта артыкул, а патэнт хаця і атрымалі, але потым ад яго адмовіліся. Задума была выдатнай, і я пры магчымасці імкнуся пра яе расказваць. 

Былі і іншыя выпадкі, калі людзі ўносілі паляпшэнні ў апублікаваныя мной алгарытмы. Напрыклад, у чарзе MS ёсць двухэтапны механізм усталёўкі, а гэта азначала, што на крытычным шляху чаргі было два CAS. На старых машынах CAS былі дастаткова дарагімі. У апошні час Intel і іншыя вытворцы нядрэнна іх аптымізавалі, але калісьці гэта былі інструкцыі з 30 цыкламі, таму больш за адну на крытычным шляху мець было непажадана. У выніку была распрацавана выдатная чарга, якая была падобная да чаргі MS, але ў якой была толькі адна атамарная аперацыя на крытычным шляху. Гэта дасягалася дзякуючы таму, што на працягу вызначанага прамежку часу аперацыя магла заняць O(n) чакай, а не O(1). Гэта было малаверагодна, але магчыма. Адбывалася гэта з-за таго, што ў пэўныя моманты алгарытм рабіў абыход чаргі з пачатку і да бягучага становішча ў гэтай чарзе. У цэлым, алгарытм атрымаўся вельмі ўдалы. Наколькі я ведаю, ён не вельмі шырока выкарыстоўваецца, часткова таму, што атамарныя аперацыі патрабуюць значна менш рэсурсаў, чым раней. Але ідэя была выдатная. Мне таксама вельмі падабаецца праца Дэйва Дайса (Dave Dice) з Oracle. Усё, што ён робіць, вельмі практычна, і ён вельмі спрытна выкарыстоўвае жалеза. Ён прыклаў руку да значнай часткі NUMA-aware алгарытмаў сінхранізацыі і шматструменных структур дадзеных. 

Уладзімір: Калі вы пішаце алгарытмы ці вучыце студэнтаў, вынік працы бачны не адразу. Супольнасьці патрэбны нейкі час, каб азнаёміцца, скажам, з новым артыкулам. Новы алгарытм далёка не адразу знаходзіць сабе ўжыванне. 

Майкл: Далёка на адразу зразумела, ці апынецца артыкул значным ці не. Думаю, было б цікава правесці даследаванне артыкулаў, якія заваявалі ўзнагароды на канферэнцыях. Гэта значыць паглядзець на артыкулы, якія людзі ў праграмных камітэтах у свой час палічылі самымі лепшымі. Трэба паспрабаваць палічыць па колькасці спасылак і па ўплыве на бізнэс, наколькі гэтыя артыкулы сапраўды аказалася ўплывовымі праз 10, 20, 25 гадоў. Я сумняваюся, што паміж гэтымі двума параметрамі была б моцная карэляцыя. Яна не будзе нулявая, але, хутчэй за ўсё, яна будзе значна слабейшай, чым хацелася б. Многія ідэі на працягу доўгага часу застаюцца незапатрабаванымі, перш чым атрымліваюць распаўсюджванне. Напрыклад, возьмем транзакцыйную памяць. З моманту публікацыі першапачатковага артыкула да таго часу, калі людзі сапраўды сталі ствараць машыны з ім, прайшло больш за 10 гадоў. А да з'яўлення гэтай памяці ў камерцыйных прадуктах - і ўсе 20. Вельмі доўга на артыкул ніхто не звяртаў увагі, а потым рэзка вырасла колькасць спасылак на яе. Загадзя гэта прадказаць было б складана. З іншага боку, часам ідэі знаходзяць рэалізацыю адразу ж. Некалькі гадоў таму я напісаў артыкул разам з Джо Ізраілевічам (Joe Izraelevitz) для DISC, у якім было прапанавана новае фармальнае вызначэнне правільнасці для персістэнтных структур дадзеных, якія маглі б выкарыстоўвацца пасля збою кампутара, які працуе з імі. Артыкул мне падабаўся з самага пачатку, але ён аказаўся значна больш папулярным, чым я чакаў. Ёй скарысталася некалькі розных груп, і ў выніку яна стала стандартным вызначэннем персістэнтных структур. Што, вядома, прыемна.

Уладзімір: А ці ёсць нейкія прыёмы, якія вы карыстаецеся для ацэнкі? Ці спрабуеце вы ўвогуле ацэньваць свае артыкулы, сваіх студэнтаў? У плане таго, ці ідзе чалавек, якога вы вучылі, у правільным напрамку.

Майкл: Як і ўсё, я больш увагі ўдзяляю таму, чым займаюся ў дадзены момант. Ізноў-ткі, як і ўсё, я зрэдку правяраю Google Scholar і гляджу, ці цытуюцца мае мінулыя артыкулы, але гэта хутчэй з цікаўнасці. У асноўным я захоплены тым, што мае студэнты робяць зараз. Што да адзнакі бягучай працы, то збольшага тут працуюць меркаванні эстэтыкі, што элегантна, а што – не. А на паўсядзённым узроўні вялікую ролю іграюць адкрытыя пытанні. Напрыклад, да мяне прыходзіць студэнт з графікам нейкіх вынікаў, і мы спрабуем зразумець, адкуль узяліся некаторыя дзіўныя паводзіны графіка. У цэлым, у нашай працы мы ўвесь час спрабуем разабрацца ў рэчах, якія пакуль не разумеем. 

Транзакцыйная памяць

Віталь: Можа, крыху пагаворым пра транзакцыйную памяць?

Майкл: Думаю, варта сказаць хаця б крыху, таму што я ўклаў у гэта вельмі шмат намаганняў. Гэта тэма, па якой у мяне больш публікацый, чым па любой іншай. Але пры гэтым, як гэта ні дзіўна, я ўвесь час быў вельмі скептычна настроены ў адносінах да транзакцыйнай памяці. На мой погляд, артыкул Херліхі і Моса (M. Herlihy, JEB Moss) была апублікаваная раней за свой час. У пачатку 1990-х яны выказалі здагадку, што транзакцыйная памяць магла б дапамагчы таленавітым праграмістам, якія працуюць над шматструменнымі структурамі дадзеных, каб гэтыя структуры затым у якасці бібліятэк маглі б выкарыстоўвацца звычайнымі праграмістамі. Гэта значыць гэта была б дапамога для Дагаў Лі, якія займаюцца сваімі JSR 166. Але транзакцыйная памяць не прызначалася для таго, каб зрабіць шматструменнае праграмаванне простым. А яе менавіта так сталі ўспрымаць у пачатку 2000-х, калі яна атрымала распаўсюджванне. Яе рэкламавалі як спосаб вырашыць праблему раўналежнага праграмавання. Гэты падыход мне заўсёды здаваўся безнадзейным. Транзакцыйная памяць магла толькі спрасціць напісанне паралельных структур звестак. Гэтага яна, як мне падаецца, і дасягнула. 

Аб складанасці напісання шматструменнага кода

Аляксей: Вельмі цікава. Здаецца, ёсць пэўны бар'ер паміж звычайнымі праграмістамі і тымі, хто можа пісаць шматструменны код. У мінулым годзе я некалькі разоў меў зносіны з людзьмі, якія займаліся рэалізацыяй некаторага алгарытмічнага фрэймворка. Напрыклад, з Марцінам Томсанам, а таксама з праграмістамі, якія працуюць над шматструменнымі бібліятэкамі. (Заўвага рэдакцыі: Марцін Томпсан - вельмі вядомы распрацоўшчык, ён напісаў Disruptor и Aeron. А яшчэ ў яго ёсць даклад на нашай канферэнцыі Joker 2015, відэазапіс даступная на YouTube. Ён жа адкрываў гэтую канферэнцыю, запіс кейнаўта таксама дастуна). Па іх словах, галоўная цяжкасць у тым, каб алгарытмы былі адначасова хуткімі і простымі ў выкарыстанні. Гэта значыць, яны спрабуюць як раз пераадолець гэты бар'ер і прыцягнуць як мага больш людзей у гэтую вобласць. Што вы пра гэта думаеце?

Майкл: Гэта галоўная праблема шматструменнасці: як дабіцца высокай прадукцыйнасці, не павялічваючы складанасці сістэмы. 

Аляксей: Таму што калі яны спрабуюць пазбегнуць складанасці, алгарытм становіцца менш універсальным.

Майкл: Тут галоўнае - правільна спраектаваныя абстракцыі. Мне здаецца, што гэта ўвогуле галоўнае для кампутарных сістэм як вобласці. Гэты тэрмін любіць ужываць Батлер Лэмпсан (Butler Lampson), і нас ён называе «гандлярамі абстракцыямі». Простых тэхналогій сёння не існуе. У працэсарах, якія мы выкарыстоўваем, па 10 мільярдаў транзістараў - аб прастаце тут гаворкі быць не можа. Пры гэтым ISA значна прасцей працэсара, паколькі мы вельмі доўга працавалі над тым, каб забяспечыць для яе высокую прадукцыйнасць і адносна просты інтэрфейс. Але і з ёй не ўсё гладка. Тая ж праблема з паскаральнікамі, якія зараз з'яўляюцца на рынку. Узнікаюць пытанні - як зрабіць правільны інтэрфейс для GPU, механізм шыфравання, сціск, механізм перакадавання, механізм лінейнай алгебры ці нават больш гнуткую FPGA. Як зрабіць інтэрфейс, які забяспечыць прастату выкарыстання прылады і схавае складанасць? Не пазбавіцца ад яе, а менавіта схавае ад простага праграміста. 

Аляксей: Я так разумею, што ў нас ёсць яшчэ бар'ер у разуменні абстракцый. Возьмем мадэль памяці, на нашым этапе развіцця навукі і тэхнікі гэта адна з галоўных абстракцый. Дзякуючы ёй усе праграмісты дзеляцца на дзве групы: большая частка - гэта тыя, хто яе не разумеюць, і меншая - тыя, хто разумеюць, або думаюць, што разумеюць. 

Майкл: Гэта добрае пытанне - ці сапраўды хто-небудзь з нас разумее мадэль памяці.

Віталь: Асабліва ў C++.

Майкл: Пагаварыце як-небудзь з Гансам Бёмам (Hans Boehm). Гэта адзін з самых разумных людзей, якіх я ведаю, кіроўны эксперт па мадэлях памяці. Ён вам адразу ж скажа, што ён шмат чаго там не разумее. Але калі вяртацца да пытання абстракцый, то, на мой погляд, найважнейшая думка ў вобласці мадэляў памяці за апошнія 30 гадоў была выказана у дысертацыі Сарыта Адве. (Заўвага рэдакцыі: поўны спіс публікацый ёсць па спасылцы).

Аляксей: Маё пытанне такое: ці адбываецца гэты бар'ер з самой прыроды паняцця? 

Майкл: Не. Сарыта прыйшоў да высновы, што пры правільным падыходзе можна паспяхова схаваць усю складанасць, атрымаць высокую прадукцыйнасць і даць праграмісту просты API. І калі прытрымлівацца гэтага API, то можна дабіцца паслядоўнай узгодненасці. Я лічу, што гэта слушная мадэль. Пішаце код без гонак дадзеных і атрымліваеце паслядоўную ўзгодненасць. Вядома, для таго, каб паменшыць верагоднасць гонак, патрэбны спецыяльныя інструменты, але гэта ўжо іншае пытанне. 

Уладзімір: Ці былі ў вашай кар'еры выпадкі, калі праблема, якая здавалася вырашанай, раптам абарочвалася цэлай катастрофай, ці высвятлялася, што гэтая праблема невырашальная? Напрыклад, у тэорыі можна фактарызаваць любы лік або вызначыць, ці з'яўляецца любы лік простым. Але на практыцы гэта бывае складана зрабіць, з існуючым зараз жалезам складана фактарызаваць лікі. Ці адбывалася нешта падобнае да вас?

Майкл: Адразу нічога падобнага не ўзгадваецца. Бывала, калі мне здавалася, што ў некаторай сферы рабіць ужо няма чаго, а потым тамака адбывалася нешта новае і цікавае. Напрыклад, я думаў, што ў галіне неабмежаваных чэргаў ужо дасягнута сталасць. Пасля некалькіх паляпшэнняў для чаргі MNS нічога асаблівага ўжо не адбывалася. А потым Морысан (Adam Morrison) і Афек (Yehuda Afek) вынайшлі чарга LCRQ. Стала ясна, што магчымая неабмежаваная шматструменная чарга, у якіх большую частку часу на крытычным шляху была толькі інструкцыя fetch-and-increment. І гэта дазваляла дабіцца на парадак лепшай прадукцыйнасці. Не тое, што мы не ведалі б, што fetch-and-increment вельмі карысная рэч. Эрык Фрэйдэнтал (Eric Freudenthal) пісаў пра гэта ў сваёй працы аб Ultracomputer c Аланам Готліб (Allan Gottlieb) у канцы 1980-х, але там гаворка ішла аб абмежаваных чэргах. Морысан і Афек змаглі выкарыстаць fetch-and-increment у неабмежаванай чарзе.

Новыя архітэктуры. Ці блізкая перамога транзакцыйнай памяці?

Уладзімір: Ці сочыце вы за новымі архітэктурнымі рашэннямі, якія маглі б быць карыснымі для алгарытмаў? 

Майкл: Вядома, ёсць мноства рэчаў, якія мне хацелася б, каб былі рэалізаваны. 

Уладзімір: А якія, напрыклад?

Майкл: У першую чаргу - некалькі простых пашырэнняў для нашай транзакцыйнай памяці апаратнага ўзроўню ў працэсарах Intel і IBM. У асаблівасці мне хацелася б, каб не-транзакцыйныя толькі што адбыліся load і store былі адразу ж даступныя ўнутры транзакцый. Яны адразу ж прыводзяць да цыклаў у паслядоўнасці happens-before, так што з імі могуць быць складанасці. Але калі падтрымліваць ўзроўні абстракцыі, існуе мноства вельмі цікавых рэчаў, якія можна зрабіць па-за межамі транзакцыі, пакуль яна адбываецца. Я ня ведаю, наколькі цяжка гэта было б рэалізаваць, але гэта было б вельмі карысна. 

Іншая карысная рэч - загрузка кэша з выдаленай памяці. Думаю, рана ці позна гэта будзе зроблена. Гэта тэхналогія дазволіць ствараць сістэмы з дэзагрэгаванай памяццю. Можна будзе трымаць, скажам, 100 тэрабайт энерганезалежнай памяці ў стойцы, і аперацыйная сістэма сама будзе дынамічна вырашаць, якія часткі гэтай памяці павінны адпавядаць фізічнай адраснай прасторы працэсараў. Гэта было б вельмі карысна для хмарных вылічэнняў, паколькі дазволіла б падаваць вялікія аб'ёмы памяці тым задачам, якія ў ёй маюць патрэбу. Думаю, хто-небудзь гэта зробіць.

Віталь: Каб скончыць размову аб транзакцыйнай памяці, у мяне ёсць яшчэ адно пытанне па гэтай тэме. Ці выцесніць транзакцыйная памяць у канчатковым выніку стандартныя шматструменныя структуры дадзеных?

Майкл: Не. Транзакцыі - гэта спекулятыўны механізм. На ўзроўні праграмавання гэта атамарныя блакіроўкі, а ўнутры - спекуляцыі. Такое прагназаванне працуе ў тым выпадку, калі большасць здагадак дакладныя. Таму транзакцыйная памяць добра працуе тады, калі струмені амаль не ўзаемадзейнічаюць сябар з сябрам, і трэба проста пераканацца ў тым, што ўзаемадзеянняў няма. Але калі паміж трэдамі пачынаецца паведамленне, ад транзакцый мала карысці. Растлумачу, гаворка ідзе пра выпадак, калі транзакцыі абгорнуты вакол усёй атамарнай аперацыі. Яны ўсё роўна могуць з поспехам выкарыстоўвацца як складовыя часткі для шматструменных структуры дадзеных. Напрыклад, калі неабходны CAS з трох слоў, і трэба выканаць у рэжыме шматструменнасці тры невялікія рэчы сярод сапраўды шматструменнага алгарытму, які працуе з дваццаццю трэдамі адначасова. Увогуле, транзакцыі могуць быць карыснымі, але ад неабходнасці правільна праектаваць шматструменныя структуры дадзеных яны не пазбавяць. 

Энерганезалежная памяць, Optane DIMM, звышхуткія прылады.

Віталь: Апошняе, пра што я хацеў бы пагаварыць - гэта тэма вашых бягучых даследаванняў: энерганезалежная памяць. Чаго можна ў гэтай галіне чакаць у найбліжэйшай будучыні? Магчыма, вам вядомыя якія-небудзь ужо існуючыя эфектыўныя рэалізацыі? 

Майкл: Я не эксперт па жалезе, я ведаю толькі тое, што чытаю ў навінах і што мне расказваюць калегі. Усе ўжо чулі, што Intel прадае Optane DIMM, у якіх дзесьці ў 3 разы больш затрымка чытання і ў 10 разоў больш затрымка запісу, чым у дынамічных RAM. У хуткім часе яны будуць даступныя ў версіях з вельмі вялікім аб'ёмам. Пацешна думаць аб тым, што можна будзе мець наўтбук з некалькімі тэрабайтамі адрасаванай у байтах RAM. Цалкам верагодна, што праз 10 гадоў мы вырашым выкарыстоўваць гэтую новую тэхналогію, бо мы выкарыстоўваем DRAM - проста нарошчваць аб'ёмы. Але дзякуючы энерганезалежнасці ў нас адкрываюцца зусім новыя магчымасці. Мы можам у корані змяніць стэк захоўвання дадзеных, каб не было падзелу паміж адрасаванай у байтах працоўнай памяццю і блокава-структураванай персістэнтнай памяццю. Такім чынам, нам не трэба будзе серыялізаваць у блочна-структураваныя файлы ўсё, што трэба – перанесці з аднаго запуску праграмы ў іншы. З гэтага можна вывесці мноства важных прынцыпаў, якія ўплываюць на аперацыйныя сістэмы, асяроддзі выканання і размеркаваныя сховішчы дадзеных. У гэтай галіне вельмі цікава працаваць. Асабіста мне складана прадказаць, у што гэта ўсё выльецца, але праблемы тут вельмі цікавыя. Магчыма, тут адбудуцца рэвалюцыйныя змены, і яны вельмі натуральнай выявай вынікаюць з працы над шматструменнасцю, паколькі аднаўленне пасля збою з'яўляецца «шматструменным» працэсам побач са звычайнай працай сістэмы. 

Другая галоўная тэма, над якой я цяпер працую - гэта кіраванне звышхуткімі прыладамі і бяспечны доступ да прылад з юзерспейса з сістэмным кантролем над палітыкай. У апошнія гады назіраецца трэнд перамяшчаць доступ да прылады ў юзерспейс. Гэта робіцца з-за таго, што па-над сеткавым інтэрфейсам, якому патрэбен новы пакет кожныя 5 мікрасекунд, не можа функцыянаваць TCP-IP стэк ядра, ён проста не будзе паспяваць. Таму вытворцы падаюць прамы доступ да прылад. Але гэта значыць, што аперацыйная сістэма губляе кантроль над працэсам, і яна не можа забяспечыць правільны доступ да прылады для якія спаборнічаюць прыкладанняў. Нашая даследчая група лічыць, што гэтага недахопу можна пазбегнуць. На USENIX ATC у гэтым месяцы будзе наш артыкул пра гэта. Яна злучана з працай над персістэнтнасцю, паколькі даўгавечная адрасаваная ў байтах персістэнтная памяць з'яўляецца, у сутнасці, прыладай са звышхуткім I/O, да якога трэба падаць доступ у юзерспейсе. Гэтыя даследаванні робяць магчымымі новыя падыходы да микроядрам, экзоядрам і іншым іншым традыцыйным спробам бяспечна перанесці функцыянальнасць з ядра АС у юзерспейс. 

Уладзімір: Адрасаваная ў байтах памяць - гэта выдатна, але ёсць фізічнае абмежаванне - хуткасць святла. А гэта значыць, што непазбежна будзе затрымка пры ўзаемадзеянні з прыладай. 

Майкл: Цалкам дакладна.

Уладзімір: Ці хопіць магутнасцей для таго, каб справіцца з новымі нагрузкамі?

Майкл: Гэта выдатнае пытанне, але мне на яго складана будзе штосьці адказаць. Ужо даўнавата існуе ідэя апрацоўкі ў памяці, яна вельмі цікавая, але і вельмі складаная. Я ў гэтай галіне не працаваў, але было б выдатна, калі б там былі зроблены нейкія адкрыцці. Баюся, больш мне дадаць няма чаго. 

Уладзімір: Ёсць яшчэ адна праблема. Новыя, значна вялікія аб'ёмы RAM будзе немагчыма размясціць у CPU. Таму з-за фізічных абмежаванняў гэтая RAM павінна быць ізаляванай. 

Майкл: Тут усё залежыць ад колькасці дэфектаў пры вытворчасці інтэгральных схем. Калі б можна было ствараць паўправадніковыя пласціны цалкам без дэфектаў, то з яе можна было б цалкам зрабіць мікрасхему. Але зараз мы не ўмеем рабіць мікрасхемы больш паштовых марак. 

Уладзімір: Але гаворка ўсё роўна ідзе пра вялізныя памеры, пра сантыметры. Гэта непазбежна ўплывае на затрымку. 

Майкл: Так. З хуткасцю святла нічога не зробіш. 

Уладзімір: На жаль. 

Наступны вялікі трэнд. Dual data structures. Hydra.

Віталь: Наколькі я разумею, вы вельмі хутка ўлоўліваеце новыя трэнды. Вы былі адным з першых, хто пачаў займацца транзакцыйнай памяццю, і адным з першых у энерганезалежнай памяці. Як вы думаеце, які будзе наступны важны трэнд? Ці, магчыма, гэта сакрэт?

Майкл: Шчыра кажу, што не ведаю. Спадзяюся, мне ўдасца заўважыць, калі ўзнікне нешта новае. Мне не пашчасціла вынайсці ў адзіночку якую-небудзь новую вобласць, але некалькі разоў павезла, і я змог даволі рана пачаць працаваць у новых сферах, створаных іншымі. Спадзяюся, мне гэта будзе ўдавацца і ў будучыні.

Аляксей: Апошняе пытанне ў гэтым інтэрв'ю будзе пра ваш выступ на Hydra і занятак у школе. Калі я правільна зразумеў, то даклад на школе будзе пра алгарытмы без блакавання, а на канферэнцыі пра падвойныя структуры дадзеных. Не маглі б вы сказаць пару слоў аб гэтых дакладах?

Майкл: Збольшага мы ўжо закраналі гэтыя тэмы з вамі ў гэтым інтэрв'ю. Гаворка пойдзе пра працу, якую я вёў з маім студэнтам Білам Шэрэрам. Ён напісаў на аснове яе дысертацыю, і ў ёй таксама ўдзельнічаў Даг Лі, а ў канчатковым выніку яна стала часткай шматструменных сінхронных чэргаў у бібліятэцы Java. Выкажам здагадку, адбываецца чытанне і запіс у структуру дадзеных без блакавання, гэта значыць у кожнай аперацыі ёсць абмежаваную колькасць інструкцый на крытычным шляху. Калі паспрабаваць выключыць дадзеныя з пустога кантэйнера, ці паспрабаваць выключыць пэўныя дадзеныя, якіх у гэтым кантэйнеры няма, то тут жа паведамляецца, што гэта зрабіць немагчыма. Але такія паводзіны могуць быць недапушчальным, калі гэтыя дадзеныя вельмі патрэбныя трэду. Тады першае, што прыходзіць у галаву - гэта стварыць цыкл, які будзе пастаянна пытацца, ці не з'явіліся неабходныя дадзеныя. Але тады ўзнікаюць перашкоды для ўсіх астатніх. Акрамя таго, пры такім падыходзе можна чакаць 10 хвілін, а потым прыйдзе нейкі іншы трэд, і ён выпадкова атрымае неабходныя дадзеныя першым. У падвойных структурах дадзеных па-ранейшаму няма блакіровак, але яны дазваляюць правільна арганізаваць чаканне трэдаў. Тэрмін "двайная" азначае, што структура змяшчае альбо дадзеныя, альбо запыты на дадзеныя, назавем іх анты-дадзеныя. Так што калі паспрабаваць выняць нешта з пустога кантэйнера, то замест гэтага ў кантэйнер будзе пакладзены запыт. Цяпер трэд можа чакаць запыту і пры гэтым нікога іншага не турбаваць. Акрамя таго, структура дадзеных прызначае запытам прыярытэты, так што пры атрыманні яна перадае іх таму, каму трэба. Атрымліваецца механізм без блакіроўкі, які пры гэтым мае фармальную спецыфікацыю і добрую прадукцыйнасць на практыцы. 

Аляксей: Якія вашы чаканні ад гэтай структуры дадзеных? Ці дазволіць яна палепшыць прадукцыйнасць ва ўсіх тыповых выпадках, ці яна лепш падыходзіць для пэўных сітуацый? 

Майкл: Яна карысная ў выпадку, калі, па-першае, неабходны кантэйнер без блакіроўкі, і, па-другое, трэба чакаць у сітуацыі, калі з кантэйнера неабходна атрымаць дадзеныя, якіх у ім няма. Наколькі мне вядома, наша структура забяспечвае аптымальныя паводзіны ў выпадку, калі выконваюцца гэтыя дзве ўмовы. Таму ў гэтых выпадках я рэкамендую яе выкарыстоўваць. Галоўная перавага структур дадзеных без блакіроўкі ў тым, што яны дазваляюць пазбегнуць праблем з прадукцыйнасцю. А чаканне вельмі важна ў шматлікіх алгарытмах, калі адбываецца перадача дадзеных з аднаго трэда ў іншы.

Віталь: Дазвольце ўдакладніць: вы будзеце гаварыць пра адно і тое ж і ў школе, і на канферэнцыі?

Майкл: На школе я буду гаварыць у цэлым аб шматструменных структурах дадзеных, з выкладаннем асноўных прынцыпаў у пачатку заняткі. Я маю на ўвазе, што аўдыторыя ведае, што такое патокі, і знаёмая з блакіроўкамі. Арыентуючыся на гэтыя базавыя веды, я буду расказваць аб структурах даных без блакіровак. Я дам агляд найбольш важных праблем у гэтай галіне, закрану тэмы накшталт кіравання памяццю. Не думаю, што там будзе штосьці складаней чарзе MS.

Аляксей: Ці плануеце вы расказаць пра падвойныя структуры дадзеных у канцы вашага занятку ў школе?

Майкл: Я іх згадаю, але шмат часу ўдзяляць ім не буду. Ім будзе прысвечаны даклад на Hydra. Там будзе расказана аб праекце, які ў выніку ўвайшоў у Java, а таксама аб працы з Джо Ізраілевічам над стварэннем падвойнага варыянту чаргі LCRQ, і аб стварэнні амаль універсальнай канструкцыі для падвойных структур дадзеных.

Аляксей: Гэта значыць, лекцыю ў школе можна парэкамендаваць для пачаткоўцаў, а лекцыю аб падвойных структурах даных на Hydra - для людзей, якія ўжо маюць нейкі вопыт?

Майкл: Папраўце мяне, калі я не мае рацыю, але аўдыторыя на Hydra будзе даволі разнапланавай, у тым ліку там будзе шмат экспертаў па Java, і ўвогуле людзей, якія спецыяльна шматструменным праграмаваннем не займаюцца. 

Віталь: Так, гэта дакладна.

Аляксей: Прынамсі, мы на гэта спадзяемся.

Майкл: У гэтым выпадку перада мной будзе тая праблема, з абмеркавання якой мы пачалі гэтае інтэрв'ю: як зрабіць даклад адначасова ў дастатковай ступені насычаным тэхнічнымі падрабязнасцямі і даступным усім слухачам.

Віталь: Ці будзеце вы весці даклад так, як ведзяце лекцыі? Гэта значыць, размаўляць з аўдыторыяй і адаптавацца па сітуацыі?

Майкл: Баюся, так не атрымаецца, бо даклад будзе са слайдамі. Слайды важныя, калі слухачы першапачаткова размаўляюць на розных мовах. Многім будзе складана зразумець мяне на англійскай, асабліва калі я буду казаць занадта хутка. Я абраў менавіта гэтыя тэмы, таму што Пётр Кузняцоў папрасіў мяне распавесці пра структуры дадзеных без блакавання на Школе SPTDC; а потым стаў патрэбен даклад для канферэнцыі юзэр-групы Java, і я жадаў абраць нешта, што было б цікава менавіта праграмістам Java. Прасцей за ўсё было расказаць пра тыя рэчы ў бібліятэцы Java, да якіх я так ці інакш прыклаў руку. 

Аляксей: Мы мяркуем, што аўдыторыя на Hydra ужо нешта ведае пра праграмаванне без блакіровак і, магчыма, мае нейкі досвед у гэтай галіне. Але гэта толькі меркаванне, сітуацыя стане больш зразумелай ужо на самой канферэнцыі. Так ці інакш, дзякуй за тое, што аддалі нам час. Я ўпэўнены, інтэрвію будзе вельмі цікавым нашым чытачам. Дзякуй вялікі!

Віталь: Дзякуй. 

Майкл: Я буду рады сустрэцца з вамі ў Санкт-Пецярбургу. 

Аляксей: Мы таксама, у нас прыгожы горад. Вы тут калі-небудзь былі?

Майкл: Не, я ўвогуле ў Расіі ні разу не быў. Але Санкт-Пецярбург заўсёды ўваходзіў у спіс месцаў, дзе я яшчэ не быў, але дзе вельмі хачу пабываць, таму я вельмі ўзрадаваўся запрашэнню. 

Аляксей: Дарэчы, у нас будзе праграма экскурсій для дакладчыкаў. Дзякуй вялікі за інтэрв'ю, і удалага вам дня!

Працягнуць зносіны з Майклам можна будзе на канферэнцыі Hydra 2019, якая пройдзе 11-12 ліпеня 2019 года ў Санкт-Пецярбургу. Ён прыедзе з дакладам "Dual data structures". Білеты можна набыць на афіцыйным сайце.

Крыніца: habr.com

Дадаць каментар