znalazłem 'accept_mutex' jest 'o' jako domyślny w Nginx następująco:Dlaczego funkcja "accept_mutex" jest włączona domyślnie w Nginx?
Wtedy nie akceptując połączenia wymagają mutex? Czemu?
znalazłem 'accept_mutex' jest 'o' jako domyślny w Nginx następująco:Dlaczego funkcja "accept_mutex" jest włączona domyślnie w Nginx?
Wtedy nie akceptując połączenia wymagają mutex? Czemu?
Wyobraź sobie, że niektóre procesy nasłuchują na jednym porcie i czekają w epolu. Bez akceptowania mutex wszystkie procesy zostaną wybudzone, ale tylko jeden będzie mógł zaakceptować połączenie. Inni proces obudzili nieproduktywne. Jest dobrze znany
Ale to nie koniec historii.
często lub zawsze niepowodzeniem zaakceptować spowoduje przełączania kontekstu: http://en.wikipedia.org/wiki/Lock_convoy
Moje testy pokazują 5-10% wydajności utraconej bez zaakceptować mutex.
Aktualizacja: "zaakceptuj muteks" to nie tylko mutext zablokowany w pobliżu accept. Jest to nazwa technologii służącej do szeregowania nasłuchu na porcie serwera między pracownikami. Tylko jeden pracownik nasłuchuje na dany port w jednej chwili.
Jeśli akceptacja mutex jest bardziej wydajna, dlaczego istnieje opcja wyłączenia? Kiedy to będzie przydatne? –
Jak mi wiadomo, bardzo rzadko pojawiały się problemy z akceptacją muteksa i innych modułów/konfiguracji. Czasami pomocne może być ustawienie opcji accept_mutes. –
Włączenie 'accept_mutex off;' może zmniejszyć opóźnienie o dziesiątki milisekund, jeśli liczba qps wynosi >> 10k – SaveTheRbtz
Od wersji mainline nginx 1.11.3 (wydany 2016-07-26), accept_mutex
now defaults to off
. Jest to częściowo spowodowane tym, że nowa flaga EPOLLEXCLUSIVE
zapewnia korzyści z accept_mutex
bez dodatkowego obciążenia.
Tak. Używa mutex do serializowania nowych połączeń. Możesz znaleźć informacje tutaj: http://nginx.org/en/docs/ngx_core_module.html#accept_mutex. Chciałbym jednak dowiedzieć się czegoś więcej. –
FYI: 'accept_mutex' teraz domyślnie wyłącza' od 'Nginx 1.11.3 (https://nginx.org/en/CHANGES) – Sicco