Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00490 007242 13410495 na godz. na dobę w sumie
Wydajne systemy komputerowe. Przewodnik dla administratorów systemów lokalnych i w chmurze - ebook/pdf
Wydajne systemy komputerowe. Przewodnik dla administratorów systemów lokalnych i w chmurze - ebook/pdf
Autor: Liczba stron: 768
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-246-9160-9 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> sieci komputerowe >> inne
Porównaj ceny (książka, ebook, audiobook).

Kompendium wiedzy o wydajności systemów!

Wszędzie tam, gdzie przetwarzane są gigantyczne ilości danych, wydajność systemu komputerowego ma fundamentalne znaczenie. W takim środowisku nawet minimalne opóźnienie pomnożone przez liczbę operacji może skutkować ogromnym wzrostem kosztów działania. Zastanawiasz się, jak zapewnić najwyższą wydajność systemów posiadanych fizycznie lub tych uruchomionych w chmurze? Jesteś inżynierem odpowiedzialnym za wydajność systemu komputerowego? A może pasjonujesz się systemami operacyjnymi i ich wydajnością? Jeżeli odpowiedziałeś twierdząco na którekolwiek z tych pytań, trafiłeś na idealny podręcznik!

W trakcie lektury przekonasz się, jak kontrolować oraz poprawiać wydajność Twoich systemów komputerowych. Poznasz popularne metodologie badań wydajności, ich zalety oraz wady. Ponadto nauczysz się planować pojemność systemu oraz go monitorować. Po tym wstępie przyjdzie czas na system Linux w detalach. Odkryjesz specyfikę jądra systemu Linux, sposób zarządzania procesami oraz pamięcią. Z kolejnych rozdziałów wyciągniesz szczegółową wiedzę na temat procesorów, systemów plików, dysków oraz sieci. Każdy z tych elementów ma kluczowe znaczenie dla wydajności konfigurowanego systemu. Książka ta jest wyjątkowym, kompletnym kompendium wiedzy na temat wydajności systemów — zajrzyj koniecznie!

Dzięki tej książce:

