Varnish Software, som utvecklar system för att bygga leveransnÀt och cache-lösningar för innehÄll, har presenterat det öppna projektet TinyKVM, som utvecklar verktyg för isolering av enskilda processers körning med hjÀlp av hypervisorn KVM. Projektets mÄl Àr att skapa det snabbaste sandbox-isolationssystemet för enskilda processer som anvÀnder hÄrdvaruvirtualisering. Projektets kod Àr skriven i C och C++ och distribueras under GPLv3-licensen (för dem som inte kan uppfylla krav pÄ GPLv3 finns en kommersiell licens tillgÀnglig).
TinyKVM Ă€r avsett för isolerad körning av alla konsolprogram för Linux med prestanda nĂ€ra normal körning. Ăverheaden för varje systemanrop Ă€r cirka 2 mikrosekunder. Som exempel pĂ„ anvĂ€ndning av projektet nĂ€mns ytterligare isolering av processer i cache- och webbförfrĂ„gningsbehandlingssystem. TinyKVM har utvecklats för att ersĂ€tta emulatorn libriscv, som anvĂ€nds för att isolera behandlingen av varje webbförfrĂ„gan i Varnish-plattformen. Dessutom har en variant av biblioteket libvmod skapats, vilket möjliggör modulutveckling till Varnish med hjĂ€lp av TinyKVM.


Vid körning med TinyKVM exekveras programmets maskinkod utan emulerande lager pÄ CPU och begrÀnsas via KVM-hypervisorens API, vilket gör att overheaden kan uteslutas och prestandan kan nÄ nivÄer nÀra prestandan utan virtualisering. Huvudfunktionerna i TinyKVM Àr:
- BegrÀnsning av maximal exekveringstid. Programmet kan tvÄngsstoppas efter att tidsgrÀnsen uppnÄtts, utan att signalhanterare och trÄdar kallas.
- BegrÀnsning av minnesanvÀndning.
- Möjlighet att skapa (forka) oinitierade instanser virtuella maskiner frÄn en initierad instans av det isolerade programmet. Kopior av virtuella maskiner skapas i copy-on-write-lÀge, vilket möjliggör avsevÀrda besparingar i minne genom att endast lagra en instans av gemensamma data.
- Forkade processer kan ÄterstÀllas till ett tidigare tillstÄnd (till exempel kan en forkad http-begÀrarprocessor ÄtergÄ till sitt ursprungliga tillstÄnd efter att ha behandlat varje begÀran utan att startas om). En instans av en isolerad process kan ocksÄ ÄterstÀllas till tillstÄndet för en annan virtuell maskin, inte nödvÀndigtvis den den forkades frÄn, men kostnaderna kommer att vara högre eftersom det krÀvs en Àndring av sidtabellen.
- Möjlighet att skapa statiska minnessidor under initiering, som Àr lÀmpliga Àven för avancerade runtime-miljöer, som till exempel Go-sprÄket. I detta fall tillÄts Àndringar endast för sidor i copy-on-write-lÀge.
- Stöd för fjÀrrdebugging med GDB. Debugging i realtid med Äterupptagning av exekveringen Àr möjlig.
GÀstmiljön TinyKVM bildar en komprimerad kÀrna, skyddad mot förÀndringar, som Àr sammansatt med minnesskydd aktiverat och anvÀnder SMAP (Supervisor Mode Access Prevention) och SMEP (Supervisor Mode Execution Prevention) för extra isolering mellan kÀrnan och anvÀndarrummet. TinyKVM anvÀnder stora minnessidor (hugepages) för att förbÀttra prestandan. Systemanrop som görs av program fÄngas av emulatorn och omdirigeras till vÀrdmiljön (fördröjningen för behandling och översÀttning av det emulerade anropet Àr cirka 2 mikrosekunder). I sjÀlva en virtuell maskin anvÀnds inga drivrutiner, in- och utmatning eller virtuella enheter.

KĂ€lla: opennet.ru
