Inženjeri kompanije Netflix otkrili su neočekivano usko grlo u performansama prilikom skaliranja kontejnera na modernim cloud serverima. Analiza je pokazala da problem ne potiče samo iz alata poput Kubernetes ili containerd, već iz same arhitekture procesora i načina na koji Linux kernel upravlja fajl sistemom.
Problemi su se pojavili kada su serveri pod velikim opterećenjem počeli da „zamrzavaju“ operacije pokretanja kontejnera, pri čemu su provere stanja aplikacija kasnile i po nekoliko desetina sekundi.
Istraživanje je pokazalo da se uzrok problema nalazi u globalnom mount lock mehanizmu unutar Virtual File System podsistema. Prilikom pokretanja velikog broja kontejnera, runtime mora da izvrši ogroman broj bind mount operacija kako bi mapirao slojeve kontejnerskih slika.
Globalni lock u VFS sloju stvara ozbiljan problem skaliranja
Svaki kontejner može zahtevati desetine mount i unmount operacija, a tokom velikih burst scenarija ukupan broj sistemskih poziva može preći 20.000 mount operacija. Sve ove operacije moraju da pristupe istom globalnom kernel lock-u, što stvara klasično usko grlo u sistemima.
Netflix je takođe utvrdio da se ponašanje sistema značajno razlikuje u zavisnosti od arhitekture procesora.
Na starijim serverima poput AWS r5.metal instanci sa više procesorskih soketa i više NUMA domena, istovremeni pristup deljenim resursima dramatično pogoršava performanse.
Sa druge strane, novije jednoprocesorske konfiguracije poput AWS m7i.metal zasnovane na Intel procesorima ili AWS m7a.24xlarge sa AMD CPU arhitekturom pokazuju mnogo bolje skaliranje zahvaljujući modernijem dizajnu keš memorije i smanjenim NUMA kašnjenjima.
Testiranja su pokazala da faktori poput NUMA topologije, hiperthreading-a i mikroarhitekture keš memorije značajno utiču na to kako se globalni lock konflikti prenose i utiču na čitav sistem.
U pojedinim konfiguracijama čak je i isključivanje Hyper-Threading tehnologije smanjilo latenciju i do 30%.
Da bi rešio problem, Netflix je razmotrio dva pristupa: korišćenje novih kernel mount API-ja koji eliminišu globalni lock i optimizaciju overlay fajl sistema kako bi se smanjio broj mount operacija po kontejneru.
Kompanija je izabrala drugi pristup, reorganizujući način na koji se slojevi kontejnerskih slika montiraju. Time je broj mount operacija smanjen sa linearne složenosti O(n) na konstantno vreme O(1) po kontejneru, čime je praktično eliminisano usko grlo u kernelu.
Ovo istraživanje naglašava važnu lekciju za industriju cloud infrastrukture: stabilno skaliranje modernih distribuiranih sistema zahteva duboko razumevanje kompletnog softverskog i hardverskog steka: od kontejnerskih platformi i fajl sistema do CPU mikroarhitekture, piše InfoQ.