Sprzętowo Wspomagany Wywóz Śmieci

Zastanawiałem się nad sposobami, w jaki języki funkcyjne mogą być bardziej powiązane bezpośrednio z ich sprzętem i zastanawiałem się nad wszelkimi sprzętowymi implementacjami garbage collection.

To znacznie przyspieszyłoby działanie, ponieważ sam sprzęt w domyśle obsługiwałby całą kolekcję, a nie środowisko uruchomieniowe.

Czy tak robiły LISP Machines? Czy były jakieś dalsze badania nad tym pomysłem? Czy to zbyt specyficzne dla domeny?

Myśli? Sprzeciw? Dyskutuj.

Author: Nicholas Mancuso , 2009-02-12

11 answers

Ze Względu Na zbiór pokoleniowy, muszę powiedzieć, że śledzenie i kopiowanie są , a nie ogromnymi wąskimi gardłami GC.

To, co pomogłoby, to wspomagane sprzętowo bariery odczytu, które eliminują potrzebę "stop the world" pauzy podczas skanowania stosu i znakowania sterty.

Azul Systems zrobił to: http://www.azulsystems.com/products/compute_appliance.htm Zaprezentowali w JavaOne, jak ich modyfikacje sprzętowe pozwoliły na całkowite bez przerwy GC.

Kolejną poprawą byłyby wspomagane sprzętowo bariery zapisu dla śledzenia zapamiętanych zestawów.

Generative GCs, a jeszcze bardziej dla G1 lub Garbage First, zmniejsz ilość sterty, którą muszą skanować, skanując tylko partycję i zachowując listę zapamiętanych zestawów wskaźników między partycjami.

Problem polega na tym, że za każdym razem, gdy mutator (wymyślne słowo na 'prawdziwy program') ustawia wskaźnik, musi również umieścić wpis w odpowiednim rememered set. Więc masz (mały) nad głową, nawet jeśli nie jesteś GCing. Jeśli możesz to zmniejszyć, zmniejszysz zarówno czas przerwy niezbędny dla GCing, jak i ogólną wydajność programu.

 13
Author: runT1ME,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-13 20:05:45
 5
Author: ja.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-09 07:29:59

Był artykuł o lambda the ultimate opisujący, jak potrzebny jest Menedżer pamięci wirtualnej z obsługą GC, aby mieć naprawdę wydajny GC, a mapowanie maszyn wirtualnych jest obecnie wykonywane głównie przez sprzęt. Tu jesteś:)

 4
Author: Nemanja Trifunovic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-12 17:06:41

Oczywistym rozwiązaniem było posiadanie wskaźników pamięci, które są większe od dostępnej pamięci RAM, na przykład 34-bitowe Wskaźniki na 32-bitowej maszynie. Możesz też użyć najwyższych 8 bitów 32-bitowej Maszyny, gdy masz tylko 16 MB PAMIĘCI RAM (2^24). Maszyny Oberon W ETH Zurich używały takiego schematu z dużym powodzeniem, dopóki RAM nie stał się zbyt tani. To było około 1994 roku, więc pomysł jest dość stary.