Zbuduj wydajny system komputerowy na miarę Twoich potrzeb!

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: Systems Performance: Enterprise and the Cloud Tłumaczenie: Robert Górczyński ISBN: 978-83-246-9157-9 Authorized translation from the English language edition, entitled: SYSTEMS PERFORMANCE: ENTERPRISE AND THE CLOUD; ISBN 0133390098; by Brendan Gregg; published by Pearson Education, Inc; publishing as Prentice Hall. Copyright © 2014 Pearson Education, Inc. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc. Polish language edition published by HELION S.A., Copyright © 2014. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie bierze jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Wydawnictwo HELION nie ponosi również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/wysyko Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis treści Wstęp Podziękowania O autorze Rozdział 1. Wprowadzenie 1.1. Wydajno(cid:295)(cid:232) systemów 1.2. Role 1.3. Dzia(cid:273)ania 1.4. Perspektywy 1.5. Zapewnienie wydajno(cid:295)ci to wyzwanie 1.5.1. Wydajno(cid:295)(cid:232) jest subiektywna 1.5.2. Systemy s(cid:230) skomplikowane 1.5.3. Mo(cid:318)e istnie(cid:232) wiele problemów zwi(cid:230)zanych z wydajno(cid:295)ci(cid:230) 1.6. Opó(cid:316)nienie 1.7. Monitorowanie dynamiczne 1.8. Przetwarzanie w chmurze 1.9. Studium przypadku 1.9.1. Wolno dzia(cid:273)aj(cid:230)ce dyski 1.9.2. Zmiana oprogramowania 1.9.3. Co dalej? 19 27 31 33 33 34 35 36 37 37 37 38 39 40 41 42 42 44 46 3 Kup książkęPoleć książkę 4 Spis treści Rozdział 2. Metodologia 2.1. Terminologia 2.2. Modele 2.2.1. Wydajno(cid:295)(cid:232) systemu podczas testu 2.2.2. Systemy kolejkowe 2.3. Koncepcje 2.3.1. Opó(cid:316)nienie 2.3.2. Skala czasu 2.3.3. Kompromisy 2.3.4. Dostrajanie wydajno(cid:295)ci 2.3.5. Poziomy trafno(cid:295)ci 2.3.6. Rekomendacje w danym momencie 2.3.7. Obci(cid:230)(cid:318)enie kontra architektura 2.3.8. Skalowalno(cid:295)(cid:232) 2.3.9. Znane niewiadome 2.3.10. Metryki 2.3.11. Poziom wykorzystania 2.3.12. Nasycenie 2.3.13. Profilowanie 2.3.14. Buforowanie 2.4. Perspektywy 2.4.1. Analiza zasobów 2.4.2. Analiza obci(cid:230)(cid:318)enia 2.5. Metodologia 2.5.1. Jawna antymetoda 2.5.2. Antymetoda losowej zmiany 2.5.3. Antymetoda obwiniania kogo(cid:295) innego 2.5.4. Metoda przygotowanej ad hoc listy rzeczy do sprawdzenia 2.5.5. Opis problemu 2.5.6. Metoda naukowa 2.5.7. Cykl diagnostyczny 2.5.8. Metoda narz(cid:250)dzi 2.5.9. Metoda USE 2.5.10. Charakterystyka obci(cid:230)(cid:318)enia 2.5.11. Analiza dr(cid:230)(cid:318)(cid:230)ca 2.5.12. Analiza opó(cid:316)nienia 2.5.13. Metoda R 2.5.14. Monitorowanie zdarze(cid:275) 2.5.15. Dane statystyczne b(cid:250)d(cid:230)ce punktem odniesienia 2.5.16. Statyczne dostosowanie wydajno(cid:295)ci 2.5.17. Dostosowanie bufora 2.5.18. Mikrotesty wydajno(cid:295)ci 2.6. Modelowanie 2.6.1. Biznes kontra chmura 2.6.2. Identyfikacja wizualna 47 48 49 49 50 50 50 52 52 54 55 56 56 57 59 59 60 62 63 63 66 66 67 68 70 70 71 71 72 73 74 75 76 83 84 85 87 87 89 89 90 91 91 92 92 Kup książkęPoleć książkę Spis treści 2.6.3. Prawo skalowalno(cid:295)ci Amdahla 2.6.4. Prawo skalowalno(cid:295)ci uniwersalnej 2.6.5. Teoria kolejek 2.7. Planowanie pojemno(cid:295)ci 2.7.1. Ograniczenia zasobu 2.7.2. Analiza wspó(cid:273)czynnika 2.7.3. Skalowanie rozwi(cid:230)za(cid:275) 2.8. Statystyka 2.8.1. Ocena wydajno(cid:295)ci 2.8.2. Warto(cid:295)(cid:232) (cid:295)rednia 2.8.3. Odchylenie standardowe, percentyle i mediana 2.8.4. Wspó(cid:273)czynnik zmienno(cid:295)ci 2.8.5. Rozk(cid:273)ad wielomodalny 2.8.6. Elementy odstaj(cid:230)ce 2.9. Monitorowanie 2.9.1. Wzorce na podstawie czasu 2.9.2. Produkty s(cid:273)u(cid:318)(cid:230)ce do monitorowania 2.9.3. Podsumowanie od chwili uruchomienia systemu 2.10. Wizualizacja 2.10.1. Wykres liniowy 2.10.2. Wykres punktowy 2.10.3. Mapy cieplne 2.10.4. Wykres warstwowy 2.10.5. Narz(cid:250)dzia wizualizacji 2.11. (cid:231)wiczenia 2.12. Odwo(cid:273)ania Rozdział 3. Systemy operacyjne 3.1. Terminologia 3.2. (cid:294)rodowisko 3.2.1. J(cid:230)dro 3.2.2. Stosy 3.2.3. Przerwania i w(cid:230)tki przerwa(cid:275) 3.2.4. Poziom priorytetu przerwania 3.2.5. Procesy 3.2.6. Wywo(cid:273)ania systemowe 3.2.7. Pami(cid:250)(cid:232) wirtualna 3.2.8. Zarz(cid:230)dzanie pami(cid:250)ci(cid:230) 3.2.9. Algorytm szeregowania 3.2.10. Systemy plików 3.2.11. Buforowanie 3.2.12. Sieci 3.2.13. Sterowniki urz(cid:230)dze(cid:275) 3.2.14. Wieloprocesorowo(cid:295)(cid:232) 5 94 95 96 100 100 102 103 103 104 105 106 107 107 108 108 109 110 110 111 111 112 113 114 115 115 116 117 118 119 119 122 123 124 125 127 129 130 130 132 134 134 135 136 Kup książkęPoleć książkę 6 Spis treści 3.2.15. Wyw(cid:273)aszczenie 3.2.16. Zarz(cid:230)dzanie zasobami 3.2.17. Monitorowanie 3.3. J(cid:230)dra systemów 3.3.1. UNIX 3.3.2. Systemy Solaris 3.3.3. Systemy Linux 3.3.4. Ró(cid:318)nice 3.4. (cid:231)wiczenia 3.5. Odwo(cid:273)ania Rozdział 4. Narzędzia monitorowania 4.1. Rodzaje narz(cid:250)dzi 4.1.1. Liczniki 4.1.2. Monitorowanie 4.1.3. Profilowanie 4.1.4. Monitorowanie (sar) 4.2. (cid:315)ród(cid:273)a danych statystycznych 4.2.1. Interfejs /proc 4.2.2. Interfejs /sys 4.2.3 Framework kstat 4.2.4. Zliczanie opó(cid:316)nienia 4.2.5. Zliczanie mikrostanu 4.2.6. Inne narz(cid:250)dzia monitorowania 4.3. DTrace 4.3.1. Monitorowanie statyczne i dynamiczne 4.3.2. Sondy 4.3.3. Dostawcy 4.3.4. Argumenty 4.3.5. J(cid:250)zyk D 4.3.6. Wbudowane zmienne 4.3.7. Akcje 4.3.8. Typy zmiennych 4.3.9. Jednowierszowe wywo(cid:273)ania DTrace 4.3.10. Skrypty 4.3.11. Obci(cid:230)(cid:318)enie 4.3.12. Dokumentacja i zasoby 4.4. SystemTap 4.4.1. Sondy 4.4.2. Zestawy tapset 4.4.3. Akcje i wbudowane zmienne 4.4.4. Przyk(cid:273)ady 4.4.5. Obci(cid:230)(cid:318)enie 4.4.6. Dokumentacja i zasoby 136 137 137 138 139 139 143 146 147 147 149 150 150 152 153 154 155 156 161 162 165 166 166 168 170 171 172 172 173 173 173 173 177 177 178 179 180 181 181 182 182 184 185 Kup książkęPoleć książkę Spis treści 4.5. perf 4.6. Obserwowanie monitorowania 4.7. (cid:231)wiczenia 4.8. Odwo(cid:273)ania Rozdział 5. Aplikacje 5.1. Podstawy dotycz(cid:230)ce aplikacji 5.1.1. Cele 5.1.2. Optymalizacja najcz(cid:250)stszego sposobu u(cid:318)ycia aplikacji 5.1.3. Monitorowanie 5.1.4. Notacja „du(cid:318)e O” 5.2. Techniki sprawdzania wydajno(cid:295)ci aplikacji 5.2.1. Ustalenie wielko(cid:295)ci operacji wej(cid:295)cia-wyj(cid:295)cia 5.2.2. Pami(cid:250)(cid:232) podr(cid:250)czna 5.2.3. Buforowanie 5.2.4. Technika odpytywania 5.2.5. Wspó(cid:273)bie(cid:318)no(cid:295)(cid:232) i równoleg(cid:273)o(cid:295)(cid:232) 5.2.6. Nieblokuj(cid:230)ce operacje wej(cid:295)cia-wyj(cid:295)cia 5.2.7. Powi(cid:230)zanie z procesorem 5.3. J(cid:250)zyki programowania 5.3.1. J(cid:250)zyki kompilowane 5.3.2. J(cid:250)zyki interpretowane 5.3.3. Maszyny wirtualne 5.3.4. Mechanizm usuwania nieu(cid:318)ytków 5.4. Metodologia i analiza 5.4.1. Analiza stanu w(cid:230)tku 5.4.2. Profilowanie procesora 5.4.3. Analiza wywo(cid:273)a(cid:275) systemowych 5.4.4. Profilowanie operacji wej(cid:295)cia-wyj(cid:295)cia 5.4.5. Charakterystyka obci(cid:230)(cid:318)enia 5.4.6. Metoda USE 5.4.7. Analiza dr(cid:230)(cid:318)(cid:230)ca 5.4.8. Analiza blokad 5.4.9. Statyczne dostosowanie wydajno(cid:295)ci 5.5. (cid:231)wiczenia 5.6. Odwo(cid:273)ania Rozdział 6. Procesory 6.1. Terminologia 6.2. Modele 6.2.1. Architektura procesora 6.2.2. Pami(cid:250)ci podr(cid:250)czne w procesorze 6.2.3. Kolejki dzia(cid:273)ania w procesorze 7 185 186 187 187 189 190 191 192 193 193 194 194 195 195 196 196 199 200 200 201 202 203 203 204 205 208 210 218 219 219 220 221 223 224 226 227 228 229 229 230 230 Kup książkęPoleć książkę 8 Spis treści 6.3. Koncepcje 6.3.1. Cz(cid:250)stotliwo(cid:295)(cid:232) taktowania zegara 6.3.2. Instrukcje 6.3.3. Potok instrukcji 6.3.4. Wielko(cid:295)(cid:232) instrukcji 6.3.5. Warto(cid:295)ci CPI, IPC 6.3.6. Poziom wykorzystania 6.3.7. Czasy u(cid:318)ytkownika i j(cid:230)dra 6.3.8. Poziom nasycenia 6.3.9. Wyw(cid:273)aszczenie 6.3.10. Odwrócenie priorytetów 6.3.11. Wieloprocesowo(cid:295)(cid:232), wielow(cid:230)tkowo(cid:295)(cid:232) 6.3.12. D(cid:273)ugo(cid:295)(cid:232) s(cid:273)owa 6.3.13. Optymalizacja kodu wynikowego 6.4. Architektura 6.4.1. Sprz(cid:250)t 6.4.2. Oprogramowanie 6.5. Metodologia 6.5.1. Metoda narz(cid:250)dzi 6.5.2. Metoda USE 6.5.3. Charakterystyka obci(cid:230)(cid:318)enia 6.5.4. Profilowanie 6.5.5. Analiza cykli 6.5.6. Monitorowanie wydajno(cid:295)ci 6.5.7. Statyczne dostosowanie wydajno(cid:295)ci 6.5.8. Dostrojenie priorytetu 6.5.9. Kontrola zasobów 6.5.10. Powi(cid:230)zanie z procesorem 6.5.11. Mikrotesty wydajno(cid:295)ci 6.5.12. Skalowanie 6.6. Analiza 6.6.1. uptime 6.6.2. vmstat 6.6.3. mpstat 6.6.4. sar 6.6.5. ps 6.6.6. top 6.6.7. prstat 6.6.8. pidstat 6.6.9. time, ptime 6.6.10. DTrace 6.6.11. SystemTap 6.6.12. perf 6.6.13. cpustat 231 231 232 232 232 233 233 234 234 235 235 236 237 238 238 238 246 253 254 255 256 257 259 260 260 261 262 262 262 263 264 265 267 268 270 271 272 273 275 276 277 284 284 292 Kup książkęPoleć książkę Spis treści 6.6.14. Inne narz(cid:250)dzia 6.6.15. Wizualizacja 6.7. Eksperymenty 6.7.1. Ad hoc 6.7.2. sysbench 6.8. Dostrajanie 6.8.1. Opcje kompilatora 6.8.2. Klasy i priorytety szeregowania 6.8.3. Opcje algorytmu szeregowania 6.8.4. Do(cid:273)(cid:230)czanie procesu 6.8.5. Grupa procesorów na wy(cid:273)(cid:230)czno(cid:295)(cid:232) 6.8.6. Kontrola zasobów 6.8.7. Opcje procesora (dostrajanie BIOS-u) 6.9. (cid:231)wiczenia 6.10. Odwo(cid:273)ania Rozdział 7. Pamięć 7.1. Terminologia 7.2. Koncepcje 7.2.1. Pami(cid:250)(cid:232) wirtualna 7.2.2. Stronicowanie 7.2.3. (cid:317)(cid:230)danie stronicowania 7.2.4. Przepe(cid:273)nienie 7.2.5. Wymiana 7.2.6. U(cid:318)ycie bufora systemu plików 7.2.7. Poziom wykorzystania i nasycenie 7.2.8. Alokatory 7.2.9. D(cid:273)ugo(cid:295)(cid:232) s(cid:273)owa 7.3. Architektura 7.3.1. Architektura sprz(cid:250)towa 7.3.2. Oprogramowanie 7.3.3. Przestrze(cid:275) adresowa procesu 7.4. Metodologia 7.4.1. Metoda narz(cid:250)dzi 7.4.2. Metoda USE 7.4.3. Charakterystyka u(cid:318)ycia pami(cid:250)ci 7.4.4. Analiza cykli 7.4.5. Monitorowanie wydajno(cid:295)ci 7.4.6. Wykrywanie wycieków pami(cid:250)ci 7.4.7. Statyczne dostrojenie wydajno(cid:295)ci 7.4.8. Kontrola zasobów 7.4.9. Mikrotesty wydajno(cid:295)ci 7.5. Analiza 7.5.1. vmstat 7.5.2. sar 9 293 294 297 297 298 298 299 299 300 302 302 303 303 303 305 307 308 309 309 310 311 313 313 314 314 315 315 315 315 321 328 332 333 334 335 337 337 337 338 339 339 339 340 343 Kup książkęPoleć książkę 10 Spis treści 7.5.3. slabtop 7.5.4. ::kmastat 7.5.5. ps 7.5.6. top 7.5.7. prstat 7.5.8. pmap 7.5.9. DTrace 7.5.10. SystemTap 7.5.11. Inne narz(cid:250)dzia 7.6. Dostrajanie 7.6.1. Parametry mo(cid:318)liwe do dostrojenia 7.6.2. Ró(cid:318)nej wielko(cid:295)ci strony 7.6.3. Alokatory 7.6.4. Kontrola zasobów 7.7. (cid:231)wiczenia 7.8. Odwo(cid:273)ania Rozdział 8. Systemy plików 8.1. Terminologia 8.2. Modele 8.2.1. Interfejsy systemów plików 8.2.2. Bufor systemu plików 8.2.3. Bufory poziomu drugiego 8.3. Koncepcje 8.3.1. Opó(cid:316)nienie systemu plików 8.3.2. Buforowanie 8.3.3. Losowe kontra sekwencyjne operacje wej(cid:295)cia-wyj(cid:295)cia 8.3.4. Mechanizm prefetch 8.3.5. Odczyt z wyprzedzeniem 8.3.6. Buforowanie operacji zapisu 8.3.7. Synchroniczne operacje zapisu 8.3.8. Niezmodyfikowane i bezpo(cid:295)rednie operacje wej(cid:295)cia-wyj(cid:295)cia 8.3.9. Nieblokuj(cid:230)ce operacje wej(cid:295)cia-wyj(cid:295)cia 8.3.10. Mapowanie plików w pami(cid:250)ci 8.3.11. Metadane 8.3.12. Logiczne kontra fizyczne operacje wej(cid:295)cia-wyj(cid:295)cia 8.3.13. Operacje nie s(cid:230) jednakowe 8.3.14. Specjalne systemy plików 8.3.15. Znaczniki czasu dotycz(cid:230)ce dost(cid:250)pu 8.3.16. Pojemno(cid:295)(cid:232) 8.4. Architektura 8.4.1. Stos operacji wej(cid:295)cia-wyj(cid:295)cia systemu plików 8.4.2. VFS 8.4.3. Bufory systemu plików 345 347 348 350 350 351 353 357 358 360 360 363 364 364 365 366 369 370 371 371 371 372 372 373 373 374 375 376 376 377 378 378 379 379 380 383 383 383 384 384 384 384 386 Kup książkęPoleć książkę Spis treści 8.4.4. Funkcje systemu plików 8.4.5. Rodzaje systemów plików 8.4.6. Woluminy i pule 8.5. Metodologia 8.5.1. Analiza dysku 8.5.2. Analiza opó(cid:316)nienia 8.5.3. Charakterystyka obci(cid:230)(cid:318)enia 8.5.4. Monitorowanie wydajno(cid:295)ci 8.5.5. Monitorowanie zdarze(cid:275) 8.5.6. Statyczne dostosowanie wydajno(cid:295)ci 8.5.7. Dostrajanie bufora 8.5.8. Separacja obci(cid:230)(cid:318)enia 8.5.9. Systemy plików w pami(cid:250)ci 8.5.10. Mikrotesty wydajno(cid:295)ci 8.6. Analiza 8.6.1. vfsstat 8.6.2. fsstat 8.6.3. strace, truss 8.6.4. DTrace 8.6.5. SystemTap 8.6.6. LatencyTOP 8.6.7. free 8.6.8. top 8.6.9. vmstat 8.6.10. sar 8.6.11. slabtop 8.6.12. mdb ::kmastat 8.6.13. fcachestat 8.6.14. /proc/meminfo 8.6.15. mdb ::memstat 8.6.16. kstat 8.6.17. Inne narz(cid:250)dzia 8.6.18. Wizualizacje 8.7. Eksperymenty 8.7.1. Ad hoc 8.7.2. Narz(cid:250)dzia mikrotestów wydajno(cid:295)ci 8.7.3. Opró(cid:318)nienie bufora systemu plików 8.8. Dostrajanie 8.8.1. Wywo(cid:273)ania aplikacji 8.8.2. ext3 8.8.3. ZFS 8.9. (cid:231)wiczenia 8.10. Odwo(cid:273)ania 11 390 392 399 401 401 402 404 406 407 408 408 409 409 409 411 412 413 413 414 425 425 426 426 426 427 428 429 429 430 430 431 432 433 434 435 435 437 438 438 439 440 442 443 Kup książkęPoleć książkę 12 Rozdział 9. Dyski 9.1. Terminologia 9.2. Modele 9.2.1. Prosty dysk 9.2.2. Pami(cid:250)(cid:232) podr(cid:250)czna dysku 9.2.3. Kontroler 9.3. Koncepcje 9.3.1. Pomiar czasu 9.3.2. Skale czasu 9.3.3. Buforowanie 9.3.4. Losowe kontra sekwencyjne operacje wej(cid:295)cia-wyj(cid:295)cia 9.3.5. Wspó(cid:273)czynnik odczyt/zapis 9.3.6. Wielko(cid:295)(cid:232) operacji wej(cid:295)cia-wyj(cid:295)cia 9.3.7. Warto(cid:295)ci IOPS nie s(cid:230) równe 9.3.8. Polecenie dyskowe niedotycz(cid:230)ce transferu danych 9.3.9. Poziom wykorzystania 9.3.10. Nasycenie 9.3.11. Oczekiwanie na zako(cid:275)czenie operacji wej(cid:295)cia-wyj(cid:295)cia 9.3.12. Operacje synchroniczne kontra asynchroniczne 9.3.13. Dyskowe kontra aplikacji operacje wej(cid:295)cia-wyj(cid:295)cia 9.4. Architektura 9.4.1. Rodzaje dysków 9.4.2. Interfejsy 9.4.3. Rodzaje pami(cid:250)ci masowej 9.4.4. Stos dyskowych operacji wej(cid:295)cia-wyj(cid:295)cia w systemie operacyjnym 9.5. Metodologia 9.5.1. Metoda narz(cid:250)dzi 9.5.2. Metoda USE 9.5.3. Monitorowanie wydajno(cid:295)ci 9.5.4. Charakterystyka obci(cid:230)(cid:318)enia 9.5.5. Analiza opó(cid:316)nienia 9.5.6. Monitorowanie zdarze(cid:275) 9.5.7. Statyczne dopasowanie wydajno(cid:295)ci 9.5.8. Dostrojenie bufora 9.5.9. Kontrola zasobów 9.5.10. Mikrotesty wydajno(cid:295)ci 9.5.11. Skalowanie 9.6. Analiza 9.6.1. iostat 9.6.2. sar 9.6.3. pidstat 9.6.4. DTrace 9.6.5. SystemTap Spis treści 445 446 447 447 447 448 449 449 450 452 452 453 454 454 454 455 456 456 457 458 458 458 465 466 469 473 473 474 475 476 478 479 480 481 481 481 483 484 484 493 495 495 505 Kup książkęPoleć książkę Spis treści 9.6.6. perf 9.6.7. iotop 9.6.8. iosnoop 9.6.9. blktrace 9.6.10. MegaCli 9.6.11. smartctl 9.6.12. Wizualizacje 9.7. Eksperymenty 9.7.1. Ad hoc 9.7.2. W(cid:273)asne generatory obci(cid:230)(cid:318)enia 9.7.3. Narz(cid:250)dzia mikrotestów wydajno(cid:295)ci 9.7.4. Przyk(cid:273)ad losowego odczytu 9.8. Dostrajanie 9.8.1. Modyfikowalne parametry systemu operacyjnego 9.8.2. Modyfikowalne parametry urz(cid:230)dzenia dyskowego 9.8.3. Modyfikowalne parametry kontrolera dysku 9.9. (cid:231)wiczenia 9.10. Odwo(cid:273)ania Rozdział 10. Sieć 10.1. Terminologia 10.2. Modele 10.2.1. Interfejs sieciowy 10.2.2. Kontroler 10.2.3. Stos protoko(cid:273)ów 10.3. Koncepcje 10.3.1. Sieci i routing 10.3.2. Protoko(cid:273)y 10.3.3. Hermetyzacja 10.3.4. Wielko(cid:295)(cid:232) pakietu 10.3.5. Opó(cid:316)nienie 10.3.6. Buforowanie 10.3.7. Dziennik po(cid:273)(cid:230)cze(cid:275) 10.3.8. Negocjacja interfejsu 10.3.9. Poziom wykorzystania 10.3.10. Po(cid:273)(cid:230)czenia lokalne 10.4. Architektura 10.4.1. Protoko(cid:273)y 10.4.2. Sprz(cid:250)t 10.4.3. Oprogramowanie 10.5. Metodologia 10.5.1. Metoda narz(cid:250)dzi 10.5.2. Metoda USE 10.5.3. Charakterystyka obci(cid:230)(cid:318)enia 10.5.4. Analiza opó(cid:316)nienia 13 505 506 509 512 514 515 516 520 520 520 521 521 522 523 525 525 525 527 529 530 530 531 531 532 532 532 533 534 534 535 537 537 538 538 539 539 539 543 545 550 550 551 552 553 Kup książkęPoleć książkę 14 Spis treści 10.5.5. Monitorowanie wydajno(cid:295)ci 10.5.6. Pods(cid:273)uchiwanie pakietów 10.5.7. Analiza TCP 10.5.8. Analiza dr(cid:230)(cid:318)(cid:230)ca 10.5.9. Statyczne dostosowanie wydajno(cid:295)ci 10.5.10. Kontrola zasobów 10.5.11. Mikrotesty wydajno(cid:295)ci 10.6. Analiza 10.6.1. netstat 10.6.2. sar 10.6.3. ifconfig 10.6.4. ip 10.6.5. nicstat 10.6.6. dladm 10.6.7. ping 10.6.8. traceroute 10.6.9. pathchar 10.6.10. tcpdump 10.6.11. snoop 10.6.12. Wireshark 10.6.13. Dtrace 10.6.14. SystemTap 10.6.15. perf 10.6.16. Inne narz(cid:250)dzia 10.7. Eksperymenty 10.7.1. iperf 10.8. Dostrajanie 10.8.1. Linux 10.8.2. Solaris 10.8.3. Konfiguracja 10.9. (cid:231)wiczenia 10.10. Odwo(cid:273)ania Rozdział 11. Przetwarzanie w chmurze 11.1. Wprowadzenie 11.1.1. Wspó(cid:273)czynnik cena/wydajno(cid:295)(cid:232) 11.1.2. Skalowalna architektura 11.1.3. Planowanie pojemno(cid:295)ci 11.1.4. Pami(cid:250)(cid:232) masowa 11.1.5. Multitenancy 11.2. Wirtualizacja systemu operacyjnego 11.2.1. Obci(cid:230)(cid:318)enie 11.2.2. Kontrola zasobów 11.2.3. Monitorowanie 554 555 556 557 557 558 559 559 560 566 568 569 569 570 571 572 573 573 575 578 578 592 592 593 594 594 595 595 598 601 602 603 605 606 606 607 608 610 610 611 613 615 619 Kup książkęPoleć książkę Spis treści 11.3. Wirtualizacja sprz(cid:250)towa 11.3.1. Obci(cid:230)(cid:318)enie 11.3.2. Kontrola zasobów 11.3.3. Monitorowanie 11.4. Porównania 11.5. (cid:231)wiczenia 11.6. Odwo(cid:273)ania Rozdział 12. Testy wydajności 12.1. Wprowadzenie 12.1.1. Dzia(cid:273)ania 12.1.2. Efektywne testy wydajno(cid:295)ci 12.1.3. Grzechy testów wydajno(cid:295)ci 12.2. Rodzaje testów wydajno(cid:295)ci 12.2.1. Mikrotesty wydajno(cid:295)ci 12.2.2. Symulacja 12.2.3. Powtarzalno(cid:295)(cid:232) 12.2.4. Standardy biznesowe 12.3. Metodologia 12.3.1. Pasywne testy wydajno(cid:295)ci 12.3.2. Aktywne testy wydajno(cid:295)ci 12.3.3. Profilowanie procesora 12.3.4. Metoda USE 12.3.5. Charakterystyka obci(cid:230)(cid:318)enia 12.3.6. W(cid:273)asne testy wydajno(cid:295)ci 12.3.7. Stopniowa zmiana obci(cid:230)(cid:318)enia 12.3.8. Sprawdzenie poprawno(cid:295)ci 12.3.9. Analiza statystyczna 12.4. Pytania dotycz(cid:230)ce testu wydajno(cid:295)ci 12.5. (cid:231)wiczenia 12.6. Odwo(cid:273)ania Rozdział 13. Studium przypadku 13.1. Studium przyk(cid:273)adu: czerwony wieloryb 13.1.1. Zdefiniowanie problemu 13.1.2. Pomoc techniczna 13.1.3. Rozpocz(cid:250)cie pracy 13.1.4. Wybierz w(cid:273)asn(cid:230) drog(cid:250) 13.1.5. Metoda USE 13.1.6. Czy to ju(cid:318) koniec? 13.1.7. Podej(cid:295)cie drugie 13.1.8. Podstawy 13.1.9. Zignorowanie czerwonego wieloryba 13.1.10. Sprawdzenie j(cid:230)dra 15 625 627 634 637 644 646 647 649 650 650 651 653 660 660 662 663 663 665 665 667 669 671 671 671 672 674 674 676 678 678 681 681 682 683 684 686 688 691 691 693 694 694 Kup książkęPoleć książkę 16 Spis treści 13.1.11. Dlaczego? 13.1.12. Epilog 13.2. Komentarze 13.3. Informacje dodatkowe 13.4. Odwo(cid:273)ania Dodatek A Metoda USE dla systemu Linux Zasoby fizyczne Zasoby programowe Odwo(cid:273)ania Dodatek B Metoda USE dla systemu Solaris Zasoby fizyczne Zasoby programowe Odwo(cid:273)ania Dodatek C Polecenie sar Linux Solaris Dodatek D Polecenie DTrace Dostawca syscall Dostawca proc Dostawca profile Dostawca sched Dostawca fbt Dostawca pid Dostawca io Dostawca sysinfo Dostawca vminfo Dostawca ip Dostawca tcp Dostawca UDP Dodatek E Od DTrace do SystemTap Funkcjonalno(cid:295)(cid:232) Terminologia Sondy Wbudowane zmienne Funkcje Przyk(cid:273)ad 1.: Wy(cid:295)wietlenie sond syscall:::entry Przyk(cid:273)ad 2.: Podsumowanie wielko(cid:295)ci zwrotnej wywo(cid:273)ania read() Przyk(cid:273)ad 3.: Zliczanie wywo(cid:273)a(cid:275) systemowych wed(cid:273)ug nazwy procesu 696 698 699 700 700 701 702 705 706 707 707 710 711 713 713 714 715 715 718 718 720 720 721 722 722 723 723 723 724 725 725 726 726 727 727 728 728 730 Kup książkęPoleć książkę Spis treści Przyk(cid:273)ad 4.: Zliczanie wywo(cid:273)a(cid:275) systemowych wed(cid:273)ug nazwy wywo(cid:273)ania systemowego dla procesu o identyfikatorze 123 Przyk(cid:273)ad 5.: Zliczanie wywo(cid:273)a(cid:275) systemowych wed(cid:273)ug nazwy wywo(cid:273)ania systemowego dla procesu o nazwie httpd Przyk(cid:273)ad 6.: Monitorowanie wywo(cid:273)ania open() wraz z nazw(cid:230) procesu i (cid:295)cie(cid:318)ki Przyk(cid:273)ad 7.: Podsumowanie opó(cid:316)nienia read() dla procesów mysqld Przyk(cid:273)ad 8.: Monitorowanie nowych procesów wraz z nazw(cid:230) procesu i argumentami Przyk(cid:273)ad 9.: Monitorowanie stosów j(cid:230)dra z cz(cid:250)stotliwo(cid:295)ci(cid:230) 100 Hz Odwo(cid:273)ania Dodatek F Odpowiedzi do wybranych ćwiczeń Rozdzia(cid:273) 2. „Metodologia” Rozdzia(cid:273) 3. „Systemy operacyjne” Rozdzia(cid:273) 6. „Procesory” Rozdzia(cid:273) 7. „Pami(cid:250)(cid:232)” Rozdzia(cid:273) 8. „Systemy plików” Rozdzia(cid:273) 9. „Dyski” Rozdzia(cid:273) 11. „Przetwarzanie w chmurze” Dodatek G Wydajność systemów: kto jest kim? Słowniczek Bibliografia Skorowidz 17 731 731 732 732 733 733 733 735 735 735 735 736 736 737 737 739 743 749 755 Kup książkęPoleć książkę 18 Spis treści Kup książkęPoleć książkę 5 Aplikacje Najlepsze miejsce dostosowania wydajno(cid:295)ci znajduje si(cid:250) w pobli(cid:318)u wykonywanej pracy, to znaczy w aplikacjach. Obejmuj(cid:230) one bazy danych, serwery WWW, serwery aplikacji, programy przeznaczone do równowa(cid:318)enia obci(cid:230)(cid:318)enia, serwery plików itd. W kolejnych rozdzia(cid:273)ach b(cid:250)dziemy zajmowa(cid:232) si(cid:250) aplikacjami z perspektywy konsumowanych przez nie zasobów: procesora, pami(cid:250)ci, systemów plików, dysków i sieci. Natomiast w tym rozdziale przyjrzymy si(cid:250) samym aplikacjom. Aplikacje mog(cid:230) by(cid:232) niezwykle skomplikowane, zw(cid:273)aszcza w (cid:295)rodowiskach aplikacji rozproszonych, sk(cid:273)adaj(cid:230)cych si(cid:250) z wielu komponentów. Analiza wewn(cid:250)trznych sk(cid:273)adni- ków aplikacji to najcz(cid:250)(cid:295)ciej zadanie dla programistów aplikacji, którzy w tym celu mog(cid:230) korzysta(cid:232) z opracowanych przez firmy trzecie narz(cid:250)dzi introspekcji. Z kolei dla osób zajmuj(cid:230)cych si(cid:250) wydajno(cid:295)ci(cid:230) systemów, mi(cid:250)dzy innymi administratorów systemu i analityków wydajno(cid:295)ci aplikacji, oznacza to przeprowadzenie konfiguracji aplikacji w taki sposób, aby jak najlepiej wykorzysta(cid:232) zasoby systemowe. Ponadto konieczne jest przygotowanie charakterystyki pokazuj(cid:230)cej, jak aplikacja u(cid:318)ywa systemu, oraz przeprowadzenie analizy najcz(cid:250)(cid:295)ciej wyst(cid:250)puj(cid:230)cych patologii. W tym rozdziale koncentrujemy si(cid:250) na podstawach aplikacji, fundamentalnych zasadach dotycz(cid:230)cych ich wydajno(cid:295)ci, j(cid:250)zykach programowania, kompilatorach i stra- tegiach stosowanych podczas ogólnej analizy wydajno(cid:295)ci aplikacji. 189 Kup książkęPoleć książkę 190 Rozdział 5 (cid:31) Aplikacje 5.1. Podstawy dotyczące aplikacji Przed przej(cid:295)ciem do zagadnie(cid:275) zwi(cid:230)zanych z wydajno(cid:295)ci(cid:230) aplikacji w pierwszej ko- lejno(cid:295)ci nale(cid:318)y pozna(cid:232) rol(cid:250) aplikacji, jej podstawow(cid:230) charakterystyk(cid:250) oraz ekosystem w przemy(cid:295)le. W ten sposób powstanie kontekst, w którym b(cid:250)dziesz móg(cid:273) pozna(cid:232) dzia(cid:273)anie aplikacji. Zyskasz ponadto mo(cid:318)liwo(cid:295)(cid:232) przybli(cid:318)enia sobie najcz(cid:250)(cid:295)ciej wyst(cid:250)- puj(cid:230)cych kwestii z zakresu wydajno(cid:295)ci, a tak(cid:318)e mo(cid:318)liwo(cid:295)(cid:232) dostosowania wydajno(cid:295)ci aplikacji oraz przeprowadzenia dalszej analizy. Aby dowiedzie(cid:232) si(cid:250), jak wygl(cid:230)da wspo- mniany kontekst aplikacji, spróbuj udzieli(cid:232) odpowiedzi na nast(cid:250)puj(cid:230)ce pytania: (cid:31) Funkcja. Jaka jest rola aplikacji? Czy to jest serwer bazy danych, serwer WWW, program do równowa(cid:318)enia obci(cid:230)(cid:318)enia, serwer plików itd.? (cid:31) Operacja. Jakiego rodzaju operacje i (cid:318)(cid:230)dania s(cid:230) wykonywane przez aplikacje? W przypadku baz danych b(cid:250)d(cid:230) to zapytania (i polecenia), z kolei serwery WWW wykonuj(cid:230) (cid:318)(cid:230)dania HTTP itd. Operacje mog(cid:230) by(cid:232) mierzone jako cz(cid:250)stotliwo(cid:295)(cid:232), co pozwala sprawdzi(cid:232) obci(cid:230)(cid:318)enie i zaplanowa(cid:232) pojemno(cid:295)(cid:232). (cid:31) Tryb procesora. Na jakim poziomie zosta(cid:273)a zaimplementowana aplikacja: jako oprogramowanie u(cid:318)ytkownika czy j(cid:230)dra? Wi(cid:250)kszo(cid:295)(cid:232) aplikacji jest przeznaczona do dzia(cid:273)ania na poziomie u(cid:318)ytkownika, jest uruchamiana jako jeden proces lub wi(cid:250)cej procesów. Niektóre aplikacje s(cid:230) jednak implementowane jako us(cid:273)ugi dla j(cid:230)dra, na przyk(cid:273)ad NFS. (cid:31) Konfiguracja. W jaki sposób jest skonfigurowana aplikacja i dlaczego w(cid:273)a(cid:295)nie tak? Tego rodzaju informacje mo(cid:318)na znale(cid:316)(cid:232) w pliku konfiguracyjnym lub za pomoc(cid:230) narz(cid:250)dzi administracyjnych. Sprawd(cid:316), czy zmianie uleg(cid:273)y jakiekolwiek modyfikowalne parametry zwi(cid:230)zane z wydajno(cid:295)ci(cid:230), mi(cid:250)dzy innymi wielko(cid:295)ci buforów, pami(cid:250)ci podr(cid:250)cznej, mo(cid:318)liwo(cid:295)(cid:232) równoczesnego dzia(cid:273)ania (procesów lub w(cid:230)tków) b(cid:230)d(cid:316) te(cid:318) inne opcje. (cid:31) Metryki. Czy aplikacja dostarcza jakichkolwiek metryk, na przyk(cid:273)ad cz(cid:250)stotliwo(cid:295)ci operacji? Tego rodzaju metryki mog(cid:230) by(cid:232) podawane w postaci do(cid:273)(cid:230)czonych narz(cid:250)dzi, opracowanych przez firm(cid:250) trzeci(cid:230), (cid:318)(cid:230)da(cid:275) API lub wskutek przetwarzania dzienników zdarze(cid:275) generowanych podczas dzia(cid:273)ania aplikacji. (cid:31) Dzienniki zdarze(cid:275). Czy aplikacja tworzy dzienniki zdarze(cid:275)? Tworzenie jakich dzienników zdarze(cid:275) w(cid:273)(cid:230)czono w aplikacji? Jakie metryki dotycz(cid:230)ce wydajno(cid:295)ci, na przyk(cid:273)ad opó(cid:316)nienie, s(cid:230) dost(cid:250)pne we wspomnianych dziennikach zdarze(cid:275)? Na przyk(cid:273)ad baza danych MySQL zawiera dziennik zdarze(cid:275) rejestruj(cid:230)cy wolno wykonywane zapytania. Dostarcza on niezwykle cennych informacji szczegó(cid:273)owych o wydajno(cid:295)ci ka(cid:318)dego zapytania, którego wykonanie trwa(cid:273)o d(cid:273)u(cid:318)ej ni(cid:318) zdefiniowany czas. (cid:31) Wersja. Czy aplikacja jest w najnowszej wersji? Czy w informacjach o nowym wydaniu znajduj(cid:230) si(cid:250) jakiekolwiek wzmianki o poprawkach lub usprawnieniach w zakresie wydajno(cid:295)ci jej dzia(cid:273)ania? (cid:31) B(cid:273)(cid:250)dy. Czy dla aplikacji istnieje baza danych pozwalaj(cid:230)ca na zg(cid:273)aszanie b(cid:273)(cid:250)dów? Czy w tej bazie danych znajduj(cid:230) si(cid:250) informacje o b(cid:273)(cid:250)dach „wydajno(cid:295)ci” w u(cid:318)ywanej wersji aplikacji? Je(cid:318)eli uwa(cid:318)asz, (cid:318)e wydajno(cid:295)(cid:232) dzia(cid:273)ania aplikacji Kup książkęPoleć książkę 5.1. Podstawy dotyczące aplikacji 191 jest niezadowalaj(cid:230)ca, przejrzyj tego rodzaju baz(cid:250) b(cid:273)(cid:250)dów i zobacz, czy jakakolwiek podobna kwestia zosta(cid:273)a wcze(cid:295)niej zg(cid:273)oszona, jak by(cid:273)a analizowana oraz co zrobiono, aby naprawi(cid:232) b(cid:273)(cid:230)d. (cid:31) Spo(cid:273)eczno(cid:295)(cid:232). Czy dla danej aplikacji istnieje spo(cid:273)eczno(cid:295)(cid:232), z któr(cid:230) mo(cid:318)na dzieli(cid:232) si(cid:250) odkrytymi problemami dotycz(cid:230)cymi wydajno(cid:295)ci? Spo(cid:273)eczno(cid:295)(cid:232) mo(cid:318)e obejmowa(cid:232) mi(cid:250)dzy innymi fora, blogi, czaty (IRC), spotkania i konferencje. Po spotkaniach i konferencjach najcz(cid:250)(cid:295)ciej s(cid:230) zamieszczane w internecie prezentacje i materia(cid:273)y wideo, które jeszcze przez wiele lat mog(cid:230) stanowi(cid:232) u(cid:318)yteczne zasoby. Ponadto mo(cid:318)e istnie(cid:232) tak zwany mened(cid:318)er spo(cid:273)eczno(cid:295)ci, który b(cid:250)dzie informowa(cid:273) o uaktualnieniach i nowo(cid:295)ciach. (cid:31) Ksi(cid:230)(cid:318)ki. Czy danej aplikacji po(cid:295)wi(cid:250)cono jakiekolwiek ksi(cid:230)(cid:318)ki, na przyk(cid:273)ad dotycz(cid:230)ce wydajno(cid:295)ci? (cid:31) Eksperci. Czy istniej(cid:230) jacykolwiek uznani eksperci dla danej aplikacji? Poznanie ich nazwisk mo(cid:318)e pomóc w wyszukaniu przygotowanych przez nich materia(cid:273)ów. Niezale(cid:318)nie od (cid:316)ród(cid:273)a Twoim celem jest ogólne poznanie aplikacji — do czego jest przeznaczona, w jaki sposób dzia(cid:273)a oraz jak(cid:230) wydajno(cid:295)(cid:232) oferuje. Wr(cid:250)cz nieocenionym zasobem jest wykres funkcjonalny (o ile b(cid:250)dziesz móg(cid:273) taki znale(cid:316)(cid:232)), pokazuj(cid:230)cy we- wn(cid:250)trzne komponenty aplikacji. W kolejnych punktach zostan(cid:230) przedstawione nast(cid:250)pne podstawowe informacje do- tycz(cid:230)ce aplikacji: definiowania celów, optymalizacji, monitorowania oraz notacji „du(cid:318)e O”. 5.1.1. Cele Dzi(cid:250)ki zdefiniowaniu celów w zakresie wydajno(cid:295)ci mo(cid:318)na wyznaczy(cid:232) kierunek pro- wadzonej analizy wydajno(cid:295)ci oraz wybra(cid:232) odpowiednie kroki, które trzeba b(cid:250)dzie podj(cid:230)(cid:232). Bez wyra(cid:316)nego zdefiniowania celów istnieje ryzyko, (cid:318)e analiza wydajno(cid:295)ci zamieni si(cid:250) w b(cid:273)(cid:230)dzenie po omacku w nadziei na znalezienie odpowiedniego rozwi(cid:230)zania. W przypadku wydajno(cid:295)ci aplikacji prac(cid:250) mo(cid:318)na rozpocz(cid:230)(cid:232) od sprawdzenia operacji wykonywanych przez aplikacj(cid:250) (jak wcze(cid:295)niej opisano) oraz zdefiniowania celów wy- dajno(cid:295)ci. Wspomnianymi celami mog(cid:230) by(cid:232): (cid:31) Opó(cid:316)nienie. Maksymalne skrócenie czasu udzielania odpowiedzi przez aplikacj(cid:250). (cid:31) Przepustowo(cid:295)(cid:232). Uzyskanie jak najwi(cid:250)kszej cz(cid:250)stotliwo(cid:295)ci wykonywania operacji lub najwi(cid:250)kszego mo(cid:318)liwego transferu danych. (cid:31) Wykorzystanie zasobów. Efektywno(cid:295)(cid:232) dla danego obci(cid:230)(cid:318)enia aplikacji. Znacznie lepiej b(cid:250)dzie, je(cid:295)li cele wydajno(cid:295)ci oka(cid:318)(cid:230) si(cid:250) mo(cid:318)liwe do zmierzenia za pomo- c(cid:230) metryk spe(cid:273)niaj(cid:230)cych wymagania biznesowe i dotycz(cid:230)ce jako(cid:295)ci us(cid:273)ugi, na przyk(cid:273)ad: (cid:31) (cid:294)rednie opó(cid:316)nienie w udzielaniu odpowiedzi przez aplikacj(cid:250) wynosi 5 ms. (cid:31) 95 (cid:318)(cid:230)da(cid:275) jest obs(cid:273)ugiwanych w czasie krótszym ni(cid:318) 100 ms. Kup książkęPoleć książkę 192 Rozdział 5 (cid:31) Aplikacje (cid:31) Eliminacja opó(cid:316)nienia zwi(cid:230)zanego z elementami odstaj(cid:230)cymi: 0 (cid:318)(cid:230)da(cid:275), których wykonanie zajmuje ponad 1000 ms. (cid:31) Maksymalna przepustowo(cid:295)(cid:232) wynosi 10 000 (cid:318)(cid:230)da(cid:275) aplikacji kierowanych co sekund(cid:250) do serwera. (cid:31) (cid:294)redni poziom wykorzystania dysku wynosi poni(cid:318)ej 50 dla 10 000 (cid:318)(cid:230)da(cid:275) wykonywanych przez aplikacj(cid:250) co sekund(cid:250). Po wybraniu odpowiednich celów mo(cid:318)na przyst(cid:230)pi(cid:232) do pracy polegaj(cid:230)cej na usuni(cid:250)ciu wszystkich czynników uniemo(cid:318)liwiaj(cid:230)cych osi(cid:230)gni(cid:250)cie wyznaczonych celów. W przy- padku opó(cid:316)nienia czynnikiem ograniczaj(cid:230)cym mog(cid:230) by(cid:232) dyskowe lub sieciowe operacje wej(cid:295)cia-wyj(cid:295)cia, natomiast dla celu zwi(cid:230)zanego z przepustowo(cid:295)ci(cid:230) przeszkod(cid:230) mo(cid:318)e okaza(cid:232) si(cid:250) poziom u(cid:318)ycia procesora. Strategie omówione w tym i kolejnych rozdzia(cid:273)ach pomog(cid:230) w identyfikacji czynników ograniczaj(cid:230)cych. W przypadku celów zwi(cid:230)zanych z przepustowo(cid:295)ci(cid:230) warto zwróci(cid:232) uwag(cid:250), (cid:318)e nie wszystkie operacje s(cid:230) równe pod wzgl(cid:250)dem wydajno(cid:295)ci lub kosztu. Je(cid:318)eli celem jest osi(cid:230)gni(cid:250)cie okre(cid:295)lonej cz(cid:250)stotliwo(cid:295)ci wykonywania operacji, bardzo wa(cid:318)ne mo(cid:318)e by(cid:232) okre(cid:295)lenie rodzaju operacji. Istnieje prawdopodobie(cid:275)stwo wyst(cid:230)pienia rozbie(cid:318)no(cid:295)ci na podstawie obci(cid:230)(cid:318)enia oczekiwanego i zmierzonego. W podrozdziale 5.2 „Techniki sprawdzania wydajno(cid:295)ci aplikacji” b(cid:250)d(cid:230) omówione najcz(cid:250)(cid:295)ciej stosowane metody poprawy wydajno(cid:295)ci dzia(cid:273)ania aplikacji. Niektóre z nich mog(cid:230) mie(cid:232) sens dla jednej grupy celów, ale ju(cid:318) nie dla innej. Na przyk(cid:273)ad zwi(cid:250)kszenie operacji wej(cid:295)cia-wyj(cid:295)cia mo(cid:318)e poprawi(cid:232) przepustowo(cid:295)(cid:232), ale kosztem wi(cid:250)kszego opó(cid:316)nie- nia. Podczas dostrajania wydajno(cid:295)ci aplikacji pami(cid:250)taj o zdefiniowanych celach i stosuj odpowiednie rozwi(cid:230)zania pozwalaj(cid:230)ce na ich osi(cid:230)gni(cid:250)cie. 5.1.2. Optymalizacja najczęstszego sposobu użycia aplikacji Wewn(cid:250)trzne komponenty aplikacji mog(cid:230) by(cid:232) naprawd(cid:250) skomplikowane i zawiera(cid:232) wiele ró(cid:318)nych, mo(cid:318)liwych (cid:295)cie(cid:318)ek kodu oraz typów zachowania. To mo(cid:318)e by(cid:232) szczególnie wi- doczne w trakcie analizy kodu (cid:316)ród(cid:273)owego: aplikacje nierzadko sk(cid:273)adaj(cid:230) si(cid:250) z dziesi(cid:230)tek tysi(cid:250)cy wierszy kodu, natomiast w przypadku j(cid:230)dra systemu operacyjnego b(cid:250)d(cid:230) to ju(cid:318) setki tysi(cid:250)cy. Losowe wybranie obszaru optymalizacji mo(cid:318)e by(cid:232) przyczyn(cid:230) ogromnej pracy, której skutkiem b(cid:250)dzie jedynie niewielki wzrost wydajno(cid:295)ci dzia(cid:273)ania aplikacji. Jednym ze sposobów efektywnego poprawienia wydajno(cid:295)ci aplikacji jest wyszukanie najcz(cid:250)(cid:295)ciej stosowanej (cid:295)cie(cid:318)ki kodu dla danego obci(cid:230)(cid:318)enia produkcyjnego i przyst(cid:230)- pienie do jej usprawnienia. Je(cid:318)eli czynnikiem ograniczaj(cid:230)cym aplikacj(cid:250) jest procesor, to mo(cid:318)e oznacza(cid:232), (cid:318)e (cid:295)cie(cid:318)ki kodu du(cid:318)(cid:230) ilo(cid:295)(cid:232) czasu przebywaj(cid:230) w procesorze. Przy ograni- czeniu zwi(cid:230)zanym z operacjami wej(cid:295)cia-wyj(cid:295)cia warto wyszuka(cid:232) (cid:295)cie(cid:318)ki kodu, które najcz(cid:250)(cid:295)ciej prowadz(cid:230) do powstania operacji wej(cid:295)cia-wyj(cid:295)cia. Wspomniane (cid:295)cie(cid:318)ki mo(cid:318)na znale(cid:316)(cid:232) dzi(cid:250)ki analizie i profilowaniu aplikacji, mi(cid:250)dzy innymi (cid:295)ledzeniu stosu, co b(cid:250)dzie omówione w dalszych rozdzia(cid:273)ach. Jeszcze lepsz(cid:230) mo(cid:318)liwo(cid:295)(cid:232) poznania najcz(cid:250)stszego sposobu u(cid:318)ycia aplikacji daj(cid:230) oferowane przez ni(cid:230) narz(cid:250)dzia monitorowania. Kup książkęPoleć książkę 5.1. Podstawy dotyczące aplikacji 193 5.1.3. Monitorowanie Jak zosta(cid:273)o to omówione w wielu rozdzia(cid:273)ach niniejszej ksi(cid:230)(cid:318)ki, najwi(cid:250)kszy przyrost wydajno(cid:295)ci w systemie operacyjnym mo(cid:318)na uzyska(cid:232) przez eliminacj(cid:250) niepotrzebnie wykonywanej pracy. Ta sama zasada dotyczy aplikacji. Ten fakt bardzo cz(cid:250)sto jest przeoczany podczas wyboru aplikacji na podstawie jej wydajno(cid:295)ci. Je(cid:318)eli przeprowadzone testy wydajno(cid:295)ci pokaza(cid:273)y, (cid:318)e aplikacja A jest o 10 szybsza od B, to kusz(cid:230)ce mo(cid:318)e by(cid:232) wybranie w(cid:273)a(cid:295)nie aplikacji A. Jednak je(cid:295)li aplikacja B w przeciwie(cid:275)stwie do A dostarcza bogatego zestawu narz(cid:250)dzi monitorowania, to ist- nieje prawdopodobie(cid:275)stwo, (cid:318)e w d(cid:273)u(cid:318)szej perspektywie czasu lepszym wyborem b(cid:250)dzie aplikacja B. Dzi(cid:250)ki wspomnianym narz(cid:250)dziom monitorowania b(cid:250)dzie mo(cid:318)na wyszuka(cid:232) i wyeliminowa(cid:232) niepotrzebnie wykonywan(cid:230) prac(cid:250), a ponadto lepiej pozna(cid:232) i dostosowa(cid:232) wykonywane operacje. Osi(cid:230)gni(cid:250)ta wtedy poprawa wydajno(cid:295)ci mo(cid:318)e przekracza(cid:232) po- cz(cid:230)tkow(cid:230) ró(cid:318)nic(cid:250), wynosz(cid:230)c(cid:230) 10 . 5.1.4. Notacja „duże O” Powszechnie traktowana jako dziedzina naukowa, notacja „du(cid:318)e O” jest wykorzysty- wana do analizy poziomu skomplikowania algorytmów oraz modelowania sposobu ich dzia(cid:273)ania, gdy nast(cid:230)pi wzrost zbioru danych wej(cid:295)ciowych. Podczas tworzenia aplikacji, dzi(cid:250)ki wspomnianej analizie, programi(cid:295)ci zyskuj(cid:230) wi(cid:250)c mo(cid:318)liwo(cid:295)(cid:232) wyboru efektywnych algorytmów (patrz odwo(cid:273)ania [Knuth 76] i [Knuth 97] na ko(cid:275)cu rozdzia(cid:273)u). Najcz(cid:250)(cid:295)ciej stosowane algorytmy i notacje „du(cid:318)e O” zosta(cid:273)y wymienione w tabeli 5.1. Tabela 5.1. Przykładowe notacje „duże O” Notacja O(1) O(log n) O(n) Przykład Test boolowski. Przeszukiwanie binarne posortowanej tablicy. Przeszukiwanie liniowe listy połączonej. O(n log n) Szybkie sortowanie (przypadek średni). O(n^2) O(2^n) O(n!) Sortowanie bąbelkowe (przypadek średni). Dzielenie liczb na czynniki pierwsze, wzrost wykładniczy. Problem komiwojażera. Omawiana notacja pozwala programistom oszacowa(cid:232) popraw(cid:250) szybko(cid:295)ci dzia(cid:273)ania ró(cid:318)nych algorytmów i ustali(cid:232), które obszary kodu prowadz(cid:230) do najwi(cid:250)kszych przyro- stów w wydajno(cid:295)ci dzia(cid:273)ania. Na przyk(cid:273)ad w przypadku posortowanej tablicy 100 ele- mentów ró(cid:318)nica mi(cid:250)dzy operacjami wyszukiwania liniowego i binarnego ma wspó(cid:273)czyn- nik wynosz(cid:230)cy 21 (100/log(100)). Wydajno(cid:295)(cid:232) algorytmów wymienionych w tabeli 5.1 pokazano na rysunku 5.1, na którym wida(cid:232) tak(cid:318)e ich trend podczas skalowania. Kup książkęPoleć książkę 194 Rozdział 5 (cid:31) Aplikacje Rysunek 5.1. Czas działania kontra wielkość danych wejściowych w przypadku różnych algorytmów Tego rodzaju klasyfikacja pomaga analitykowi wydajno(cid:295)ci systemu przekona(cid:232) si(cid:250), (cid:318)e pewne algorytmy b(cid:250)d(cid:230) bardzo kiepsko dzia(cid:273)a(cid:273)y podczas skalowania. Problemy zwi(cid:230)- zane z wydajno(cid:295)ci(cid:230) mog(cid:230) si(cid:250) pojawi(cid:232), gdy aplikacja b(cid:250)dzie musia(cid:273)a obs(cid:273)u(cid:318)y(cid:232) wi(cid:250)ksz(cid:230) liczb(cid:250) u(cid:318)ytkowników lub obiektów danych ni(cid:318) wcze(cid:295)niej. Na tym etapie algorytm taki jak O(n^2) mo(cid:318)e okaza(cid:232) si(cid:250) patologiczny. Rozwi(cid:230)zania dost(cid:250)pne dla programistów to mi(cid:250)dzy innymi zastosowanie znacznie efektywniejszego algorytmu lub inne partycjono- wanie danych. Notacja „du(cid:318)e O” ignoruje pewne sta(cid:273)e koszty zwi(cid:230)zane z wyborem poszczególnych algorytmów. W przypadkach, gdzie n (wielko(cid:295)(cid:232) danych wej(cid:295)ciowych) jest ma(cid:273)e, wspo- mniane koszty mog(cid:230) by(cid:232) dominuj(cid:230)ce. 5.2. Techniki sprawdzania wydajności aplikacji W tym podrozdziale zostan(cid:230) przedstawione niektóre najcz(cid:250)(cid:295)ciej stosowane techniki umo(cid:318)liwiaj(cid:230)ce popraw(cid:250) wydajno(cid:295)ci dzia(cid:273)ania aplikacji: wybór wielko(cid:295)ci operacji wej(cid:295)cia- -wyj(cid:295)cia, stosowanie pami(cid:250)ci podr(cid:250)cznej, buforowania, techniki odpytania (ang. polling), wspó(cid:273)bie(cid:318)no(cid:295)ci i jednoczesnego wykonywania operacji, a tak(cid:318)e nieblokuj(cid:230)cych operacji wej(cid:295)cia-wyj(cid:295)cia i powi(cid:230)zania z procesorem. W dokumentacji aplikacji znajdziesz infor- macje, które z wymienionych technik mog(cid:230) by(cid:232) stosowane, a tak(cid:318)e wszelkie funkcje dodatkowe, charakterystyczne dla danej aplikacji. 5.2.1. Ustalenie wielkości operacji wejścia-wyjścia Koszt zwi(cid:230)zany z przeprowadzaniem operacji wej(cid:295)cia-wyj(cid:295)cia obejmuje inicjalizacj(cid:250) buforów, wykonanie wywo(cid:273)ania systemowego, prze(cid:273)(cid:230)czenie kontekstu, alokacj(cid:250) me- tadanych j(cid:230)dra, sprawdzenie ogranicze(cid:275) i uprawnie(cid:275) procesu, mapowanie adresów na urz(cid:230)dzenia, wykonanie kodu j(cid:230)dra i sterownika w celu przeprowadzenia operacji wej(cid:295)cia-wyj(cid:295)cia i wreszcie zwolnienie metadanych oraz buforów. Wspomniany koszt inicjalizacji dotyczy zarówno ma(cid:273)ych, jak i du(cid:318)ych operacji wej(cid:295)cia-wyj(cid:295)cia. Z perspek- tywy wydajno(cid:295)ci — im wi(cid:250)cej danych jest przekazywanych w trakcie ka(cid:318)dej operacji wej(cid:295)cia-wyj(cid:295)cia, tym lepiej. Kup książkęPoleć książkę 5.2. Techniki sprawdzania wydajności aplikacji 195 Wzrost wielko(cid:295)ci operacji wej(cid:295)cia-wyj(cid:295)cia to najcz(cid:250)(cid:295)ciej stosowana w aplikacjach strategia poprawy przepustowo(cid:295)ci. Gdy we(cid:316)mie si(cid:250) pod uwag(cid:250) sta(cid:273)y koszt operacji wej(cid:295)cia-wyj(cid:295)cia, zwykle znacznie efektywniejsze b(cid:250)dzie przekazanie 128 KB danych w postaci pojedynczej operacji wej(cid:295)cia-wyj(cid:295)cia ni(cid:318) 128 operacji o wielko(cid:295)ci 1 KB. Dys- kowe operacje wej(cid:295)cia-wyj(cid:295)cia charakteryzuj(cid:230) si(cid:250) szczególnie wysokim kosztem po- jedynczej operacji, co wi(cid:230)(cid:318)e si(cid:250) z czasem wyszukiwania danych. Istnieje sytuacja, w której aplikacja nie potrzebuje wi(cid:250)kszych operacji wej(cid:295)cia- wyj(cid:295)cia. Baza danych wykonuj(cid:230)ca losowy odczyt 8 KB danych b(cid:250)dzie dzia(cid:273)a(cid:273)a wolniej w przypadku operacji wej(cid:295)cia-wyj(cid:295)cia o wielko(cid:295)ci 128 KB, poniewa(cid:318) transfer 120 KB b(cid:250)dzie zmarnowany. Tutaj pojawia si(cid:250) kwestia opó(cid:316)nienia wej(cid:295)cia-wyj(cid:295)cia, które mo(cid:318)na ograniczy(cid:232) przez zastosowanie mniejszej wielko(cid:295)ci operacji wej(cid:295)cia-wyj(cid:295)cia, bardziej odpowiadaj(cid:230)cej (cid:318)(cid:230)daniu wykonywanemu przez aplikacj(cid:250). Niepotrzebnie du(cid:318)e operacje wej(cid:295)cia-wyj(cid:295)cia marnuj(cid:230) tak(cid:318)e przestrze(cid:275) bufora. 5.2.2. Pamięć podręczna System operacyjny stosuje ró(cid:318)ne rodzaje pami(cid:250)ci podr(cid:250)cznej w celu poprawy wydaj- no(cid:295)ci odczytu danych z systemu plików oraz alokacji pami(cid:250)ci. Aplikacje bardzo cz(cid:250)sto u(cid:318)ywaj(cid:230) pami(cid:250)ci podr(cid:250)cznych z podobnych powodów. Zamiast za ka(cid:318)dym razem wyko- nywa(cid:232) kosztown(cid:230) operacj(cid:250), wyniki najcz(cid:250)(cid:295)ciej przeprowadzanych operacji mog(cid:230) by(cid:232) buforowane lokalnie w celu pó(cid:316)niejszego u(cid:318)ycia. Bardzo dobrym przyk(cid:273)adem b(cid:250)dzie tutaj bufor bazy danych, który przechowuje wyniki najcz(cid:250)(cid:295)ciej wykonywanych zapyta(cid:275). Podczas wdra(cid:318)ania aplikacji cz(cid:250)sto wykonywanym zadaniem jest okre(cid:295)lenie do- st(cid:250)pnych lub w(cid:273)(cid:230)czonych pami(cid:250)ci podr(cid:250)cznych, a nast(cid:250)pnie konfiguracja ich wielko(cid:295)ci w sposób najbardziej dopasowany do systemu. Bardzo wa(cid:318)nym aspektem pami(cid:250)ci podr(cid:250)cznej jest sposób zachowania spójno(cid:295)ci, tak aby operacje wyszukiwania nie zwraca(cid:273)y nieaktualnych danych. Nosi to nazw(cid:250) kohe- rencji pami(cid:250)ci podr(cid:250)cznej i mo(cid:318)e by(cid:232) operacj(cid:230) kosztown(cid:230) do wykonania — najlepiej, (cid:318)eby koszt nie przekracza(cid:273) korzy(cid:295)ci wynikaj(cid:230)cych z u(cid:318)ycia pami(cid:250)ci podr(cid:250)cznej. Pami(cid:250)(cid:232) podr(cid:250)czna poprawia wydajno(cid:295)(cid:232) odczytu, natomiast do poprawienia wydaj- no(cid:295)ci operacji zapisu bardzo cz(cid:250)sto stosowane s(cid:230) bufory. 5.2.3. Buforowanie W celu poprawienia wydajno(cid:295)ci zapisu dane mog(cid:230) by(cid:232) umieszczane w buforze przed ich przekazaniem na nast(cid:250)pny poziom. Takie rozwi(cid:230)zanie powoduje zwi(cid:250)kszenie wielko(cid:295)ci operacji wej(cid:295)cia-wyj(cid:295)cia, a tym samym jej efektywno(cid:295)ci. W zale(cid:318)no(cid:295)ci od typu operacji zapisu mo(cid:318)e si(cid:250) to wi(cid:230)za(cid:232) równie(cid:318) ze wzrostem opó(cid:316)nienia, poniewa(cid:318) pierwsze dane umieszczone w buforze czekaj(cid:230) na kolejne i dopiero pó(cid:316)niej b(cid:250)d(cid:230) przekazane dalej. Bufor cykliczny jest rodzajem sta(cid:273)ego bufora, który mo(cid:318)na wykorzystywa(cid:232) do nie- ustannych transferów mi(cid:250)dzy komponentami. Dzia(cid:273)a wi(cid:250)c jak bufor asynchroniczny. Tego rodzaju bufor jest implementowany za pomoc(cid:230) wska(cid:316)ników pocz(cid:230)tkowego i ko(cid:275)- cowego; s(cid:230) one przesuwane o ka(cid:318)dy komponent, gdy dane s(cid:230) dodawane lub usuwane. Kup książkęPoleć książkę 196 Rozdział 5 (cid:31) Aplikacje 5.2.4. Technika odpytywania Odpytywanie to technika, w której system czeka na wyst(cid:230)pienie zdarzenia, nieustan- nie sprawdzaj(cid:230)c stan zdarzenia w p(cid:250)tli, i stosuje pauzy mi(cid:250)dzy kolejnymi sprawdze- niami. Wraz z technik(cid:230) odpytywania pojawiaj(cid:230) si(cid:250) pewne potencjalne problemy do- tycz(cid:230)ce wydajno(cid:295)ci: (cid:31) kosztowne obci(cid:230)(cid:318)enie procesora wynikaj(cid:230)ce z regularnie powtarzaj(cid:230)cych si(cid:250) operacji sprawdze(cid:275), (cid:31) du(cid:318)e opó(cid:316)nienie mi(cid:250)dzy wyst(cid:230)pieniami zdarzenia i kolejnymi operacjami sprawdzenia. Je(cid:318)eli to rzeczywi(cid:295)cie b(cid:250)dzie problem wydajno(cid:295)ci, w aplikacjach mo(cid:318)na zmieni(cid:232) za- chowanie na nas(cid:273)uchiwanie wyst(cid:250)puj(cid:230)cych zdarze(cid:275). W takiej sytuacji aplikacja jest informowana natychmiast o zdarzeniu i wywo(cid:273)uje (cid:318)(cid:230)dan(cid:230) procedur(cid:250). Wywołanie systemowe poll() Istnieje wywo(cid:273)anie systemowe poll() przeznaczone do sprawdzania stanu deskryp- torów plików, co pe(cid:273)ni funkcj(cid:250) podobn(cid:230) do techniki odpytywania. Poniewa(cid:318) rozwi(cid:230)zanie jest oparte na zdarzeniach, nie dotyczy go koszt wydajno(cid:295)ci wyst(cid:250)puj(cid:230)cy w przypadku odpytywania. Interfejs wywo(cid:273)ania systemowego poll()obs(cid:273)uguje wiele deskryptorów plików umieszczonych w tablicy, co wymaga od aplikacji przeprowadzenia operacji skanowa- nia tablicy po wyst(cid:230)pieniu zdarzenia, aby znale(cid:316)(cid:232) powi(cid:230)zane z nim deskryptory pli- ków. Takie skanowanie mo(cid:318)na uzna(cid:232) za notacj(cid:250) „du(cid:318)e O” typu O(n) — patrz punkt 5.1.4. Obci(cid:230)(cid:318)enie zwi(cid:230)zane ze wspomnian(cid:230) operacj(cid:230) skanowania mo(cid:318)e sta(cid:232) si(cid:250) pro- blemem wydajno(cid:295)ci podczas skalowania. Dost(cid:250)pne s(cid:230) jeszcze inne interfejsy. Linux oferuje wywo(cid:273)anie epoll(), które pozwala na unikni(cid:250)cie skanowania, a tym samym mo(cid:318)na je okre(cid:295)li(cid:232) jako O(1). Z kolei Solaris posiada podobn(cid:230) funkcj(cid:250) o nazwie porty zdarze(cid:275), która u(cid:318)ywa port_get(3C) zamiast poll(). 5.2.5. Współbieżność i równoległość Systemy dzielenia czasu ((cid:273)(cid:230)cznie ze wszystkimi pochodnymi systemu UNIX) zapew- niaj(cid:230) wspó(cid:273)bie(cid:318)no(cid:295)(cid:232) programów, czyli mo(cid:318)liwo(cid:295)(cid:232) jednoczesnego wczytywania i dzia- (cid:273)ania wielu programów. Wprawdzie ich czasy dzia(cid:273)ania mog(cid:230) wzajemnie na siebie nachodzi(cid:232), ale programy niekoniecznie b(cid:250)d(cid:230) natychmiast wykonywane przez procesor. Ka(cid:318)dy ze wspomnianych programów mo(cid:318)e by(cid:232) procesem aplikacji. Poza wspó(cid:273)bie(cid:318)nym wykonywaniem ró(cid:318)nych aplikacji poszczególne funkcje w ra- mach aplikacji równie(cid:318) mog(cid:230) by(cid:232) wspó(cid:273)bie(cid:318)ne. Sta(cid:273)o si(cid:250) to mo(cid:318)liwe dzi(cid:250)ki u(cid:318)yciu wielu procesów (wieloprocesowo(cid:295)(cid:232)) lub w(cid:230)tków (wielow(cid:230)tkowo(cid:295)(cid:232)), z których ka(cid:318)dy wy- konuje swoje zadanie. Inne podej(cid:295)cie to wspó(cid:273)bie(cid:318)no(cid:295)(cid:232) oparta na zdarzeniach, w którym aplikacja obs(cid:273)uguje ró(cid:318)ne funkcje i prze(cid:273)(cid:230)cza si(cid:250) mi(cid:250)dzy nimi, gdy wyst(cid:250)puj(cid:230) odpowiednie zdarze- nia. Tego rodzaju podej(cid:295)cie jest u(cid:318)ywane na przyk(cid:273)ad w (cid:295)rodowisku uruchomieniowym Kup książkęPoleć książkę 5.2. Techniki sprawdzania wydajności aplikacji 197 Node.js. W ten sposób zapewniona zostaje wspó(cid:273)bie(cid:318)no(cid:295)(cid:232), ale odbywa si(cid:250) to w ramach pojedynczego w(cid:230)tku lub procesu, co na pewno przyczynia si(cid:250) do powstania w(cid:230)skiego gard(cid:273)a wydajno(cid:295)ci, poniewa(cid:318) mo(cid:318)e by(cid:232) wykorzystany tylko jeden procesor. Aby wykorzysta(cid:232) mo(cid:318)liwo(cid:295)ci oferowane przez system wieloprocesorowy, aplikacja musi u(cid:318)ywa(cid:232) jednocze(cid:295)nie wielu procesorów — nosi to nazw(cid:250) równoleg(cid:273)o(cid:295)ci. W aplikacji mo(cid:318)na osi(cid:230)gn(cid:230)(cid:232) równoleg(cid:273)o(cid:295)(cid:232) za pomoc(cid:230) wieloprocesowo(cid:295)ci lub wielow(cid:230)tkowo(cid:295)ci. Z po- wodów przedstawionych w rozdziale 6. „Procesory” wiele w(cid:230)tków (lub odpowiadaj(cid:230)cych im zada(cid:275)) oferuje znacznie wi(cid:250)ksz(cid:230) efektywno(cid:295)(cid:232) i dlatego preferowane jest zastosowanie w(cid:273)a(cid:295)nie takiego rozwi(cid:230)zania. Oprócz wi(cid:250)kszej przepustowo(cid:295)ci pracy procesora wiele w(cid:230)tków (lub procesów) po- zwala na równoczesne przeprowadzanie operacji wej(cid:295)cia-wyj(cid:295)cia, poniewa(cid:318) inne w(cid:230)tki mog(cid:230) dzia(cid:273)a(cid:232) wtedy, gdy zablokowany w(cid:230)tek oczekuje na operacj(cid:250) wej(cid:295)cia-wyj(cid:295)cia. Z tego powodu, (cid:318)e w programowaniu wielow(cid:230)tkowym wspó(cid:273)dzielona jest ta sama przestrze(cid:275) adresowa, jak(cid:230) ma proces, w(cid:230)tki zyskuj(cid:230) mo(cid:318)liwo(cid:295)(cid:232) bezpo(cid:295)redniego odczytu i zapisu tej samej pami(cid:250)ci, bez konieczno(cid:295)ci korzystania z kosztowych interfejsów, ta- kich jak komunikacja mi(cid:250)dzyprocesowa (ang. Inter-Process Communication, IPC), sto- sowana w programowaniu wieloprocesowym. W celu zachowania spójno(cid:295)ci u(cid:318)ywana jest synchronizacja pocz(cid:230)tkowa, aby dane nie zosta(cid:273)y uszkodzone na skutek ich jednocze- snego odczytu i zapisu. Takie rozwi(cid:230)zanie mo(cid:318)na zastosowa(cid:232) w po(cid:273)(cid:230)czeniu z tabelami hash, poprawiaj(cid:230)c tym samym wydajno(cid:295)(cid:232). Synchronizacja początkowa Synchronizacja pocz(cid:230)tkowa pilnuje dost(cid:250)pu do pami(cid:250)ci, podobnie jak sygnalizacja (cid:295)wietlna reguluje ruch na skrzy(cid:318)owaniu. Niczym wspomniana sygnalizacja synchro- nizacja pocz(cid:230)tkowa wstrzymuje pewien ruch i tym samym zmusza dane do oczekiwania (opó(cid:316)nienie). Istniej(cid:230) trzy rodzaje najcz(cid:250)(cid:295)ciej stosowanej synchronizacji pocz(cid:230)tkowej: (cid:31) Blokady muteksu. Tylko nak(cid:273)adaj(cid:230)cy blokad(cid:250) ma prawo do dzia(cid:273)ania, pozostali s(cid:230) zablokowani i musz(cid:230) czeka(cid:232) na swoj(cid:230) kolej. (cid:31) Wiruj(cid:230)ce blokady (ang. spinlocks). Wiruj(cid:230)ca blokada pozwala nak(cid:273)adaj(cid:230)cemu na dzia(cid:273)anie, podczas gdy pozostali czekaj(cid:230) na jej zwolnienie, nieustannie w p(cid:250)tli sprawdzaj(cid:230)c stan blokady. Wprawdzie takie rozwi(cid:230)zanie mo(cid:318)e zapewni(cid:232) dost(cid:250)p charakteryzuj(cid:230)cy si(cid:250) ma(cid:273)ym opó(cid:316)nieniem — zablokowany w(cid:230)tek nigdy nie opuszcza procesora i jest gotowy do dzia(cid:273)ania w ci(cid:230)gu dos(cid:273)ownie kilku cykli, ale oznacza to marnowanie zasobów procesora podczas oczekiwania na zwolnienie blokady i sprawdzanie jej stanu. (cid:31) Blokady odczytu i zapisu. Blokady odczytu i zapisu zapewniaj(cid:230) spójno(cid:295)(cid:232) danych, poniewa(cid:318) zezwalaj(cid:230) na wiele jednoczesnych operacji odczytu lub tylko jedn(cid:230) operacj(cid:250) zapisu i (cid:318)adn(cid:230) odczytu. Blokady muteksu s(cid:230) implementowane przez bibliotek(cid:250) lub j(cid:230)dro jako adaptacyjne blokady muteksu: hybryda metod muteksu i wiruj(cid:230)cych. Blokada wiruj(cid:230)ca wyst(cid:250)puje wtedy, gdy nak(cid:273)adaj(cid:230)cy blokad(cid:250) dzia(cid:273)a aktualnie w innym procesorze, natomiast zwyk(cid:273)a — w przeciwnym razie (lub po osi(cid:230)gni(cid:250)ciu maksymalnej liczby dozwolonych blokad wiruj(cid:230)cych). Adaptacyjne blokady muteksu s(cid:230) zoptymalizowane w celu zapewnienia Kup książkęPoleć książkę 198 Rozdział 5 (cid:31) Aplikacje dost(cid:250)pu charakteryzuj(cid:230)cego si(cid:250) ma(cid:273)ym opó(cid:316)nieniem bez marnowania zasobów pro- cesora. Dlatego te(cid:318) od wielu lat s(cid:230) stosowane w systemach Solaris. W 2009 roku zosta(cid:273)y zaimplementowane równie(cid:318) w systemie Linux, gdzie nazwano je adaptacyjnymi wiruj(cid:230)cymi blokadami muteksu (patrz odwo(cid:273)anie [1] na ko(cid:275)cu rozdzia(cid:273)u). Analiza problemów wydajno(cid:295)ci obejmuje tak(cid:318)e sprawdzanie blokad, co niew(cid:230)tpliwie jest bardzo czasoch(cid:273)onnym zaj(cid:250)ciem i wymaga znajomo(cid:295)ci kodu (cid:316)ród(cid:273)owego aplikacji. To zwykle jest zaj(cid:250)cie dla programisty. Tabele hash Tabele hash blokad mog(cid:230) by(cid:232) u(cid:318)ywane w celu zastosowania minimalnej liczby blo- kad dla jak najwi(cid:250)kszej liczby struktur danych. W tym miejscu przedstawiono jedynie podsumowanie tabel hash — to jest bardzo zaawansowany temat, którego dok(cid:273)adne poznanie wymaga wiedzy z zakresu programowania. Zapoznaj si(cid:250) z dwoma nast(cid:250)puj(cid:230)cymi podej(cid:295)ciami: (cid:31) Pojedyncza globalna blokada muteksu dla wszystkich struktur danych. Wprawdzie takie rozwi(cid:230)zanie jest proste, ale wspó(cid:273)bie(cid:318)ny dost(cid:250)p b(cid:250)dzie charakteryzowa(cid:273) si(cid:250) wówczas wyst(cid:250)powaniem rywalizacji i opó(cid:316)nieniem zwi(cid:230)zanym z oczekiwaniem na uzyskanie dost(cid:250)pu. Wiele w(cid:230)tków wymagaj(cid:230)cych na(cid:273)o(cid:318)enia blokady b(cid:250)dzie serializowanych, czyli wykonywanych po kolei zamiast jednocze(cid:295)nie. (cid:31) Oddzielna blokada muteksu dla poszczególnych struktur danych. Co prawda takie rozwi(cid:230)zanie ogranicza stan rywalizacji do absolutnego minimum — w trakcie jednoczesnego dost(cid:250)pu do tej samej struktury danych, ale blokada wi(cid:230)(cid:318)e si(cid:250) z obci(cid:230)(cid:318)eniem powodowanym przez pami(cid:250)(cid:232) masow(cid:230) i procesor podczas tworzenia i znoszenia blokady dla ka(cid:318)dej struktury danych. Tabela hash blokad mo(cid:318)e by(cid:232) rozwi(cid:230)zaniem przej(cid:295)ciowym i jest odpowiednia, gdy spodziewasz si(cid:250) du(cid:318)ej rywalizacji o dost(cid:250)p do zasobów. Rozwi(cid:230)zanie polega na utwo- rzeniu sta(cid:273)ej liczby blokad i u(cid:318)yciu algorytmu hash do wyboru blokady, która ma by(cid:232) stosowana z okre(cid:295)lon(cid:230) struktur(cid:230) danych. W ten sposób unika si(cid:250) kosztu zwi(cid:230)zanego z tworzeniem i znoszeniem blokady dla struktury danych, a ponadto eliminowane s(cid:230) problemy wyst(cid:250)puj(cid:230)ce w przypadku istnienia tylko jednej blokady. Przyk(cid:273)ad tabeli hash pokazano na rysunku 5.2 — sk(cid:273)ada si(cid:250) ona z czterech elemen- tów (nazywanych buckets), z których ka(cid:318)dy zawiera w(cid:273)asn(cid:230) blokad(cid:250). Rysunek 5.2. Przykładowa tabela hash Kup książkęPoleć książkę 5.2. Techniki sprawdzania wydajności aplikacji 199 Na rysunku pokazano jedno z podej(cid:295)(cid:232) w zakresie rozwi(cid:230)zania kolizji hash, kiedy to dwie struktury danych wej(cid:295)ciowych lub ich wi(cid:250)ksza liczba s(cid:230) przydzielone do tego samego elementu. W pokazanym przyk(cid:273)adzie nast(cid:250)puje utworzenie (cid:273)a(cid:275)cucha struktur danych w celu przechowywania ich wszystkich w tym samym elemencie, do którego zo- sta(cid:273)y przypisane przez funkcj(cid:250) hash. Je(cid:318)eli struktury danych b(cid:250)d(cid:230) zbyt d(cid:273)ugie i prze- twarzane szeregowo, wspomniane (cid:273)a(cid:275)cuchy mog(cid:230) przysporzy(cid:232) problemów zwi(cid:230)zanych z wydajno(cid:295)ci(cid:230). Funkcj(cid:250) hash i wielko(cid:295)(cid:232) tabeli mo(cid:318)na ustali(cid:232) tak, aby równomiernie roz- (cid:273)o(cid:318)y(cid:232) struktury danych w poszczególnych elementach i tym samym do minimum ograni- czy(cid:232) d(cid:273)ugo(cid:295)(cid:232) (cid:273)a(cid:275)cuchów. W idealnej sytuacji liczba elementów tabeli hash powinna by(cid:232) równa liczbie proceso- rów lub wi(cid:250)ksza od niej, aby tym samym zapewni(cid:232) maksymaln(cid:230) wspó(cid:273)bie(cid:318)no(cid:295)(cid:232). Z kolei algorytm funkcji hash mo(cid:318)e by(cid:232) prosty, na przyk(cid:273)ad pobiera(cid:232) najmniej znacz(cid:230)cy bit adresu struktury danych i u(cid:318)y(cid:232) go jako indeksu tablicy blokad, maj(cid:230)cej wielko(cid:295)(cid:232) równ(cid:230) pot(cid:250)dze liczby 2. Tego rodzaju prosty algorytm charakteryzuje si(cid:250) du(cid:318)(cid:230) szybko(cid:295)ci(cid:230) dzia(cid:273)ania, a wi(cid:250)c pozwala na szybkie przydzielanie lokalizacji strukturom danych. W przypadku tabel s(cid:230)siaduj(cid:230)cych w pami(cid:250)ci blokad problem zwi(cid:230)zany z wydajno(cid:295)ci(cid:230) mo(cid:318)e si(cid:250) pojawi(cid:232), gdy blokady znajd(cid:230) si(cid:250) w tym samym bloku danych pami(cid:250)ci podr(cid:250)cz- nej. Dwa procesory uaktualniaj(cid:230)ce ró(cid:318)ne blokady w tym samym bloku danych napotkaj(cid:230) obci(cid:230)(cid:318)enie zwi(cid:230)zane z koherencj(cid:230), poniewa(cid:318) poszczególne procesory b(cid:250)d(cid:230) uniewa(cid:318)nia(cid:232) blok danych tego drugiego procesora. Sytuacja taka nosi nazw(cid:250) b(cid:273)(cid:250)dnego wspó(cid:273)dzie- lenia (ang. false sharing) i jest najcz(cid:250)(cid:295)ciej rozwi(cid:230)zywana przez dope(cid:273)nienie blokad nie- u(cid:318)ywanymi bajtami, aby w okre(cid:295)lonym bloku danych w pami(cid:250)ci znajdowa(cid:273)a si(cid:250) tylko jedna blokada. 5.2.6. Nieblokujące operacje wejścia-wyjścia Cykl (cid:318)yciowy procesu w systemie UNIX, pokazany na rysunku 3.7 w rozdziale 3. „Systemy operacyjne”, wskazywa(cid:273) na blokowanie procesu i przej(cid:295)cie do stanu u(cid:295)pienia w czasie wykonywania operacji wej(cid:295)cia-wyj(cid:295)cia. Z tym modelem wi(cid:230)(cid:318)e si(cid:250) kilka pro- blemów dotycz(cid:230)cych wydajno(cid:295)ci: (cid:31) W przypadku wielu jednoczesnych operacji wej(cid:295)cia-wyj(cid:295)cia poszczególne operacje w trakcie blokady zabieraj(cid:230) w(cid:230)tek (lub proces). W celu zapewnienia obs(cid:273)ugi wielu jednoczesnych operacji wej(cid:295)cia-wyj(cid:295)cia aplikacja musi utworzy(cid:232) wiele w(cid:230)tków (zwykle po jednym dla ka(cid:318)dego klienta), co oznacza koszt zwi(cid:230)zany z tworzeniem i niszczeniem w(cid:230)tków. (cid:31) W przypadku krótkotrwa(cid:273)ych operacji wej(cid:295)cia-wyj(cid:295)cia obci(cid:230)(cid:318)enie zwi(cid:230)zane z cz(cid:250)stym prze(cid:273)(cid:230)czaniem kontekstu mo(cid:318)e zu(cid:318)ywa(cid:232) zasoby procesora i przyczynia(cid:232) si(cid:250) do zwi(cid:250)kszania opó(cid:316)nienia aplikacji. Model nieblokuj(cid:230)cych operacji wej(cid:295)cia-wyj(cid:295)cia powoduje asynchroniczne wy- konywania tych operacji, bez blokowania bie(cid:318)(cid:230)cego w(cid:230)tku, który w ten sposób mo(cid:318)na wykorzysta(cid:232) do innych zada(cid:275). To jest funkcja kluczowa Node.js (patrz odwo(cid:273)anie [2] na ko(cid:275)cu rozdzia(cid:273)u), czyli dzia(cid:273)aj(cid:230)cego po stronie serwera (cid:295)rodowiska aplikacji JavaScript, które w nieblokuj(cid:230)cy sposób kieruje kodem do wykonania. Kup książkęPoleć książkę 200 Rozdział 5 (cid:31) Aplikacje 5.2.7. Powiązanie z procesorem W (cid:295)rodowiskach NUMA (ang. Non-Uniform Memory Access) korzystna mo(cid:318)e by(cid:232) sy- tuacja, gdy proces lub w(cid:230)tek b(cid:250)dzie dzia(cid:273)a(cid:273) w pojedynczym procesorze oraz w tym samym procesorze, co poprzednio po wykonaniu operacji wej(cid:295)cia-wyj(cid:295)cia. W ten sposób popra- wia si(cid:250) lokalizacj(cid:250) pami(cid:250)ci dla aplikacji, zmniejsza liczb(cid:250) cykli potrzebnych do wykona- nia operacji wej(cid:295)cia-wyj(cid:295)cia dla pami(cid:250)ci oraz ogólnie poprawia wydajno(cid:295)(cid:232) dzia(cid:273)ania aplikacji. Oczywi(cid:295)cie twórcy systemów operacyjnych doskonale o tym wiedz(cid:230) i tworz(cid:230) je w taki sposób, aby w(cid:230)tki aplikacji dzia(cid:273)a(cid:273)y w tym samym procesorze (tzw. koligacja procesora). Te tematy b(cid:250)d(cid:230) poruszane w rozdziale 7., zatytu(cid:273)owanym „Pami(cid:250)(cid:232)”. Pewne aplikacje wymusz(cid:230) zastosowanie przedstawionego zachowania przez powi(cid:230)- zanie si(cid:250) z procesorem. W niektórych systemach mo(cid:318)e to spowodowa(cid:232) znaczn(cid:230) popraw(cid:230) wydajno(cid:295)ci dzia(cid:273)ania. Z drugiej strony, je(cid:295)li powi(cid:230)zanie b(cid:250)dzie tworzy(cid:273)o konflikt z innym powi(cid:230)zaniem procesora, na przyk(cid:273)ad urz(cid:230)dzenie b(cid:250)dzie zak(cid:273)óca(cid:273)o mapowanie na procesor, wówc
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Wydajne systemy komputerowe. Przewodnik dla administratorów systemów lokalnych i w chmurze
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: