-
1. Data: 2016-06-07 22:34:05
Temat: GC z uzyciem SLAT
Od: Sebastian Biały <h...@p...onet.pl>
Cześć.
Taka ciekawostka:
http://www.scs.stanford.edu/~dm/home/papers/belay:du
ne.pdf
Mozna tam doczytać o tym że wykorzystując cechy cpu takie jak pagetables
można przyspieszyć GC (acz dokumenty na które się powołuja jakoś
niespecjalnie są o tym ;).
OK, moje pytanie jest nieco z boku. Wyobraźmy sobie że chcemy napisać
bardzo prosty Hypervisior którego jedynym zadaniem jest zarzadzanie
pamięcią w taki sposób:
fizyczna -> wirtualna -> wirtualna#2
Współcześnie dostepne sa mechanizmy SLAT[1] na procesorach Intela i AMD
które de facto pozwalają wirtualizować wirtualną pamięć. Potrzebne to do
dużych hypervisorów.
A moje pytanie jest następujące: czy ktoś wie czy mozna wykorzystać SLAT
będąc zwykłym procesem w przestrzeni usera do wirtualizacji *własnej*
pamięci? Wyobrażam sobie to tak że mój proces startuje, hypervisor
dostarcza hyper_alloc, hyper_free i od tej pory reszta kodu korzystając
z nich przechodzi przez SLAT.
Cele sa dwa:
a) coś na kształt natychmiastowego GC w osobnym watku (hypervisor
zabiera pamięć, deallokuje ją w systemie asynchronicznie jednocześnie
zapewniając natychmiastowy czysty page z innego miejsca)
b) save/restore - skoro mam kontrolę nad adresami pamięci virtualna#2 to
w zasadzie możliwe bylo by zapisanie tej pamięci ze wskaźnikami a
nastepnie odczytanie w inne miejsce (randomizm allokacji systemu
operacyjnego) i przekonfigurowanie SLAT aby stały się znowu walidne.
Czytam o SLAT i jest malo informacji. Ponieważ Win8 ma wbudowany
hypervisor który wymaga SLAT i jakoś jest obsługiwany to pewnie to jest
możliwe. Jednak podstawowe pytanie brzmi: czy program w userspace może
używać SLAT bez sterowników, trybów administratora itp?
PS. Tak, wiem że nie da się przekazywać pointerów z virtualna#2 do api
systemu operacyjnego ale tak się sklada że algorytm (czysto
obliczeniowy) mieli wyłacznie pamięć i plik (którego interfejs do r/w
zapewnia mój hypervisor). Ewentualnie czy ktoś zna jakieś źrodło
informacji o SLAT z poziomu pisania hypervisorów :) ?
[1] https://en.wikipedia.org/wiki/Second_Level_Address_T
ranslation