2016-03-08 13 views
7

Dla dwóch procesów A i B obie biblioteki korzystają z biblioteki libc.so, libc.so jest ładowany do pamięci tylko raz. Jest to normalna sytuacja, gdy A i B działają na tym samym hoście i na tych samych rootfach.Biblioteka współdzielona w kontenerach

Jeśli chodzi o pojemnik, jeśli A i B pracują w różnych pojemnikach, czy A i B mają ten sam obszar pamięci?

np

imageA

--libc.so

--programA

imageB

--libc.so

--programB

używamy chroot do uruchamiania A i B w różnych rootfach. Dwa libc.so są takie same. Czy libc.so będzie ładowany do pamięci dwa razy?

+0

można uruchomić kontener zawierający tylko "libc.so", a następnie połączyć z nim kontener A i B. Lub użyj woluminów, aby go udostępnić. –

+0

Wiem, że udostępniłoby to bibliotekę. Ale wędruję, jeśli A i B będą dzielić ten sam obszar ram, jeśli działają w różnych pojemnikach. –

+0

Nie, nie będą. – Sobrique

Odpowiedz

-1

Nie będą dzielić tego samego obszaru pamięci RAM; to jest cel wirtualizacji (z kontenerami) w każdym razie - dla izolacji zasobów (pamięci) i innych. Aby uzyskać więcej informacji, spójrz na cgroups pamięci. Ładny link tutaj z animation.

4

W rzeczywistości proces A & B, który korzysta z biblioteki współdzielonej libc.so może udostępnić tę samą pamięć. Nieco intuicyjnie zależy to od używanego sterownika magazynu dokera. Jeśli używasz sterownika pamięci masowej, który może udostępnić pliki biblioteki współużytkowanej jako pochodzące z tego samego urządzenia/i-węzła, gdy znajdują się one w tej samej warstwie dokowania, będą one współużytkować te same strony pamięci podręcznej pamięci wirtualnej. Podczas korzystania ze sterowników pamięci aufs, overlay2 lub overlay2 współdzielone biblioteki będą współużytkować pamięć, ale w przypadku użycia innych sterowników pamięci masowej nie będą.

Nie jestem pewien, dlaczego ten szczegół nie jest bardziej oczywisty w dokumentacji Docker. A może tak jest, ale właśnie to przegapiłem. Wydaje się to być kluczowym wyróżnikiem, jeśli próbujesz uruchomić gęste kontenery.

+1

Oznacza to, że kontenery korzystające z tego samego obrazu lub obrazu podstawowego (zakładając, że żaden obraz pośredni nie zmodyfikował obrazu) będą współużytkować pojemniki pamięci przy użyciu tej samej ścieżki biblioteki, ale różne obrazy nie będą współużytkować pamięci (ponieważ obrazy to warstwy są różne pliki na dysku) – untore

Powiązane problemy