2015-12-24 23 views
11

Czytam Building Applications on Mesos i natknąć się na następujących stwierdzeń:Jak rozumieć alokację procesora w Mesos?

Procesory
Ten zasób wyraża jak są dostępne wielu rdzeni procesora. Zadania mogą wykorzystywać części ułamkowe procesora - jest to możliwe, ponieważ niewolniki Mesos używają udziałów procesorów, zamiast rezerwowania określonych procesorów. Oznacza to, że jeśli masz zarezerwowane 1.5 cpus , twoje procesy będą mogły używać w sumie 1,5 sekundy czasu procesora na sekundę. To może oznaczać, że w jednym executorze dwa procesy otrzymają 750 milisekund czasu procesora na sekundę lub jeden proces dostanie 1 sekundę czasu procesora, a inny uzyska 500 milisekund czasu procesora w ciągu jednej sekundy. Zaletą korzystania z zasobów procesora jest to, że jeśli niektóre zadania będą w stanie wykorzystać więcej niż jego udział, a żadne inne zadanie nie będzie wymagało użycia bezczynnego procesora, pierwsze zadanie może potencjalnie wykorzystać więcej niż jego udział. W rezultacie, cpus reserved zapewnia gwarantowane minimum czasu procesora dostępne dla zadania - jeśli dodatkowa pojemność jest dostępna, będzie mogła używać więcej.

Nie rozumiem "if you have 1.5 cpus reserved, your processes will be allowed to use a total of 1.5 seconds of CPU time each second.". W jaki sposób może on używać 1.5 sekund z każdą sekundą?

Odpowiedz

1

Korzystając z więcej niż jednego procesora/rdzenia :-).

Należy pamiętać, że faktyczne zachowanie/egzekwowanie tych ograniczeń będzie w dużym stopniu zależeć od faktycznego używanego kontenera/izolatora. Niestety nie mogłem znaleźć żadnego dobrego/niedawnej dokumentacji (ale wiem, że są ludzie pracujący na ulepszenie tej :-)), ale można spojrzeć na tym blogu: Blog Post about CPU resources

aktualizacji Tam jest również trudnym ograniczeniem wykorzystania procesora: Zobacz: configuration parameter

9

cpu=1.5 powinien oznaczać jeden i pół rdzeń procesora. Możesz zobaczyć w Mesos Web UI ile rdzeni ma każdy agent Mesos (slave). To właśnie pokazuje nproc, chyba że mesos-slave jest skonfigurowany tak, aby oferować mniej procesorów. Mesos zlicza zasoby z dokładnością do 3 miejsc po przecinku.

Istnieje kilka flag, które wpływają na sposób, w jaki Mesos ogranicza zasoby. Dla procesora jest najważniejszym isolation (mówimy o mesos-slave/mesos-agent ustawienia):

  • --isolation=posix/cpu,posix/mem Żaden CPU ograniczającym jest stosowana mesos-executor jest tylko proces, który uruchamia inny proces. Możesz użyć numeru nice, np. nice -20 (dla najwyższego priorytetu) lub cpulimit polecenia wpływające na planowanie jądra, ale np. cpu=0.1 nie będą brane pod uwagę.
  • --isolation=cgroups/cpu,cgroups/memcgroups (część jądra Linux od wersji 2.6.29) umożliwia ograniczanie zasobów używanych przez każdy proces lub grupę procesów. Niektóre dystrybucje nie włączają domyślnie ograniczenia pamięci, a cgroup_enable=memory trzeba przekazać do jądra. Ale skupmy się na procesorze. Domyślnie cgroups przyjmuje konserwatywne podejście, gdzie cpu=1.0 oznacza, że ​​przynajmniej jeden rdzeń procesora będzie zarezerwowany dla tego zadania. Ale w przypadku, gdy nie ma innego zadania uruchomionego na hoście, może on zużywać wszystkie procesory.Zakładając, że mamy hosta z 12 CPUs i istnieją dwa zadania uruchomione z cpu=2.0. Wtedy każde zadanie może dostać się do rdzenia 6 CPUs! (zakładając, że żadne inne zadanie Mesos nie jest uruchomione na tym hoście). Jest to bardzo niebezpieczne, gdy klaster ma niskie obciążenie, wszystkie zadania będą wyglądały dobrze, ale gdy wystąpi wiele zadań, wydajność niektórych hostów zmniejszy się.
    • --cgroups_enable_cfsCFS oznacza całkowicie uczciwy harmonogram, który przyjmuje bardziej rygorystyczne podejście. Domyślnie jest on wyłączony, również nie wszystkie dystrybucje obsługują to (możesz użyć np. Docker's check-script.sh, aby zweryfikować wsparcie w twoim systemie). CFS zagwarantuje, że każdy proces może wykorzystywać co najwyżej określoną część (na przykład cpu=2.5). Dzieje się to kosztem, że żaden inny proces nie może wykorzystywać zarezerwowanych rdzeni, gdy niektóre zadania są bezczynne. Upewnij się, że dobrze określisz swoje wymagania.

ostatniej wymienionej problem może być rozwiązany przez nadsubskrypcji procesora, który jest opisany w the Mesos documentation.