- jako profesor informatyki na Uniwersytecie w Rochester, a na swoim macierzystym Uniwersytecie Wisconsin–Madison przez pięć lat był dziekanem. Prowadzi badania i naucza studentów na temat programowania równoległego i rozproszonego oraz projektowania języków.
Świat zna Michała z podręcznika , a co z pracą otrzymał Nagrodę Dijkstry jako jeden z najbardziej znanych w dziedzinie przetwarzania rozproszonego. Być może znacie go także jako autora tego samego algorytmu .
Razem z Dougiem Lee opracował algorytmy nieblokujące i kolejki synchroniczne, które zasilają biblioteki Java. Realizacja w JavaSE 6 poprawiła wydajność 10-krotnie ThreadPoolExecutor.
Spis treści:
- Początki kariery, Uniwersytet w Rochester. Projekt Charlotte, język Lynx;
- Skalowalny, spójny interfejs IEEE, blokowanie MCS;
- Przetrwanie w ciągle zmieniającym się świecie;
- Czy studenci są coraz głupsi? Światowe trendy, internacjonalizacja;
- Efektywna praca z uczniami;
- Jak nadążać za przygotowywaniem nowych kursów i książek;
- Powiązania biznesu ze środowiskiem akademickim;
- Praktyczna realizacja pomysłów. MCS, MS, CLH, JSR 166, współpraca z Dougiem Lee i nie tylko;
- Pamięć transakcyjna;
- Nowe architektury. Zwycięstwo pamięci transakcyjnej jest bliskie;
- Pamięć nieulotna, Optane DIMM, ultraszybkie urządzenia;
- Kolejny duży trend. Podwójne struktury danych. Hydra.
Wywiad prowadzi:
Witalij Aksenow — obecnie postdoc w IST Austria i członek Katedry Technologii Komputerowych na Uniwersytecie ITMO. Prowadzi badania z zakresu teorii i praktyki konkurencyjnych struktur danych. Przed pracą w IST uzyskał doktorat na Uniwersytecie Paris Diderot i Uniwersytecie ITMO pod kierunkiem profesora Petera Kuzniecowa.
Aleksiej Fiodorow - Producent w JUG Ru Group, rosyjskiej firmie organizującej konferencje dla deweloperów. Alexey brał udział w przygotowaniu ponad 50 konferencji, a jego życiorys obejmuje wszystko, od stanowiska inżyniera rozwoju w Oracle (JCK, Java Platform Group) po stanowisko programisty w Odnoklassnikach.
Włodzimierz Sitnikow - Inżynier w Netcrackerze. Dziesięć lat pracy nad wydajnością i skalowalnością NetCracker OS, oprogramowania wykorzystywanego przez operatorów telekomunikacyjnych do automatyzacji procesów zarządzania siecią i sprzętem sieciowym. Interesują mnie problemy wydajnościowe Java i Oracle Database. Autor kilkunastu ulepszeń wydajnościowych w oficjalnym sterowniku PostgreSQL JDBC.
Początki kariery, Uniwersytet w Rochester. Projekt Charlotte, język Lynx.
Alexey: Na początek chciałem powiedzieć, że w Rosji wszyscy naprawdę kochamy informatykę, analizę danych i algorytmy. To wręcz nieprzyzwoite. Przeczytaliśmy wszystko . Dlatego nadchodząca konferencja, szkoła i sam ten wywiad powinny cieszyć się dużym zainteresowaniem. Do wywiadu otrzymaliśmy wiele pytań od studentów, programistów i członków społeczności, dlatego jesteśmy bardzo wdzięczni za tę możliwość. Czy informatyka cieszy się taką samą miłością w USA?
Michael: Nasza dziedzina jest tak różnorodna, ma tak wiele kierunków i wpływa na społeczeństwo na tak wiele różnych sposobów, że trudno mi udzielić ostatecznej odpowiedzi. Ale faktem jest, że w ciągu ostatnich 30 lat przyniosło to ogromne zmiany w biznesie, przemyśle, sztuce i społeczeństwie w ogóle.
Виталий: Zacznijmy od czegoś odległego. Na wielu uniwersytetach istnieje coś w rodzaju specjalizacji w jednej konkretnej dziedzinie. Dla Uniwersytetu Carnegie Mellon jest to przetwarzanie równoległe, dla MIT to kryptografia, roboty i wielowątkowość. Czy na Uniwersytecie w Rochester istnieje taka specjalizacja?
Michael: Szczerze mówiąc, powiedziałbym, że CMU i MIT specjalizują się we wszystkich dziedzinach. Nasz dział zawsze największą wagę przywiązywał do sztucznej inteligencji. Połowa pracujących u nas osób zajmuje się sztuczną inteligencją, czyli interakcją człowiek-komputer – odsetek ten jest i jest wyższy niż w innych działach. Ale kiedy byłem na uniwersytecie, nie miałem żadnych kursów z AI i nigdy nie pracowałem w tej dziedzinie. Mój wydział specjalizuje się więc w problemie, z którym nie mam nic wspólnego. Pocieszeniem jest to, że drugim najważniejszym problemem naszego działu jest programowanie równoległe i wielowątkowe, czyli moja specjalizacja.
Виталий: Zacząłeś pracę w informatyce, gdy dopiero powstawała dziedzina programowania wielowątkowego. Z listy Twoich publikacji wynika, że Twoje pierwsze prace dotyczyły dość szerokiego spektrum zagadnień: zarządzania pamięcią w systemach wielowątkowych, rozproszonych systemów plików, systemów operacyjnych. Skąd taka wszechstronność? Czy próbowałeś znaleźć swoje miejsce w środowisku naukowym?
Michael: Jako student brałem udział w na Uniwersytecie Wisconsin, gdzie powstał jeden z pierwszych rozproszonych systemów operacyjnych. Tam współpracowałem z Rafaelem Finkelem () i Marvin Solomon (). Moja rozprawa doktorska poświęcona była opracowaniu języka oprogramowania systemowego dla systemów rozproszonych – teraz wszyscy o tym zapomnieli i dzięki Bogu. Stworzyłem język programowania Lynx, który miał ułatwić tworzenie serwerów dla luźno powiązanego rozproszonego systemu operacyjnego. Ponieważ w tamtym czasie zajmowałem się głównie systemami operacyjnymi, założyłem, że moja kariera będzie głównie z nimi związana. Jednak Rochester był bardzo małym uniwersytetem i z tego powodu różne tamtejsze grupy ściśle ze sobą współdziałały. Nie było tam kilkunastu innych osób zajmujących się systemami operacyjnymi, z którymi mógłbym porozmawiać, więc wszystkie moje kontakty dotyczyły ludzi, którzy pracowali w zupełnie innych obszarach. Bardzo mi się to podobało, bycie wszechstronnym zawodnikiem jest dla mnie dużą zaletą. Jeśli mówimy konkretnie o wielowątkowych strukturach danych i algorytmach synchronizacji, to pracę nad nimi zacząłem zupełnie przez przypadek.
Skalowalny, spójny interfejs IEEE, blokowanie MCS.
Виталий: Czy możesz mi powiedzieć coś więcej na ten temat?
Michael: To zabawna historia, którą zawsze opowiadam każdemu. Stało się to na konferencji w Bostonie – było to pod koniec lat 80. lub na początku 90. John Mellor-Crummey (), absolwentka naszego wydziału. Znałem go, ale wcześniej nie prowadziliśmy wspólnych badań. Mary Vernon () z Wisconsin wygłosił wykład na temat systemu wieloprocesorowego, który opracowywali w Wisconsin: . Ten Multicube miał mechanizm synchronizacji na poziomie sprzętowym zwany Q on Sync Bit, a później został przemianowany na Q on Lock Bit, ponieważ brzmiał jak ser Colby, co było grą słów. Jeśli interesują Cię mechanizmy wielowątkowe, prawdopodobnie wiesz, że Colby ostatecznie stał się silnikiem synchronizacji dla standardu IEEE Scalable Coherent Interface. Był to mechanizm blokujący, który tworzył wskaźniki z jednej pamięci podręcznej do drugiej na poziomie sprzętowym, dzięki czemu każdy posiadacz blokady wiedział, czyja jest kolej. Kiedy John i ja o tym usłyszeliśmy, spojrzeliśmy na siebie i powiedzieliśmy: po co to robić na poziomie sprzętowym? Czy tego samego nie można osiągnąć za pomocą porównania i zamiany? Wzięliśmy jeden z zeszytów leżących w klasie i bazgraliśmy na nim , podczas gdy Maria kontynuowała swój raport. Następnie wdrożyliśmy, poeksperymentowaliśmy, pomysł się sprawdził i opublikowaliśmy artykuł. Temat ten wydawał mi się wówczas po prostu zabawną odskocznią, po czym planowałem wrócić do systemów operacyjnych. Ale potem pojawił się inny podobny problem i ostatecznie synchronizacja, wielowątkowość i struktury danych stały się moją specjalnością. Jak widać, wszystko to wydarzyło się przez przypadek.
Виталий: Blokowanie MCS znam już od dawna, ale do tej pory nie wiedziałem, że to Twoje dzieło i nie rozumiałem, że to skrót od Waszych nazwisk.
Jak przetrwać w ciągle zmieniającym się świecie?
Alexey: Mam pytanie na pokrewny temat. 30 czy 40 lat temu w różnych specjalnościach było więcej swobody. Jeśli chcesz rozpocząć karierę w systemach wielowątkowych lub rozproszonych, nie ma problemu, jeśli chcesz zająć się systemami operacyjnymi, nie ma problemu. W każdym obszarze było wiele pytań otwartych i niewielu ekspertów. Pojawiły się obecnie wąskie specjalizacje: nie ma tylko ekspertów od systemów operacyjnych w ogóle, są specjaliści od poszczególnych systemów. Podobnie jest z systemami wielowątkowymi i rozproszonymi. Problem w tym, że nasze życie nie jest nieskończone; każdy może poświęcić na badania zaledwie kilka dekad. Jak przetrwać w tym nowym świecie?
Michael: Nie jesteśmy pod tym względem wyjątkowi; to samo zdarzyło się kiedyś w innych obszarach. Miałem szczęście, że zacząłem pracować w informatyce, gdy dziedzina ta była w „nastoletnim” wieku. Pewne fundamenty zostały już położone, ale wszystko było jeszcze bardzo niedojrzałe. Taka okazja nie trafia się często. Elektrotechnika istnieje od bardzo dawna, fizyka jeszcze dłużej, matematyka niemal od zarania dziejów. Nie oznacza to jednak, że nikt już nie dokonuje ciekawych odkryć w matematyce. Nadal istnieje wiele otwartych problemów, ale jednocześnie należy się więcej nauczyć. Masz rację, zauważając, że obecnie jest o wiele więcej specjalizacji niż wcześniej, ale oznacza to tylko, że znajdujemy się w tej samej sytuacji, co większość innych dziedzin ludzkiej działalności.
Alexey: Interesuje mnie bardziej praktyczny aspekt tej kwestii. Mam wykształcenie matematyczne, a podczas studiów często uczestniczyłem w konferencjach i pracowałem nad różnymi zagadnieniami naukowymi. Odkryłem, że nikt na widowni nie rozumiał moich relacji, tak samo relacje innych osób były zrozumiałe tylko dla nich samych. W tematach na wysokim poziomie tak się nie dzieje, ale gdy tylko zaczniesz się w coś zagłębiać, publiczność nie jest już w stanie za Tobą nadążać. Jak sobie z tym radzisz?
Michael: Nie zawsze się to udaje. Niedawno przygotowałem raport, w którym za bardzo wszedłem w szczegóły techniczne. W miarę upływu czasu stało się jasne, że większość słuchaczy mnie nie rozumie, więc musiałem na bieżąco dostosowywać się do sytuacji. Slajdów nie dało się zmienić, więc nie wyszło najlepiej - więc ogólnie rzecz biorąc, staram się nie używać slajdów. Ogólnie rzecz biorąc, radzę wziąć pod uwagę swoich odbiorców. Musisz wiedzieć, z kim rozmawiasz, jaki jest poziom jego wiedzy i co musi usłyszeć, aby docenić Twoją pracę.
Виталий: Czy mógłbyś nam podpowiedzieć, o czym był ten wykład?
Michael: Szczerze mówiąc, wolałbym nie rozwijać tego tematu, aby pozostawić anonimowe osoby. Chodzi o to, że często za bardzo zagłębiamy się w zawiłości problemu, nad którym pracujemy, przez co trudno nam na początku rozmowy wyjaśnić, dlaczego problem jest interesujący i ważny oraz jaki ma on związek z zagadnieniami, które porusza publiczność już wie. Z moich obserwacji wynika, że uczniom najtrudniej jest nauczyć się tej umiejętności. I to był także słaby punkt mojego ostatniego sprawozdania. Odpowiednio skonstruowany raport powinien od samego początku znaleźć kontakt z odbiorcami, wyjaśnić im, na czym dokładnie polega problem i jaki ma on związek z już mu znanymi tematami. To, jak techniczne będzie to wprowadzenie, zależy od odbiorców. Jeśli jest całkowicie pstrokaty, raport może być wieloetapowy. Wprowadzenie powinno być przystępne dla każdego, a pod koniec utwór może nie dotrzymać Ci kroku, ale osoby stosunkowo zaznajomione z Twoją dziedziną będą w stanie to rozgryźć.
Czy studenci są coraz głupsi? Światowe trendy, internacjonalizacja.
Alexey: Obserwujesz uczniów od kilkudziesięciu lat. Czy uczniowie stają się głupsi lub mądrzejsi z dekady na dekadę lub z roku na rok? W Rosji profesorowie nieustannie narzekają, że studenci z roku na rok są coraz głupsi, i naprawdę nie wiadomo, co z tym zrobić.
Michael: Naprawdę można usłyszeć wiele negatywnych słów od nas, starych ludzi. Podświadomie mamy tendencję do oczekiwania, że studenci przyswoją sobie całe 30-letnie doświadczenie, które już posiadamy. Jeśli mam głębsze zrozumienie niż w 1985 roku, dlaczego nie mają go uczniowie? Pewnie dlatego, że mają po 20 lat, co o tym sądzicie? Myślę, że najbardziej znaczące zmiany, jakie zaszły w ostatnich dziesięcioleciach, dotyczyły składu demograficznego: obecnie mamy znacznie więcej studentów zagranicznych, z wyjątkiem Kanadyjczyków. Kiedyś było wielu Kanadyjczyków, ponieważ jesteśmy bardzo blisko granicy z Kanadą, a stamtąd studenci mogą wracać do domu w weekendy. Ale teraz w Kanadzie jest wiele dobrych uniwersytetów, a Kanadyjczycy wolą tu studiować, znacznie mniej z nich przyjeżdża do USA;
Alexey: Czy uważa Pan, że jest to trend lokalny czy globalny?
Michael: Nie pamiętam dokładnie kto, ale ktoś powiedział, że świat jest płaski. Nasza dziedzina stała się znacznie bardziej międzynarodowa. Wcześniej odbywały się one wyłącznie na terenie Stanów Zjednoczonych, następnie zdecydowano się organizować je raz na 4 lata w innych krajach, a obecnie odbywają się na całym świecie. Zmiany te dotknęły jeszcze bardziej , ponieważ zawsze była organizacją bardziej międzynarodową niż ACM. Są też przewodniczący programów z Chin, Indii, Rosji, Niemiec i wielu innych krajów, bo teraz wszędzie dużo się dzieje.
Alexey: Ale prawdopodobnie istnieją pewne negatywne aspekty takiej internacjonalizacji?
Michael: Powiedziałbym, że wszystkie negatywne aspekty nie dotyczą technologii, ale polityki. Dawno, dawno temu głównym problemem był fakt, że USA kradły najmądrzejszych i najbardziej utalentowanych ludzi z krajów na całym świecie. A teraz głównym problemem są rozgrywki polityczne pomiędzy różnymi krajami wokół wiz i imigracji.
Alexey: To znaczy bariery i tym podobne. Jest jasne.
Władimir: Osobiście ciekawi mnie, jakie podejście przyjmujesz, ucząc uczniów nowego przedmiotu. Możliwości są różne: możesz przede wszystkim spróbować zainspirować ich do wypróbowania czegoś nowego lub możesz zwrócić większą uwagę na szczegóły działania danej technologii. Co wolisz?
Efektywna praca z uczniami
Alexey: A jak znaleźć cholerną równowagę pomiędzy pierwszym i drugim?
Michael: Problem w tym, że zajęcia nie zawsze idą tak, jak bym chciał. Zwykle daję uczniom materiały do przeczytania z wyprzedzeniem, aby się w nie zagłębili, zrozumieli najlepiej jak potrafią i sformułowali pytania dotyczące tych części, których nie mogli zrozumieć. Wtedy na zajęciach będziecie mogli skupić się na najtrudniejszych momentach i wspólnie je odkrywać. W ten sposób najbardziej lubię prowadzić zajęcia. Jednak biorąc pod uwagę obciążenie, jakie obecnie spoczywa na uczniach, nie zawsze jestem w stanie upewnić się, że przygotowali się z wyprzedzeniem. W rezultacie musisz poświęcić znacznie więcej czasu na ogólne powtórzenie materiału, niż byś chciał. Mimo to staram się, aby nasze zajęcia były interaktywne. W przeciwnym razie łatwiej jest nagrać film, który uczniowie będą mogli następnie obejrzeć w domu. Istotą zajęć na żywo jest interakcja międzyludzka. Na zajęciach wolę używać kredy i tablicy niż slajdów, z wyjątkiem niektórych przypadków, gdy diagram jest zbyt skomplikowany, aby przedstawić go na tablicy. Dzięki temu nie muszę trzymać się sztywnego planu zajęć. Ponieważ nie ma ścisłej kolejności przekazywania materiałów, pozwala mi to dostosować je do odbiorców w zależności od otrzymywanych pytań. Generalnie staram się, aby zajęcia były jak najbardziej interaktywne, tak aby prezentowany przeze mnie materiał był zależny od zadawanych mi pytań.
Władimir: Wspaniale. Z mojego doświadczenia wynika, że nakłonienie słuchaczy do zadawania pytań jest dość trudne. Nawet jeśli z wyprzedzeniem poprosisz o zadanie jakichkolwiek pytań, niezależnie od tego, jak głupie lub mądre będą, nadal milczą. Jak sobie z tym radzisz?
Michael: Będziesz się śmiać, ale jeśli wystarczająco długo będziesz stać w milczeniu, prędzej czy później wszyscy poczują się nieswojo i ktoś zada pytanie. Możesz też zadać proste pytanie techniczne, na które można odpowiedzieć „tak” lub „nie”, aby ustalić, czy ludzie rozumieją, co właśnie zostało powiedziane. Czy na przykład w powyższym przykładzie występuje wyścig danych? Kto tak uważa? Kto uważa, że nie? Kto w ogóle nic nie rozumie, bo w sumie tylko połowa rąk podniosła się do góry?
Виталий: A jeśli odpowiedziałeś niepoprawnie, zostajesz wyrzucony z zajęć :)
Michael: Jeśli na nic nie odpowiedziałeś, powinieneś zadać pytanie. Muszę wiedzieć, co dokładnie uczeń musi wiedzieć, aby odpowiedzieć na pytanie, które właśnie zadałem. Potrzebuję ich, żeby pomogli mi im pomóc. Jestem gotowy dostosować się do nich, aby zrozumieli problem. Ale jeśli nie wiem, co się dzieje w ich głowach, nie mogę tego zrobić. A jeśli przez długi czas nie da się uczniom spokoju, czasem w końcu zadają właściwe pytania, czyli takie, które pozwalają zobaczyć, co dokładnie dzieje się w głowach uczniów.
Alexey: Czy te pytania prowadzą czasami do pomysłów, o których wcześniej nie myślałeś? Czy są nieoczekiwane? Czy pozwalają spojrzeć na problem w nowym świetle?
Michael: Istnieją pytania, które otwierają nowy sposób prezentacji materiału. Często pojawiają się pytania, które prowadzą do interesujących problemów, o których nie planowałem rozmawiać. Studenci często mówią mi, że w takich sytuacjach mam tendencję do odbiegania od tematu. I według nich bardzo często jest to najciekawsza część lekcji. Bardzo rzadko, zaledwie kilka razy, studenci zadawali pytania, które wyznaczały nowy kierunek badań i przekształciły się w artykuł. Znacznie częściej zdarza się to w rozmowach ze studentami niż na zajęciach, ale czasami zdarzało się to także w trakcie zajęć.
Alexey: Czyli studenci zadali Panu pytania, na podstawie których można było potem opublikować artykuł?
Michael: Tak.
Виталий: Jak często prowadzisz takie rozmowy ze studentami? Kiedy chcą nauczyć się więcej niż zostało to omówione podczas lekcji?
Michael: Z moimi absolwentami - cały czas. Mam ich około 5 lub 6 i cały czas z nimi o czymś rozmawiamy. A rozmowy tego typu ze studentami, którzy po prostu uczęszczają na moje zajęcia, nie są zbyt częste. Chociaż chciałbym, żeby to zdarzało się częściej. Podejrzewam, że po prostu boją się przychodzić na wydział w godzinach pracy. W każdym semestrze niektórym studentom udaje się pokonać tę barierę psychologiczną, a rozmowy z nimi po zajęciach zawsze są bardzo interesujące. To prawda, że gdyby wszyscy uczniowie byli tak odważni, po prostu nie miałbym wystarczająco dużo czasu. Może więc wszystko działa jak należy.
Виталий: Jak udaje Ci się znaleźć czas na komunikację ze studentami? O ile wiem, w USA nauczyciele mają dużo pracy - ubiegają się o stypendia i tym podobne.
Michael: Szczerze mówiąc, praca ze studentami to aspekt mojej pracy, który sprawia mi największą przyjemność. Mam więc wystarczającą motywację do tego. Większość czasu, jaki spędzam w swoim biurze, poświęcam na wszelkiego rodzaju spotkania. Jest lato, więc mój grafik jest mniej napięty, ale w ciągu roku szkolnego codziennie od 9 do 17 mam wszystko spakowane. Prace badawcze, recenzje, granty - na to wszystko są tylko wieczory i weekendy.
Jak nadążać za przygotowywaniem nowych kursów i książek.
Alexey: Czy obecnie kontynuujesz nauczanie na kursach, które prowadzisz od dłuższego czasu? Coś w rodzaju wprowadzenia do informatyki.
Michael: Pierwsze co mi przychodzi na myśl to kurs języków programowania.
Alexey: Jak bardzo różni się dzisiejsza wersja tego kursu od tej sprzed 10, 20, 30 lat? Być może bardziej interesujące nie są tu szczegóły konkretnego kursu, ale ogólne trendy.
Michael: Mój kurs języków programowania był dość nietypowy w czasie, gdy go tworzyłem. Zacząłem ją czytać pod koniec lat 1980., zastępując mojego kolegę, Douga Baldwina (). Tematyka kursu była tylko skojarzona z moją specjalizacją, ale kiedy odchodził, byłem najlepszym kandydatem do prowadzenia kursu. Nie podobał mi się żaden z istniejących wówczas podręczników, więc ostatecznie sam napisałem podręcznik do tego kursu. (Nota redaktora: mówimy o książce) Jest obecnie stosowany na ponad 200 uniwersytetach na całym świecie. Moje podejście jest niezwykłe, ponieważ celowo łączy problemy projektowania i implementacji języka oraz przywiązuje dużą wagę do interakcji między tymi aspektami we wszystkich możliwych obszarach. Podstawowe podejście pozostało niezmienione, podobnie jak wiele podstawowych pojęć: abstrakcje, przestrzenie nazw, modułowość, typy. Ale zestaw języków, w których prezentowane są te koncepcje, całkowicie się zmienił. Kiedy kurs powstawał, było wiele przykładów w Pascalu, ale dziś wielu moich uczniów nawet nie słyszało o tym języku. Ale znają Swift, Go, Rust, więc muszę porozmawiać o językach, które są dziś używane. Ponadto studenci są teraz dobrze zaznajomieni z językami skryptowymi, ale kiedy zaczynałem prowadzić ten kurs, skupialiśmy się wyłącznie na językach kompilowanych. Teraz potrzebujemy dużo materiału na temat Pythona, Ruby'ego, a nawet Perla, ponieważ w dzisiejszych czasach tak się pisze kod, a w tych językach dzieje się wiele ciekawych rzeczy, także w dziedzinie projektowania języków.
Виталий: W takim razie moje następne pytanie będzie powiązane z poprzednim. Jak nadążać za tym obszarem? Podejrzewam, że aktualizacja takiego kursu wymaga dużo pracy - trzeba rozumieć nowe języki, rozumieć główne idee. Jak Ty to robisz?
Michael: Nie mogę się pochwalić, że zawsze udaje mi się to na 100%. Ale przez większość czasu robię to, co wszyscy inni – czytam Internet. Jeśli chcę zrozumieć Rusta, wyszukuję go w Google, wejdź na stronę Mozilli i przeczytaj zamieszczoną tam instrukcję. Jest to część rzeczy, które dzieją się w rozwoju komercyjnym. Jeśli mówimy o nauce, to trzeba śledzić doniesienia na głównych konferencjach.
Powiązanie biznesu ze środowiskiem akademickim
Виталий: Porozmawiajmy o powiązaniu biznesu z badaniami naukowymi. Na Twojej liście prac znalazłem kilka artykułów na temat spójności pamięci podręcznej. Rozumiem, że algorytmy spójności pamięci podręcznej były niestabilne w momencie ich publikacji? Albo nie jest wystarczająco rozpowszechniony. Jak powszechne były Twoje pomysły w praktyce?
Michael: Nie jestem do końca pewien, o których publikacjach mówisz. Wykonałem sporo pracy z moimi studentami, Billem Boloskym () i Leonidasa Kontotanassisa () na początku lat 1990. na temat zarządzania pamięcią maszyn Neumanna. W tamtym czasie biznes nie miał jeszcze wiedzy, jak poprawnie zbudować system wieloprocesorowy: czy warto stworzyć obsługę zdalnego dostępu do pamięci na poziomie sprzętowym, czy warto dystrybuować pamięć, czy można załadować pamięć podręczną z pamięć zdalna, czy konieczne jest przenoszenie stron w systemie sali operacyjnej? Zarówno Bill, jak i Leonidas pracowali w tym obszarze i badali podejścia bez zdalnego ładowania pamięci podręcznej. Nie było to bezpośrednio związane ze spójnością pamięci podręcznej, ale nadal były to prace nad zarządzaniem pamięcią NUMA, z których później wyrosły nowoczesne podejścia do rozmieszczania stron w nowoczesnych systemach operacyjnych. Ogólnie rzecz biorąc, Bill i Leonidas wykonali ważną pracę, choć nie najbardziej wpływową w tej dziedzinie – w tym czasie pracowało nad tym samym wiele innych osób. Później pracowałem nad tematem związanym ze spójnością pamięci podręcznej w kontekście sprzętowej pamięci transakcyjnej. Grupa, z którą pracowałem nad tym problemem, otrzymała kilka patentów. Kryje się za nimi kilka ciekawych pomysłów, ale nie sądzę, że zostaną one wdrożone w praktyce. Tak czy inaczej, trudno mi ocenić ich opłacalność.
Alexey: W związku z tym pytanie bardziej osobiste: jak ważne jest dla Ciebie, aby Twoje pomysły były wdrażane w praktyce? Albo nie myślisz o tym?
Michael: Uwielbiam zadawać to pytanie podczas rozmów kwalifikacyjnych z innymi osobami, kandydatami lub kandydatami chcącymi dołączyć do wydziału. Nie sądzę, że istnieje poprawna odpowiedź na to pytanie. Ludzie, którzy robią fajne rzeczy, mogą mieć bardzo różne motywacje. Problemy przyciągają mnie, ponieważ osobiście uważam je za interesujące, a nie ze względu na ich praktyczne korzyści. Ale z drugiej strony, gdy jakaś ciekawa rzecz wciąż znajduje zastosowanie, bardzo mi się to podoba. Więc nie jest tu łatwo. Ale na początku mojej pracy nadal nie kieruje mną idea końcowego zastosowania w świecie, ale harmonia tej idei i chęć jej zbadania i zobaczenia, co z tego wyniknie. Jeśli w efekcie da to praktyczne rezultaty, to świetnie.
Alexey: Dzięki Twojemu wykształceniu i doświadczeniu potrafisz lepiej niż większość ocenić wartość pomysłów innych ludzi. Możesz je porównać i określić, który z którym działa lepiej. Jestem pewien, że masz zdanie na temat rzeczy, które są obecnie stosowane w praktyce przez dużych producentów, takich jak Intel. Na ile, z Twojego punktu widzenia, kurs, jaki obierają te firmy, jest prawidłowy?
Michael: Praktyka zawsze kręci się wokół tego, co może odnieść sukces komercyjny, czyli wygenerować zysk, i lepiej zapytaj o to kogoś innego. Moja praca owocuje głównie publikacjami, a w zakresie systemów operacyjnych oceniane są one na podstawie wskaźników wydajnościowych: szybkości, zużycia energii, wielkości kodu. Ale zawsze wydawało mi się, że te wyniki empiryczne dodaje się do artykułów tylko po to, żeby można je było opublikować, a prawdziwe motywy ludzi do pracy są estetyczne. Badacze oceniają rozwiązania z perspektywy artystycznej, dbają o elegancję pomysłów i starają się stworzyć coś lepszego niż dotychczasowe podejścia. Badaczami kierują się motywy osobiste, subiektywne i estetyczne. Ale nie można o tym pisać w samym artykule; to nie są argumenty dla komisji programowej. Na szczęście eleganckie rozwiązania są często także szybkie i tanie. Kilkunastu moich kolegów i ja omawialiśmy ten temat około 15 lat temu i napisaliśmy na ten temat artykuł. Myślę, że nadal możesz go znaleźć, tak się nazywa czy coś w tym rodzaju, ma kilkunastu autorów. Jest to jedyny artykuł, którego jestem współautorem , więc jeśli poszukasz jej nazwiska na mojej liście publikacji, znajdziesz to, czego potrzebujesz. Mówi o ocenie badań systemowych i o tym, jak ważna jest elegancja.
Alexey: Istnieje więc różnica pomiędzy standardem tego, co uważa się za dobre w nauce, a w biznesie. Nauka ocenia wydajność, zużycie energii, TDP, łatwość wdrożenia i wiele więcej. Czy masz możliwość prowadzenia tego typu badań na uczelni? Czy masz laboratorium z różnymi maszynami i różnymi architekturami, w którym możesz przeprowadzać eksperymenty?
Michael: Tak, nasz dział ma wiele różnych interesujących maszyn. Najczęściej są małe, mamy mały klaster i wiele systemów wieloprocesorowych z różnymi akceleratorami. Ponadto na kampusie znajduje się ogromne centrum obliczeniowe, które służy naukowcom z kilkudziesięciu różnych dyscyplin. Ma około tysiąca węzłów i dwadzieścia tysięcy rdzeni, a wszystko to pod Linuksem. Jeśli zajdzie taka potrzeba, zawsze możesz kupić trochę AWS. Nie mamy więc żadnych znaczących ograniczeń sprzętowych.
Alexey: Jak to było trzydzieści lat temu? Czy były wtedy problemy?
Michael: Wtedy było trochę inaczej. Od połowy do końca lat 1980. XX wieku uważano, że nauce brakuje zasobów obliczeniowych. Aby zaradzić tej sytuacji, Narodowa Fundacja Nauki ) stworzył program skoordynowanych badań eksperymentalnych (Cooperative Experimental Research, CER). Misją programu było zapewnienie infrastruktury obliczeniowej dla wydziałów informatyki i udało mu się osiągnąć znaczącą zmianę. Za przekazane przez nią pieniądze my, studenci Uniwersytetu w Rochester, kupiliśmy w 1984 roku BBN Butterfly o prędkości 128 węzłów, czyli rok przed moim przyjazdem. Był to wówczas największy na świecie system wieloprocesorowy z pamięcią współdzieloną. Miał 128 procesorów, każdy na osobnej płycie głównej i zajmował cztery stojaki. Każdy procesor miał megabajt pamięci, 128 megabajtów pamięci RAM było wówczas niewyobrażalną ilością. Na tej maszynie po raz pierwszy wdrożyliśmy blokowanie MCS.
Alexey: Więc jeśli dobrze cię rozumiem, to w tej chwili problem ze sprzętem został rozwiązany?
Michael: Ogólnie rzecz biorąc, tak. Jest kilka zastrzeżeń: po pierwsze, jeśli zajmujesz się architekturą komputera na poziomie chipa, trudno to zrobić w środowisku akademickim, ponieważ istnieją znacznie lepsze narzędzia do robienia tego w biznesie. Jeśli potrzebujesz czegoś mniejszego niż 10 nanometrów, będziesz musiał zamówić to u kogoś innego. W tej dziedzinie znacznie łatwiej jest być badaczem w Intelu. Jeśli pracujesz nad komunikacją optyczną na chipach lub w pamięci półprzewodnikowej, w biznesie znajdziesz technologie, których jeszcze nie ma w nauce, więc musisz tworzyć sojusze. Na przykład Stephen Swanson () Utworzony dla nowych technologii pamięci. Ta forma nie zawsze działa, ale w niektórych przypadkach może być całkiem skuteczna. Ponadto rozwój najpotężniejszych systemów obliczeniowych w nauce jest trudniejszy. Największe projekty superkomputerowe realizowane obecnie w USA, Japonii i Chinach skupiają się na biznesie.
Praktyczna realizacja pomysłów. MCS, MS, CLH, JSR 166, współpraca z Dougiem Lee i nie tylko.
Виталий: Mówiłeś już o tym, jak zacząłeś pracować nad algorytmami synchronizacji. Masz dwa bardzo znane artykuły na temat и , które w pewnym sensie zostały zaimplementowane w Javie. (Nota redaktora: wszystkie publikacje można przeglądać ). Tam to blokowanie zostało wdrożone z pewnymi zmianami i okazało się , a kolejka została zaimplementowana zgodnie z założeniami. Ale od publikacji Pańskich artykułów do ich praktycznego zastosowania minęło wiele lat.
Alexey: Wydaje się, że w przypadku kolejki potrzeba około 10 lat.
Michael: Zanim te funkcje pojawiły się w standardowej bibliotece Java?
Виталий: Tak. Co zrobiłeś, żeby tak się stało? A może nic nie zrobili?
Michael: Mogę ci powiedzieć, jak MS Queue dostał się do Java 5. Kilka lat przed jej wydaniem współpracowałem z grupą Marka Moyersa w Sun Microsystems w ich laboratorium pod Bostonem. Zorganizował warsztaty dla znanych mu osób, które pracowały nad ciekawymi problemami związanymi z wielowątkowością, ponieważ chciał znaleźć tematy, które mógłby sprzedać ich firmie. Tam po raz pierwszy spotkałem Douga Leę. Doug, ja i około 25 innych osób z firmy Sun wspólnie omawialiśmy prezentację Douga , który później stał się java.util.concurrent. Po drodze Doug powiedział, że chciałby skorzystać z kolejki MS, ale do tego potrzebował licznika ilości elementów w kolejce dla interfejsu. Oznacza to, że należało to zrobić osobną metodą, atomową, dokładną i szybką. Zasugerowałem po prostu dodanie numerów seryjnych do węzłów, wzięcie numeru pierwszego i ostatniego węzła i odejmowanie jednego od drugiego. Doug podrapał się po głowie, powiedział „dlaczego nie” i tak właśnie zrobił. Omawialiśmy wdrożenie tego podejścia w bibliotece, ale Doug wykonał większość pracy sam. W rezultacie udało mu się stworzyć doskonałą obsługę wielowątkowości w Javie.
Alexey: Zatem, jeśli dobrze rozumiem, metoda .size() powinna być częścią standardowego interfejsu kolejki i powinna mieć złożoność algorytmiczną O(1)?
Michael: Tak, dodatkowo wymagany jest oddzielny licznik.
Alexey: Ponieważ jeśli wywołasz metodę .size() w Javie, oczekuje się, że wynik będzie dostępny natychmiast, a nie na podstawie rzeczywistego rozmiaru kolekcji. Widzę, dziękuję.
Michael: Kilka lat później pracowałem z moim studentem Billem Schererem nad podwójnymi strukturami danych - właściwie o tym będę mówił . Doug przyszedł do nas i powiedział, że mógłby je wykorzystać w Java Executor Framework. Razem z Billem stworzyli dwie implementacje, tzw. sprawiedliwe i nieuczciwe kolejki. Doradzałem im przy tym projekcie, chociaż nie brałem udziału w pisaniu samego kodu. W rezultacie prędkość executorów znacznie wzrosła.
Władimir: Czy napotkałeś nieprawidłowe implementacje swoich algorytmów lub prośby o dodanie nowych funkcji? Ogólnie rzecz biorąc, praktyka powinna pokrywać się z teorią, ale dość często się różnią. Załóżmy, że napisałeś algorytm i na papierze działa, ale osoby zaangażowane w implementację zaczęły prosić Cię o więcej funkcji lub jakieś ulepszenia algorytmu. Czy mieliście kiedyś takie sytuacje?
Michael: Jedynym przykładem, w którym ktoś przyszedł do mnie i zapytał „jak to wdrożyć”, było pytanie Douga, o którym już mówiłem. Jednak w kilku przypadkach wprowadzono interesujące zmiany, aby dostosować je do praktycznych potrzeb. Na przykład zespół K42 w IBM przekształcił blokadę MCS i uczynił z niej standardowy interfejs, dzięki czemu nie było potrzeby przekazywania węzła kolejki tam i z powrotem do procedur pobierania i zwalniania. Dzięki temu standardowemu interfejsowi pomysł, który był piękny w teorii, zaczął działać w praktyce. Zaskakujące jest to, że nigdy nie opublikowali o tym artykułu i chociaż otrzymali patent, później go porzucili. Pomysł był wspaniały i staram się o nim rozmawiać, kiedy tylko jest to możliwe.
Były też inne przypadki, w których ludzie wprowadzali ulepszenia w opublikowanych przeze mnie algorytmach. Przykładowo kolejka MS posiada dwuetapowy mechanizm instalacji, co oznaczało, że na ścieżce krytycznej kolejki znajdowały się dwa CAS. W starszych samochodach CAS były dość drogie. Intel i inni producenci całkiem niedawno je zoptymalizowali, ale kiedyś były to instrukcje 30-cyklowe, więc posiadanie więcej niż jednej na ścieżce krytycznej było niepożądane. W rezultacie opracowano inną kolejkę, podobną do kolejki MS, ale zawierającą tylko jedną niepodzielną operację na ścieżce krytycznej. Osiągnięto to dzięki temu, że w pewnym okresie czasu operacja mogła zająć czas O(n), a nie O(1). Było to mało prawdopodobne, ale możliwe. Stało się tak dlatego, że w pewnych momentach algorytm przemierzał kolejkę od początku do aktualnej pozycji w tej kolejce. Ogólnie algorytm okazał się bardzo udany. O ile mi wiadomo, nie jest on zbyt powszechnie stosowany, częściowo dlatego, że operacje atomowe wymagają znacznie mniej zasobów niż wcześniej. Ale pomysł był świetny. Bardzo podoba mi się także praca Dave'a Dice'a z Oracle. Wszystko, co robi, jest bardzo praktyczne i bardzo sprytnie posługuje się żelazem. Miał swój udział w większości algorytmów synchronizacji obsługujących NUMA i wielowątkowych strukturach danych.
Władimir: Kiedy piszesz algorytmy lub uczysz uczniów, wynik Twojej pracy nie jest od razu widoczny. Społeczność potrzebuje trochę czasu, aby zapoznać się np. z nowym artykułem. Nowy algorytm nie od razu znajduje zastosowanie.
Michael: Nie jest od razu jasne, czy artykuł będzie znaczący, czy nie. Myślę, że interesujące byłoby przestudiowanie artykułów, które zdobyły nagrody na konferencjach. Oznacza to, że spójrz na artykuły, które ludzie w komitetach programowych uważali kiedyś za najlepsze. Trzeba spróbować policzyć na podstawie liczby linków i wpływu na biznes, jak naprawdę wpływowe te artykuły okazały się za 10, 20, 25 lat. Wątpię, żeby istniała między nimi silna korelacja. Nie będzie to zero, ale najprawdopodobniej będzie znacznie słabsze, niż byśmy chcieli. Wiele pomysłów pozostaje przez długi czas niewykorzystanych, zanim staną się powszechne. Weźmy na przykład pamięć transakcyjną. Od opublikowania oryginalnego artykułu do chwili, gdy ludzie zaczęli z nim budować maszyny, minęło ponad 10 lat. A przed pojawieniem się tej pamięci w produktach komercyjnych - i wszystkich 20. Przez bardzo długi czas nikt nie zwracał uwagi na artykuł, a potem liczba linków do niego gwałtownie wzrosła. Trudno byłoby to z góry przewidzieć. Z drugiej strony, czasami pomysły znajdują natychmiastową realizację. Kilka lat temu napisałem artykuł z Joe Izraelevitzem dla DISC, w którym zaproponowałem nową formalną definicję ważności trwałych struktur danych, których można było używać po awarii komputera, na którym je uruchomiono. Artykuł spodobał mi się od samego początku, jednak okazał się znacznie bardziej popularny, niż się spodziewałem. Była używana przez kilka różnych grup i ostatecznie stała się standardową definicją struktur trwałości. Co oczywiście jest miłe.
Władimir: Czy są jakieś techniki, których używasz do oceniania? Czy w ogóle próbujesz oceniać swoje artykuły i swoich uczniów? Pod względem tego, czy osoba, którą uczyłeś, zmierza we właściwym kierunku.
Michael: Podobnie jak wszyscy, zwracam większą uwagę na to, co robię w danej chwili. Ponownie, jak wszyscy inni, od czasu do czasu sprawdzam Google Scholar, aby sprawdzić, czy moje wcześniejsze prace są cytowane, ale robię to raczej z ciekawości. Przeważnie jestem zaabsorbowany tym, co teraz robią moi uczniowie. Jeśli chodzi o ocenę aktualnej pracy, częścią jej są względy estetyczne, co jest eleganckie, a co nie. A na poziomie codziennym dużą rolę odgrywają pytania otwarte. Na przykład uczeń przychodzi do mnie z wykresem pewnych wyników, a my próbujemy zrozumieć, skąd wzięło się jakieś dziwne zachowanie wykresu. Ogólnie rzecz biorąc, w naszej pracy stale staramy się zrozumieć rzeczy, których jeszcze nie rozumiemy.
Pamięć transakcyjna
Виталий: Może porozmawiamy trochę o pamięci transakcyjnej?
Michael: Myślę, że warto choć trochę powiedzieć, bo włożyłem w to mnóstwo wysiłku. Jest to temat, na który mam więcej publikacji niż jakikolwiek inny. Ale jednocześnie, co dziwne, zawsze byłem bardzo sceptyczny wobec pamięci transakcyjnej. Moim zdaniem, (M. Herlihy, J. E. B. Moss) została opublikowana przed swoją epoką. Na początku lat 1990. zasugerowali, że pamięć transakcyjna może pomóc utalentowanym programistom w pracy nad wielowątkowymi strukturami danych, dzięki czemu zwykli programiści mogą następnie używać tych struktur jako bibliotek. Oznacza to, że byłoby to pomocne dla Douga Lee przy jego JSR 166. Jednak pamięć transakcyjna nie miała ułatwiać programowania wielowątkowego. Ale dokładnie tak zaczęto go postrzegać na początku XXI wieku, kiedy stał się powszechny. Reklamowano go jako sposób na rozwiązanie problemu programowania równoległego. Takie podejście zawsze wydawało mi się beznadziejne. Pamięć transakcyjna może jedynie ułatwić pisanie równoległych struktur danych. Wydaje mi się, że właśnie to osiągnęła.
O trudności pisania kodu wielowątkowego
Alexey: Bardzo interesujące. Wydaje się, że istnieje pewna bariera pomiędzy zwykłymi programistami a tymi, którzy potrafią pisać kod wielowątkowy. W zeszłym roku rozmawiałem kilka razy z ludźmi, którzy wdrażali jakieś ramy algorytmiczne. Na przykład z Martinem Thomsonem, a także z programistami pracującymi nad bibliotekami wielowątkowymi. (Nota wydawcy: Martin Thompson jest bardzo znanym programistą, napisał и . I on też ma na naszej konferencji Joker 2015, nagranie wideo . On jest taki sam tę konferencję także dostępny). Twierdzą, że głównym wyzwaniem jest sprawienie, aby algorytmy były zarówno szybkie, jak i łatwe w użyciu. Oznacza to, że starają się pokonać tę barierę i przyciągnąć jak najwięcej osób do tego obszaru. Co o tym myślisz?
Michael: To jest główny problem wielowątkowości: jak osiągnąć wysoką wydajność bez zwiększania złożoności systemu.
Alexey: Ponieważ gdy próbują uniknąć złożoności, algorytm staje się mniej uniwersalny.
Michael: Kluczem są tutaj odpowiednio zaprojektowane abstrakcje. Wydaje mi się, że jest to generalnie najważniejsza sprawa w przypadku systemów komputerowych jako dziedziny. Butler Lampson lubi używać tego terminu i nazywa nas „kupcami abstrakcji”. Proste technologie dzisiaj nie istnieją. Procesory, których używamy, mają 10 miliardów tranzystorów – o prostocie nie ma mowy. Jednocześnie ISA jest znacznie prostszy niż procesor, ponieważ bardzo długo pracowaliśmy, aby zapewnić mu wysoką wydajność i stosunkowo prosty interfejs. Ale z nią też nie wszystko idzie gładko. Ten sam problem jest z akceleratorami, które obecnie pojawiają się na rynku. Pojawiają się pytania - jak zrobić odpowiedni interfejs dla GPU, mechanizm szyfrowania, kompresji, mechanizm transkodowania, mechanizm algebry liniowej, czy nawet bardziej elastyczny FPGA. Jak stworzyć interfejs, który sprawi, że narzędzie będzie proste w obsłudze, a jednocześnie skryje złożoność? Nie pozbędzie się go, a raczej ukryje przed prostym programistą.
Alexey: O ile rozumiem, nadal mamy barierę w rozumieniu abstrakcji. Weźmy model pamięci; na naszym etapie rozwoju nauki i technologii jest to jedna z głównych abstrakcji. Dzięki temu wszyscy programiści dzielą się na dwie grupy: większa część to ci, którzy tego nie rozumieją, a mniejsza część to ci, którzy rozumieją lub myślą, że rozumieją.
Michael: To dobre pytanie – czy ktoś z nas naprawdę rozumie model pamięci?
Виталий: Zwłaszcza w C++.
Michael: Porozmawiaj czasem z Hansem Boehmem. To jeden z najmądrzejszych ludzi, jakich znam, czołowy ekspert w dziedzinie modeli pamięci. Od razu Ci powie, że wielu rzeczy nie rozumie. Jeśli jednak wrócimy do kwestii abstrakcji, to moim zdaniem wyrażona została najważniejsza idea w dziedzinie modeli pamięci na przestrzeni ostatnich 30 lat . (Nota wydawcy: dostępna jest pełna lista publikacji ).
Alexey: Moje pytanie brzmi: czy ta bariera wynika z samej natury koncepcji?
Michael: NIE. Sarita doszła do wniosku, że przy odpowiednim podejściu można skutecznie ukryć całą złożoność, uzyskać wysoką wydajność i dać programiście proste API. A jeśli zastosujesz ten interfejs API, możesz osiągnąć spójną spójność. Myślę, że to właściwy model. Pisz kod bez wyścigów danych i uzyskaj spójność sekwencyjną. Oczywiście, aby zmniejszyć prawdopodobieństwo wyścigów, potrzebne są specjalne narzędzia, ale to inna sprawa.
Władimir: Czy były takie momenty w Twojej karierze, kiedy problem, który wydawał się rozwiązany, nagle przerodził się w katastrofę lub okazało się, że tego problemu nie da się rozwiązać? Na przykład teoretycznie można rozłożyć na czynniki dowolną liczbę lub ustalić, czy dana liczba jest pierwsza. Jednak w praktyce może to być trudne; przy obecnym sprzęcie trudno jest uwzględnić liczby. Czy przydarzyło Ci się coś podobnego?
Michael: Nie od razu przypominam sobie coś takiego. Były momenty, kiedy wydawało mi się, że w danym obszarze nie ma już nic do roboty, ale potem działo się tam coś nowego i interesującego. Myślałem na przykład, że obszar nieograniczonych kolejek osiągnął już dojrzałość. Po kilku ulepszeniach kolejki MNS nic wielkiego się już nie działo. A potem wymyślili Morrison (Adam Morrison) i Afek (Yehuda Afek). . Stało się jasne, że możliwa jest nieograniczona wielowątkowa kolejka, w której przez większość czasu na ścieżce krytycznej znajduje się jedynie instrukcja pobierania i zwiększania. Umożliwiło to osiągnięcie o rząd wielkości lepszej wydajności. Nie oznacza to, że nie wiemy, że pobieranie i inkrementacja jest bardzo przydatną rzeczą. Pisał o tym Eric Freudenthal w swojej pracy nad Ultrakomputerem z Allanem Gottliebem pod koniec lat 1980., ale chodziło o ograniczone kolejki. Morrison i Afek byli w stanie używać pobierania i zwiększania w nieograniczonej kolejce.
Nowe architektury. Czy zwycięstwo pamięci transakcyjnej jest bliskie?
Władimir: Szukasz nowych rozwiązań architektonicznych, które mogłyby być przydatne dla algorytmów?
Michael: Oczywiście jest wiele rzeczy, które chciałbym, aby zostały wdrożone.
Władimir: Jakiego na przykład?
Michael: Przede wszystkim kilka prostych rozszerzeń naszej pamięci transakcyjnej na poziomie sprzętowym w procesorach Intel i IBM. W szczególności chciałbym, aby nietransakcyjne obciążenie i magazyn, które właśnie wystąpiły, były natychmiast dostępne w ramach transakcji. Natychmiast prowadzą do pętli w sekwencji, która wydarzyła się wcześniej, więc mogą być trudne. Jeśli jednak zachowasz warstwy abstrakcji, istnieje wiele bardzo interesujących rzeczy, które możesz zrobić poza transakcją w jej trakcie. Nie wiem, jak trudne byłoby to wdrożenie, ale byłoby bardzo przydatne.
Kolejną przydatną rzeczą jest ładowanie pamięci podręcznej z pamięci zdalnej. Myślę, że prędzej czy później uda się to zrobić. Technologia ta umożliwi tworzenie systemów z pamięcią zdezagregowaną. Można byłoby przechowywać w szafie powiedzmy 100 terabajtów pamięci nieulotnej, a system operacyjny sam dynamicznie decydowałby, które sekcje tej pamięci powinny odpowiadać fizycznej przestrzeni adresowej procesorów. Byłoby to niezwykle przydatne w przypadku przetwarzania w chmurze, ponieważ umożliwiłoby zapewnienie dużej ilości pamięci dla zadań, które jej potrzebują. Myślę, że ktoś to zrobi.
Виталий: Kończąc dyskusję na temat pamięci transakcyjnej, mam jeszcze jedno pytanie na ten temat. Czy pamięć transakcyjna zastąpi w końcu standardowe wielowątkowe struktury danych?
Michael: NIE. Transakcje są mechanizmem spekulacyjnym. Na poziomie programowania są to zamki atomowe, ale wewnątrz są to spekulacje. Takie prognozowanie działa, jeśli większość domysłów jest prawidłowa. Dlatego pamięć transakcyjna działa dobrze, gdy wątki prawie nie wchodzą ze sobą w interakcje, a wystarczy tylko upewnić się, że nie ma żadnych interakcji. Ale jeśli wiadomość zaczyna się między wątkami, transakcje są mało przydatne. Pozwólcie, że wyjaśnię, mówimy o przypadku, gdy transakcje są owinięte wokół całej operacji atomowej. Nadal można je z powodzeniem stosować jako komponenty wielowątkowych struktur danych. Na przykład, jeśli potrzebujesz trzywyrazowego CAS i potrzebujesz wielowątkowego trzech małych rzeczy w środku prawdziwie wielowątkowego algorytmu, który działa z dwudziestoma wątkami jednocześnie. Generalnie transakcje mogą być przydatne, ale nie wyeliminują konieczności odpowiedniego projektowania wielowątkowych struktur danych.
Pamięć nieulotna, Optane DIMM, ultraszybkie urządzenia.
Виталий: Ostatnią rzeczą, o której chciałbym porozmawiać, jest temat Twoich aktualnych badań: pamięć nieulotna. Czego możemy się spodziewać w tym obszarze w najbliższej przyszłości? Być może znasz jakieś skuteczne wdrożenia, które już istnieją?
Michael: Nie jestem specjalistą od sprzętu, wiem tylko to, co przeczytałem w wiadomościach i co mówią mi koledzy. O tym, że Intel sprzedaje, słyszał już każdy , które mają około 3 razy większe opóźnienie odczytu i 10 razy większe opóźnienie zapisu niż dynamiczna pamięć RAM. Wkrótce będą dostępne w bardzo dużych wersjach objętościowych. Zabawnie jest pomyśleć, że można mieć laptopa z kilkoma terabajtami adresowalnej bajtowo pamięci RAM. Jest prawdopodobne, że za 10 lat zdecydujemy się na zastosowanie tej nowej technologii, ponieważ używamy DRAM - wystarczy zwiększyć głośność. Ale dzięki niezależności energetycznej otwierają się przed nami zupełnie nowe możliwości. Możemy zasadniczo zmienić stos pamięci, tak aby nie było rozdziału między pamięcią roboczą adresowalną bajtowo a pamięcią trwałą o strukturze blokowej. Dzięki temu nie będziemy musieli serializować wszystkiego, co należy przenieść z jednego programu do drugiego, do plików o strukturze blokowej. Z tego możemy wyprowadzić wiele ważnych zasad mających wpływ na systemy operacyjne, środowiska wykonawcze i rozproszone magazyny danych. Praca w tym obszarze jest bardzo interesująca. Osobiście trudno mi przewidzieć, do czego to wszystko doprowadzi, ale problemy tutaj są niezwykle zabawne. Mogą tu nastąpić rewolucyjne zmiany, które w bardzo naturalny sposób wynikają z prac nad wielowątkowością, gdyż usuwanie awarii jest procesem „wielowątkowym” obok normalnej pracy systemu.
Drugim głównym tematem, nad którym obecnie pracuję, jest zarządzanie ultraszybkimi urządzeniami i bezpieczny dostęp do urządzeń z przestrzeni użytkownika z systemową kontrolą polityk. W ostatnich latach można zaobserwować trend przenoszenia dostępu do urządzenia do przestrzeni użytkownika. Dzieje się tak, ponieważ stos jądra TCP-IP nie może działać na interfejsie sieciowym, który potrzebuje nowego pakietu co 5 mikrosekund; po prostu nie nadąża. Dlatego producenci zapewniają bezpośredni dostęp do urządzeń. Oznacza to jednak, że system operacyjny traci kontrolę nad procesem i nie może zapewnić odpowiedniego dostępu do urządzenia konkurencyjnym aplikacjom. Nasz zespół badawczy uważa, że tej wady można uniknąć. W tym miesiącu umieścimy artykuł na ten temat w USENIX ATC. Wiąże się to z pracą nad trwałością, ponieważ długożyciowa pamięć trwała adresowalna bajtowo jest w istocie urządzeniem z ultraszybkimi wejściami/wyjściami, do których należy uzyskać dostęp w przestrzeni użytkownika. Badania te umożliwiają nowe podejście do mikrojąder, egzokerneli i innych tradycyjnych prób bezpiecznego przenoszenia funkcjonalności z jądra systemu operacyjnego do przestrzeni użytkownika.
Władimir: Pamięć adresowalna bajtowo jest świetna, ale istnieje fizyczne ograniczenie - prędkość światła. Oznacza to, że nieuchronnie wystąpi opóźnienie w interakcji z urządzeniem.
Michael: Całkowita racja.
Władimir: Czy będzie wystarczająca pojemność, aby poradzić sobie z nowymi obciążeniami?
Michael: To doskonałe pytanie, ale trudno będzie mi na nie odpowiedzieć. Pomysł przetwarzania w pamięci istnieje już od dłuższego czasu, jest bardzo interesujący, ale także bardzo złożony. Nie pracowałem w tej dziedzinie, ale byłoby wspaniale, gdyby dokonano tam jakichś odkryć. Obawiam się, że nie mam nic więcej do dodania.
Władimir: Jest jeszcze jeden problem. Nowe, znacznie większe ilości pamięci RAM nie będą w stanie zmieścić się w procesorze. Dlatego ze względu na ograniczenia fizyczne ta pamięć RAM musi być izolowana.
Michael: Wszystko zależy od ilości wad w produkcji układów scalonych. Gdyby udało się stworzyć płytki półprzewodnikowe całkowicie pozbawione wad, wówczas dałoby się z nich zrobić cały mikroukład. Ale teraz nie wiemy, jak zrobić mikroukłady większe niż znaczki pocztowe.
Władimir: Ale wciąż mówimy o ogromnych rozmiarach, o centymetrach. To nieuchronnie ma wpływ na opóźnienia.
Michael: Tak. Na prędkość światła nie można nic poradzić.
Władimir: Niestety.
Kolejny duży trend. Podwójne struktury danych. Hydra.
Виталий: O ile rozumiem, bardzo szybko wychwytujesz nowe trendy. Byłeś jednym z pierwszych, którzy pracowali nad pamięcią transakcyjną i jednym z pierwszych, którzy pracowali nad pamięcią nieulotną. Jak myślisz, jaki będzie kolejny duży trend? A może to tajemnica?
Michael: Szczerze mówiąc, nie wiem. Mam nadzieję, że zauważę, gdy pojawi się coś nowego. Nie miałem szczęścia wymyślić samodzielnie żadnej nowej dziedziny, ale miałem trochę szczęścia i udało mi się dość wcześnie rozpocząć pracę w nowych dziedzinach stworzonych przez innych. Mam nadzieję, że uda mi się to zrobić w przyszłości.
Alexey: Ostatnie pytanie w tym wywiadzie będzie dotyczyło twoich występów w Hydrze i twoich zajęć w szkole. Jeśli dobrze rozumiem, raport w szkole będzie dotyczył algorytmów bez blokowania, a na konferencji o podwójnych strukturach danych. Czy mógłbyś powiedzieć kilka słów na temat tych raportów?
Michael: Częściowo poruszaliśmy już te tematy z Państwem w tym wywiadzie. Chodzi o pracę, którą wykonałem z moim studentem Billem Schererem. Napisał na ten temat pracę magisterską, a Doug Lee również się do tego przyczynił i ostatecznie stał się on częścią wielowątkowych kolejek synchronicznych w bibliotece Java. Załóżmy, że struktura danych jest odczytywana i zapisywana bez blokowania, czyli każda operacja ma ograniczoną liczbę instrukcji na ścieżce krytycznej. Jeżeli spróbujesz usunąć dane z pustego kontenera lub spróbujesz usunąć pewne dane, których w tym kontenerze nie ma, od razu zostaniesz poinformowany, że nie da się tego zrobić. Ale to zachowanie może być nie do zaakceptowania, jeśli wątek naprawdę potrzebuje tych danych. Wtedy pierwsze co przychodzi na myśl to stworzenie pętli, która będzie stale pytała czy pojawiły się potrzebne dane. Ale wtedy następuje interferencja dla wszystkich innych. Dodatkowo przy takim podejściu można poczekać 10 minut, a potem przyjdzie jakiś inny wątek i niechcący najpierw otrzyma potrzebne dane. Podwójne struktury danych nadal nie mają blokad, ale pozwalają wątkom prawidłowo czekać. Termin „podwójny” oznacza, że struktura zawiera albo dane, albo żądania danych, nazwijmy je antydanymi. Jeśli więc spróbujesz pobrać coś z pustego kontenera, zamiast tego do kontenera zostanie umieszczone żądanie. Teraz wątek może czekać na żądanie, nie przeszkadzając nikomu innemu. Dodatkowo struktura danych przypisuje priorytety żądaniom, aby po ich otrzymaniu przekazała je właściwej osobie. Rezultatem jest mechanizm bez blokady, który nadal ma formalną specyfikację i dobre działanie w praktyce.
Alexey: Jakie są Twoje oczekiwania w stosunku do tej struktury danych? Czy poprawi wydajność we wszystkich typowych przypadkach, czy też będzie lepiej dostosowany do niektórych sytuacji?
Michael: Przydaje się, jeśli po pierwsze potrzebujesz kontenera bez blokady, a po drugie musisz poczekać w sytuacji, gdy będziesz musiał pobrać dane z kontenera, którego w nim nie ma. O ile mi wiadomo, nasz framework zapewnia optymalne zachowanie, gdy spełnione są te dwa warunki. Dlatego w takich przypadkach polecam go używać. Główną zaletą bezblokadowych struktur danych jest to, że pozwalają uniknąć problemów z wydajnością. A czekanie jest bardzo ważne w wielu algorytmach, jeśli dane są przesyłane z jednego wątku do drugiego.
Виталий: Wyjaśnię: czy będziesz mówił o tym samym zarówno w szkole, jak i na konferencji?
Michael: W szkole ogólnie o wielowątkowych strukturach danych, z podstawowymi zasadami przedstawionymi na początku lekcji. Zakładam, że odbiorcy wiedzą, co to są wątki i znają zamki. W oparciu o tę podstawową wiedzę omówię struktury danych bez blokad. Przedstawię przegląd najważniejszych problemów w tym obszarze, poruszając takie tematy jak zarządzanie pamięcią. Myślę, że nie będzie nic bardziej skomplikowanego niż kolejka MS.
Alexey: Czy planujesz uczyć o podwójnych strukturach danych pod koniec zajęć w szkole?
Michael: Wspomnę o nich, ale nie poświęcę im zbyt wiele czasu. Im poświęcony będzie raport Hydry. Omówi projekt, który ostatecznie trafił do języka Java, a także współpracę z Joe Israelevichem nad stworzeniem podwójnego wariantu kolejki LCRQ i stworzeniem niemal uniwersalnego projektu dla podwójnych struktur danych.
Alexey: Czyli wykład w szkole można polecić początkującym, a wykład o podwójnych strukturach danych na Hydrze - osobom, które mają już pewne doświadczenie?
Michael: Popraw mnie, jeśli się mylę, ale publiczność Hydry będzie dość zróżnicowana, w tym wielu ekspertów w dziedzinie Java i ogólnie ludzie, którzy nie są szczególnie zaangażowani w programowanie wielowątkowe.
Виталий: Tak to jest prawda.
Alexey: Przynajmniej mamy taką nadzieję.
Michael: W tym przypadku stanę przed tym samym problemem, od którego rozpoczęliśmy ten wywiad: jak przygotować reportaż wystarczająco bogaty w szczegóły techniczne i przystępny dla wszystkich słuchaczy.
Виталий: Czy będziesz składał sprawozdania w taki sam sposób, w jaki prowadzisz wykłady? To znaczy rozmawiać z publicznością i dostosowywać się do sytuacji?
Michael: Obawiam się, że tak nie będzie, bo w raporcie będą slajdy. Slajdy są ważne, gdy słuchacze początkowo mówią różnymi językami. Wiele osób będzie miało trudności ze zrozumieniem mnie po angielsku, zwłaszcza jeśli mówię zbyt szybko. Wybrałem te tematy, ponieważ poprosił mnie, abym opowiedział o strukturach danych wolnych od blokad w szkole SPTDC; a potem potrzebowałem raportu na konferencję grupy użytkowników Java i chciałem wybrać coś, co byłoby interesujące szczególnie dla programistów Java. Najłatwiej było porozmawiać o tych rzeczach w bibliotece Java, z którymi w ten czy inny sposób miałem do czynienia.
Alexey: Zakładamy, że publiczność na Hydrze wie już coś o programowaniu bez blokad i być może ma pewne doświadczenie w tej dziedzinie. To jednak tylko przypuszczenia; sytuacja wyjaśni się już na samej konferencji. W każdym razie, dziękuję za poświęcony czas. Jestem pewien, że wywiad będzie bardzo interesujący dla naszych czytelników. Wielkie dzięki!
Виталий: Dziękuję.
Michael: Z przyjemnością spotkam się z Tobą w Petersburgu.
Alexey: My też, mamy piękne miasto. Czy kiedykolwiek tutaj byłeś?
Michael: Nie, nigdy nie byłem w Rosji. Ale Petersburg zawsze był na liście miejsc, w których jeszcze nie byłam, ale bardzo chcę pojechać, dlatego bardzo ucieszyłam się z zaproszenia.
Alexey: Przy okazji, będziemy mieli program wycieczek dla prelegentów. Dziękuję bardzo za rozmowę i życzę miłego dnia!
Rozmowę z Michałem będziesz mógł kontynuować na konferencji Hydra 2019, która odbędzie się w dniach 11-12 lipca 2019 r. w St. Petersburgu. Przyjdzie z raportem . Bilety można kupić .
Źródło: www.habr.com
