Wprowadzono TinyKVM do wirtualizacji na poziomie pojedynczych procesów

Firma Varnish Software, opracowująca systemy do budowy sieci dostarczania i cache'owania treści, zaprezentowała otwarty projekt TinyKVM, rozwijający narzędzia do izolacji wykonania poszczególnych procesów przy użyciu hyperwizora KVM. Celem projektu jest stworzenie najszybszego systemu sandboxowej izolacji poszczególnych procesów, wykorzystującego wirtualizację sprzętową. Kod projektu napisany jest w językach C i C++, a jego dystrybucja odbywa się na licencji GPLv3 (dla tych, którzy nie mogą spełnić wymagań GPLv3, dostępna jest komercyjna licencja).

TinyKVM jest zaprojektowany do izolowanego uruchamiania dowolnych programów konsolowych dla systemu Linux z wydajnością zbliżoną do standardowego wykonania. Koszty wywołania każdego systemowego wywołania wynoszą około 2 mikrosekundy. Jako przykład zastosowania projektu wymienia się dodatkową izolację procesów w systemach cache'owania i przetwarzania zapytań webowych. TinyKVM został opracowany w celu zastąpienia emulatora libriscv, używanego do izolacji przetwarzania każdego zapytania webowego w platformie Varnish. Dodatkowo stworzono wersję biblioteki libvmod, umożliwiającą wykonywanie modułów dla Varnish z wykorzystaniem TinyKVM.

Wprowadzono TinyKVM do wirtualizacji na poziomie pojedynczych procesówWprowadzono TinyKVM do wirtualizacji na poziomie pojedynczych procesów

Podczas uruchamiania przy użyciu TinyKVM, kod maszynowy programów wykonuje się bez emulujących warstw na CPU i jest ograniczany przez API hyperwizora KVM, co pozwala wyeliminować koszty i osiągnąć wydajność zbliżoną do wykonania bez wirtualizacji. Główne możliwości TinyKVM to:

  • Ograniczenie maksymalnego czasu wykonania. Program może być wymuszenie zatrzymany po upływie limitu czasu, bez wywoływania obsługi sygnałów i wątków.
  • Ograniczenie zużycia pamięci.
  • Możliwość forkowania nieinicjalizowanych instancji maszyn wirtualnych z jednego zainicjalizowanego egzemplarza izolowanego programu. Kopie maszyn wirtualnych są tworzone w trybie copy-on-write, co znacznie oszczędza pamięć, przechowując tylko jeden egzemplarz wspólnych danych.
  • Procesy podrzędne mogą być resetowane do wcześniejszego stanu (na przykład, podrzędny obsługiwacz żądań http może wrócić do pierwotnego stanu po przetworzeniu każdego żądania, bez potrzeby ponownego uruchamiania). Instancja izolowanego procesu może również być zresetowana do stanu innej maszyny wirtualnej, a nie tej, z której została odgałęziona, ale w takim przypadku koszty będą wyższe, ponieważ konieczna będzie zmiana tabeli stron pamięci.
  • Możliwość tworzenia statycznych stron pamięci podczas inicjalizacji, nadających się nawet do zaawansowanych programów wykonawczych, takich jak w języku Go. W tym przypadku zmiany są dozwolone tylko dla stron, które są w trybie copy-on-write.
  • Wsparcie dla zdalnego debugowania przy użyciu GDB. Możliwa jest debugowanie w locie z wznowieniem wykonania.

Środowisko gościnne TinyKVM tworzy zredukowane jądro, chronione przed zmianami, zbudowane z włączeniem ochrony stron pamięci i wykorzystujące SMAP (Supervisor Mode Access Prevention) oraz SMEP (Supervisor Mode Execution Prevention) dla dodatkowej izolacji między jądrem a przestrzenią użytkownika. TinyKVM używa dużych stron pamięci (hugepage) w celu zwiększenia wydajności. Wywołania systemowe generowane przez programy są przechwytywane przez emulator i przekazywane do środowiska gospodarza (opóźnienie przetwarzania i translacji emulowanego wywołania wynosi około 2 mikrosekund). W samej maszynie wirtualnej nie są używane żadne sterowniki, wejście/wyjście ani wirtualne urządzenia.

Wprowadzono TinyKVM do wirtualizacji na poziomie pojedynczych procesów


Źródło: opennet.ru
Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster