NFsec Logo

Przyśpieszanie procesu budowania obrazów kontenerów

25/04/2024 w Administracja Możliwość komentowania Przyśpieszanie procesu budowania obrazów kontenerów została wyłączona

W

procesie budowy obrazów kontenerów wykorzystywanych do uruchamiania aplikacji lub serwerów najbardziej czasochłonną częścią jest instalacja zależności w postaci paczek systemowych. Proces ten jest z reguły powolny, ponieważ menedżery pakietów są stworzone w taki sposób, aby przedkładać stabilność instalacji nad jej wydajnością. I to ma sens: jeśli podczas instalacji wydarzy się niezapowiedziana awaria zasilania lub zawieszenie procesu, system musi pozostać w stanie nadającym się do użytku. Jednak w przypadku budowania obrazów kontenerów stabilność nie stanowi priorytetu. Jeśli proces instalacji pakietów lub kompilacji źródeł się nie powiedzie – system budujący obraz go odrzuci, zakończy proces błędem i będziemy musieli zacząć od nowa. Dlatego gdybyśmy mogli zasugerować menedżerowi pakietów, że nie przejmujemy się zbytnio integralnością danych, moglibyśmy przyspieszyć nasze kompilacje.
[ czytaj całość… ]

Testowanie ruchu HTTP 1.1 za pomocą curl

10/08/2019 w Administracja, CmdLineFu, Debug Możliwość komentowania Testowanie ruchu HTTP 1.1 za pomocą curl została wyłączona

C

url może być pomocnym narzędziem przy debugowaniu. Gdy na rozpoznanie problemu składają się problemy z: siecią, DNS, serwerem lub wydajnością samej webaplikacji – możemy bez wahania po niego sięgnąć. W celu izolacji problemu możemy uruchomić curl’a w następujący sposób:

curl -w "$(date +%FT%T) dns: %{time_namelookup} connect: %{time_connect}\
 firstbyte: %{time_starttransfer} total: %{time_total} HTTP: %{http_code}\n"\
 -o /dev/null -s "https://apka.dev"

Polecenie takie puszczone w pętli da nam ładny podgląd na każde żądanie HTTP:
[ czytaj całość… ]

Przyśpieszanie polecenia: ls

10/05/2019 w CmdLineFu Możliwość komentowania Przyśpieszanie polecenia: ls została wyłączona

W

poprzedniej części – dzięki zmiennej środowiskowej udało nam się przyśpieszyć działanie polecenia grep. Dzisiaj zajmiemy się poleceniem: ls. Jeśli polecenie to zajmuje dłuższy czas dla wylistowania bardzo dużej liczby plików – szczególnie jeśli są one umieszczone na sklastrowanych systemach plików typu Lustre możemy sprawdzić, czy ustawienie zmiennej dla niewyświetlania kolorów podczas listowania przyśpieszy operację:

export LS_COLORS='ex=00:su=00:sg=00:ca=00:'

Czyli prosimy ls o niekolorowanie na listingu plików z bitem setuid/setgid, flagą wykonywalności lub możliwościami opartymi na plikach. Analogicznie możemy przyśpieszyć w określonych warunkach (zależy po jakiej treści sortujemy) sortowanie bardzo dużych plików poprzez ustawienie:

export LC_COLLATE=C
export LANG=C

Tylko musimy liczyć się z faktem, że zmieni się zachowanie sortowania, ponieważ program sort uwzględnia te zmienne przy decydowaniu o jego kolejności. Np. LC_COLLATE o wartości en_US.UTF-8 spowoduje, że małe litery zostaną posortowane przed wielkimi literami.

Więcej informacji: When setting an environment variable gives you a 40x speedup

Rozmowy przy Kafce #1

19/11/2018 w Administracja Możliwość komentowania Rozmowy przy Kafce #1 została wyłączona

J