Daje to kilka bitów, w których można przechowywać stan obiektu (np. obiekt" i "właśnie dotknąłem tego obiektu"). Podczas robienia GC, preferuj obiekty z "to jest nowe" i unikaj "just touched".

To może rzeczywiście zobaczyć renesans, ponieważ nikt nie ma 2^64 bajtów pamięci RAM (=2^67 bitów; we wszechświecie jest około 10^80 ~ 2^240 atomów, więc może nie być możliwe, aby mieć tyle pamięci RAM kiedykolwiek ). Oznacza to, że możesz użyć kilku bitów w dzisiejszych maszynach , Jeśli maszyna wirtualna może powiedzieć systemowi operacyjnemu, jak zmapować pamięć.

 4
Author: Aaron Digulla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-13 08:20:57

Jesteś studentem, brzmi jak dobry temat na grant badawczy dla mnie. Przyjrzyj się projektowi FPGA i architekturze komputera istnieje wiele darmowych projektów procesorów dostępnych na http://www.opencores.org/

Garbage collection może być zaimplementowane jako zadanie w tle, jest już przeznaczone do pracy równoległej.

Pete

 4
Author: NoMoreZealots,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-15 03:27:02

Jestem prawie pewien, że niektóre prototypy powinny istnieć. Ale opracowanie i wyprodukowanie specyficznych funkcji sprzętu jest bardzo kosztowne. Bardzo długo zajęło wdrożenie MMU lub TLB na poziomie sprzętowym, które są dość łatwe do wdrożenia.

GC jest zbyt duży, aby można go było efektywnie zaimplementować na poziomie sprzętowym.

 2
Author: Jérôme,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-12 16:59:28

Starsze systemy sparc oznaczały pamięć ( 33 bity), która była użyteczna do oznaczania adresów. Nie pasuje dzisiaj ?

To pochodzi z ich LISP heritage IIRC.

Jeden z moich znajomych zbudował pokoleniowy GC, który oznaczał kradzież trochę od prymitywów. Zadziałało lepiej.

Więc tak, można to zrobić, ale nodody przeszkadza tagowanie rzeczy już.

Komentarze RunT1mes na temat sprzętowego wspomagania generacji GC są warte przeczytania.

Biorąc pod uwagę wystarczająco dużą tablicę bramek (na myśl przychodzi vertex-III) możliwe byłoby udoskonalenie MMU, które wspierało działania GC.

 2
Author: Tim Williscroft,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-13 00:39:59

Prawdopodobnie najistotniejszym fragmentem danych potrzebnych tutaj jest, ile czasu (procent czasu procesora) jest obecnie spędzany na wywóz śmieci? To może być żaden problem.

Jeśli to zrobimy, musimy wziąć pod uwagę, że sprzęt oszukuje pamięcią "za naszymi plecami". Myślę, że to byłby" kolejny wątek", w nowoczesnym mowie. Część pamięci może być niedostępna, gdyby była badana (może rozwiązywalna z pamięcią dwuportową), a na pewno jeśli hwgc ma się przenieść to musiałoby zablokować inne procesy, żeby im nie przeszkadzały. I zrobić to w sposób, który pasuje do architektury i języka(ów) w użyciu. Więc, tak, konkretna domena.

Zobacz, co się właśnie pojawiło... w innym poście ... Przeglądam log GC Javy.

 1
Author: gbarry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:00:21

Zakładam, że największym problemem są rejestry CPU i stos. Jedną z rzeczy, które musisz zrobić podczas GC, jest przemierzenie wszystkich wskaźników w systemie, co oznacza, że wiesz, czym są te wskaźniki. Jeśli jeden z tych wskaźników znajduje się obecnie w rejestrze procesora, musisz również go przemierzyć. Podobnie jeśli masz wskaźnik na stosie. Więc każda ramka stosu musi mieć jakąś mapę mówiącą, co jest wskaźnikiem, a co nie, a zanim wykonasz jakiś ruch GC, musisz zdobyć jakąkolwiek / align = "left" /

Napotkasz również problemy z zamknięciami i kontynuacjami, ponieważ nagle twój stos przestaje być prostą strukturą LIFO.

Oczywistym sposobem jest, aby nigdy nie trzymać wskaźników na stosie PROCESORA lub w rejestrach. Zamiast tego każda ramka stosu jest obiektem wskazującym na jej poprzednika. Ale to zabija wydajność.

 1
Author: Paul Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-12 22:26:12

Kilka wielkich umysłów w MIT w latach 80.stworzyło układ SCHEME-79, który bezpośrednio interpretował dialekt Scheme, został zaprojektowany z użyciem Lispu DSLs, i miał wbudowany sprzęt-GC.

Schemat - 79 die

 1
Author: Philip Conrad,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-28 21:42:13

Dlaczego miałoby to "przyspieszyć"? Co dokładnie powinien robić sprzęt? Nadal musi przemierzać wszystkie odniesienia między obiektami, co oznacza, że musi przepuszczać dużą część danych w pamięci głównej, co jest głównym powodem, dla którego wymaga to czasu. Co zyskasz przez to? Która konkretna operacja jest, że myślisz, że można zrobić szybciej ze wsparciem sprzętowym? Większość pracy w garbage collector to tylko podążanie za wskaźnikami/referencjami, a od czasu do czasu kopiowanie żywych obiektów z jedna kupa do drugiej. czym się to różni od instrukcji obsługiwanych przez procesor?

Mając to powiedziane, dlaczego myślisz, że potrzebujemy szybszego zbierania śmieci? Nowoczesny GC może być już bardzo szybki i wydajny, do tego stopnia, że jest to w zasadzie rozwiązany problem.

 0
Author: jalf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-12 16:58:09