eśli chcemy odbyć krótką rozmowę o wydajności producenta kafki (w kontekście: logstash → kafka ← logstash → elasticsearch) musimy porozmawiać o dwóch rzeczach. Po pierwsze: opóźnieniu – ile czasu upłynęło od czasu wywołania metody send(), dopóki komunikat nie pojawi się na brokerze. Po drugie: przepustowości – ile wiadomości może wysłać producent do brokera na sekundę. Dlaczego musimy obawiać się o te dwie wartości? Jeśli procesowanie wiadomości zajmuje nam 10 milisekund (opóźnienie) to wyraźnie przepustowość jest ograniczona do 100 wiadomości na sekundę. Patrząc na to w ten sposób można dojść do wniosku, że im wyższe opóźnienie tym większa przepustowość. Jednak związek między opóźnieniem, a przepustowością nie jest tak trywialny.
[ czytaj całość… ]

Opóźnienia zapisu na dysku, a pamięć cache kontrolera i dysku

19/12/2017 w Administracja Możliwość komentowania Opóźnienia zapisu na dysku, a pamięć cache kontrolera i dysku została wyłączona

J

eśli planujemy użycie wbudowanego lub zewnętrznego kontrolera dysków warto upewnić się, że jest on wyposażony w pamięć podręczną. Ma to szczególne znaczenie w przypadku wykorzystania tradycyjnych dysków magnetycznych. Dlaczego? Ponieważ wykorzystując pamięć cache kontrolera, jak i dysków możemy znacznie przyśpieszyć opóźnienia operacji zapisu (obrazek #1 – włączenie pamięci cache). Na zaprezentowanym przykładzie włączono pamięć cache dla kontrolera Perc H730 mini za pomocą MegaCLI:

setarch x86_64 --uname-2.6 MegaCli64 -LDSetProp -EnDskCache -LAll -aAll;
setarch x86_64 --uname-2.6 MegaCli64 -LDSetProp -Cached -Immediate -Lall -aAll;
setarch x86_64 --uname-2.6 MegaCli64 -LDSetProp -WB -Immediate -Lall -aAll;
setarch x86_64 --uname-2.6 MegaCli64 -LDSetProp -ADRA -Immediate -Lall -aAll;

Jeśli nasze serwery stanowią klaster, który utrzymuje replikację danych pomiędzy różnymi węzłami – możemy także skonfigurować kontroler, aby podtrzymywał politykę wykorzystania pamięci cache nawet w przypadku utraty sprawności baterii BBU (ang. battery backup unit). Lepiej monitorować jej status i wymienić ją w dogodnym technicznie czasie niż niespodziewanie zaobserwować spadek wydajności jednego z serwerów.

Więcej informacji: Zarządzanie kontrolerem RAID firmy LSI poprzez MegaCli, Konserwacja battery backup unit (BBU/BBM) kontrolera RAID

Serwery Javy, a dynamiczne skalowanie procesora sterownikiem intel_pstate

09/11/2017 w Administracja Możliwość komentowania Serwery Javy, a dynamiczne skalowanie procesora sterownikiem intel_pstate została wyłączona

W

raz z użyciem w systemie Ubuntu 14.04 LTS jądra z dystrybucji 16.04, czyli Xenial (4.4.0) do obsługi procesorów z rodziny Intel (Sandy Bridge lub nowsze) używany jest sterownik intel_pstate. Na temat jego pracy istnieje wiele opracowań. Czasami wypada lepiej, a czasami gorzej. Wszystko zależy od bardzo wielu czynników np. konfiguracji sprzętu, wykorzystanego oprogramowania, charakterystyki obciążania maszyn zadaniami itd. Dlatego przed nadzieją na szybki zysk wydajności, jak zawsze należy wykonać testy na swoim środowisku zamiast ślepo ufać obcym opracowaniom. Na przykład dla serwerów ElasticSearch oraz PrestoDB bardziej opłacalnym wariantem okazało się trzymanie procesora na stałej częstotliwości (intel_pstate=disable) niż pozwalanie mu na wchodzenie na niższe wartości (zarówno wariant powersafe, jak i performance). Przełożyło się to na zmniejszenie czasów odpowiedzi (obrazek #1 – Elastic) oraz spadek obciążenia maszyn (obrazek #2 – Presto).

Więcej informacji: Intel CPUs: P-state, C-state, Turbo Boost, CPU frequency, Why does the CPU frequency fluctuate when using the performance governor?

TCP BBR – nowy algorytm kontroli przeciążenia od Google

23/07/2017 w Administracja Możliwość komentowania TCP BBR – nowy algorytm kontroli przeciążenia od Google została wyłączona

B

ottleneck Bandwidth and RTT, czyli BBR jest nowym algorytmem kontroli przeciążenia TCP od firmy Google. Został on przetestowany w jego centrach danych, jak i frontowych serwerach takich stron jak: Google.com oraz YouTube.com. Dąży on do optymalizacji zarówno przepustowości, jak i opóźnienia – RTT. Jak wspomina samo Google po wprowadzeniu tego mechanizmu do swojej usługi publicznej chmury obliczeniowej, uzyskał średnio od 4%14% większą przepustowość sieciową. Pierwsze publiczne wydanie BBR nastąpiło we wrześniu 2016 roku. Do jego użycia wymagane jest posiadanie jądra w wersji 4.9 lub wyższej, w przeciwnym wypadku wymagane jest nałożenie łatki i rekompilacja jądra.
[ czytaj całość… ]

Retransmisje TCP

19/05/2017 w Administracja Możliwość komentowania Retransmisje TCP została wyłączona

C

o się może złego dziać, jeśli czasy połączeń i odpowiedzi pomiędzy daemonami lub aplikacjami umieszczonymi na różnych serwerach losowo wahają się dochodząc nawet do wartości sekund? W dodatku liczba pakietów opuszczających serwer na wyjściu jest zauważalnie większa niż otrzymuje on do przetworzenia na wejściu. Wykluczając problemy wydajnościowe dotyczące utylizacji zasobów serwera, do którego się łączymy – pozostaje tylko jedno – sieć.
[ czytaj całość… ]

Ustawienie zmiennej środowiskowej TZ oszczędza tysiące wywołań systemowych

26/02/2017 w Administracja, Debug Możliwość komentowania Ustawienie zmiennej środowiskowej TZ oszczędza tysiące wywołań systemowych została wyłączona

A

by zaoszczędzić dodatkowych wywołań systemowych na serwerze przez chodzący proces – wystarczy ustawić zmienną środowiskową TZ na wartość: :/etc/localtime. Spowoduje to, że glibc nie będzie wykonywać zbędnych, dodatkowych wywołań systemowych. Szczególnie sprawdza się to w systemach, w których ustawienie strefy czasowej nie jest cyklicznie przestawiane – lub istnieje możliwość restartu danego procesu, kiedy to występuje (w większości przypadków taka zmiana występuje tylko raz – zazwyczaj w polskich realiach jest to przestawienie z UTC na CET).
[ czytaj całość… ]

Młotkiem w wiele wirtualnych rdzeni – Receive Packet Steering

18/10/2015 w Administracja Możliwość komentowania Młotkiem w wiele wirtualnych rdzeni – Receive Packet Steering została wyłączona

S

krótów takich jak: RPS, RFS, XPS nie trzeba przedstawiać chyba nikomu – jeśli tak to warto się z nimi dogłębnie zapoznać. Zostały one wdrożone w wersji jądra 2.6.35 – 2.6.38 przez Toma Herberta z teamu Google i są aplikacyjną implementacją RSS (ang. Receive-Side Scaling). Na dedykowanych serwerach fizycznych do natłoku ruchu sieciowego możemy wykorzystać sprzętowe wsparcie kart sieciowych i mechanizmy do rozładowywania kolejek. Niestety na serwerach wirtualnych (Xen, KVM) cała ta praca spada na przypisany do maszyny procesor(y).
[ czytaj całość… ]