Rozdział 19
Optymalizacja wydajności
Załóżmy, że do uruchomienia serwera NT dysponujemy
największym ze znanych komputerów, DEC Alfa, z olbrzymią
pamięcią dyskową, największą możliwą konfiguracją pamięci i tylko
dziesięcioma użytkownikami, którzy chcą drukować kilka prostych
raportów dziennie. Większość współczesnych systemów
operacyjnych (UNIX, VMS, NT itd.) dysponuje (zaraz po
zainstalowaniu) wielkimi pojemnościami. Jednak rosnące
zapotrzebowane aplikacji względem mocy obliczeniowej, pamięci
operacyjnej i
przestrzeni dyskowej, narzuca administratorowi
określone wymagania.
Prawdą jest, że NT potrafi „zaopiekować się” sobą znacznie
skuteczniej, niż np. VMS czy UNIX. Zwłaszcza w starszych
wersjach UNIX-a wiele parametrów miało ubogą dokumentację (o
ile w ogóle ją miało). Zdarzały się załamania całego systemu, jeśli
ustawienia jednego z tych parametrów nie odpowiadały ilości
składowanych danych.
Po zatrudnieniu autorów jednego z
najlepszych systemów
operacyjnych poprzedniej generacji - VMS, Microsoft spróbował
stworzyć logiczny schemat rozmieszczenia zasobów i dostosować
do niego algorytmy tak, by zasoby rozmieszczane były
odpowiednio do zapotrzebowania. Próba ta w pełni się powiodła,
niemniej powinniśmy być świadomi, iż:
!
Sprzęt, na którym działa system ma swoje ograniczenia
(wynikające z
prędkości procesora, ilości zainstalowanej
pamięci, pojemności twardego dysku itp).
!
Aplikacje realizowane w
systemie mogą zawierać błędy.
Administrator, choć nie w pełni, może nadzorować efekty
działań programistów oraz wgrywanie (ewentualnie rozbudowę)
przez użytkowników nowych aplikacji.
!
Serwer może zostać poważnie spowolniony w wyniku przełado-
wania systemu danymi. Ponadto struktura sieci (z jej okablowa-
730
Rozdział 19
niem, koncentratorami, itp.) ma wielki wpływ na ogólną
wydajność aplikacji klient/serwer i usług sieciowego systemu
operacyjnego (np. współdzielenia plików i drukowania).
Omawiana w tym rozdziale problematyka jest bardzo obszerna,
z konieczności więc podajemy tylko najważniejsze informacje,
które pomogą w zrozumieniu podstaw optymalizacji pracy systemu.
Umożliwi to skuteczną obsługę większości środowisk, w których
działa serwer NT . Należy pamiętać, że nie tylko na operatorze
systemu spoczywa odpowiedzialność za optymalizację jego pracy.
Aplikacje (a zwłaszcza skomplikowane bazy danych) mogą
uniemożliwić pracę nawet najpotężniejszych systemów
komputerowych. Dlatego też - by utrzymać kontrolę nad
efektywnym wykorzystaniem zasobów systemu - często skazani
będziemy na współpracę z
administratorami baz danych lub
aplikacji.
Zarządzanie wydajnością
W wielu firmach bardzo popularny stał się ostatnio trend do
uzyskiwania lepszych efektów za mniejsze pieniądze. A ponieważ
każdemu specjaliście od systemów informatycznych zależy na
utrzymaniu swych płac na wysokim poziomie, należy obniżać
koszty ponoszone w innych, pokrewnych dziedzinach. I tu właśnie
znaczenia nabiera zarządzanie wydajnością. Ponieważ mamy
niewielki wpływ na ceny dyktowane przez dostawców sprzętu
i oprogramowania, a jednocześnie chcemy minimalizować koszty
ponoszone na rozbudowę sprzętu, musimy użyć narzędzi
pomagających utrzymać wysoką wydajność systemów przy niskich
kosztach.
T ak jak nie powinno się otwierać maski samochodu i regulować
gaźnika, jeżeli nie zna się zasad działania silnika, tak też nie należy
konfigurować systemu operacyjnego, jeżeli nie zna się podstaw
platformy sprzętowej i samego systemu. Stąd też zamieściliśmy
fragment opisujący typową architekturę komputera osobistego.
(NT działa także na innych platformach, niemniej wyszliśmy
z założenia, iż baza intelowska będzie najbardziej reprezentatywna).
Gdy wykryjemy problem, musimy wiedzieć jak dalej postępować.
Czasami wystarczy sprawna optymalizacja pracy systemu (bez
Optymalizacja wydajności
731
kupowania dodatkowego oprogramowania lub sprzętu). Jednakże
istotna jest tu także wiedza o tym, kiedy należy optymalizować,
a kiedy lepiej coś wymienić (dokupić). Stąd czasami czasochłonne
przepisywanie aplikacji, która usprawni pracę kilku osób, może być
bezzasadne - zwłaszcza gdy problem rozwiązać może nowy dysk za
500 złotych.
Ostatni podrozdział omawia planowanie zasobów i
okresowe
monitorowanie wydajności. Jego istotę można streścić następująco:
„dobrze jest wiedzieć, jak rozwiązać dany problem, jednak jeszcze
lepiej w
ogóle go uniknąć”. Scharakteryzujemy także
konfigurowanie programu do kontroli stopnia obciążenia systemu.
Składniki i wydajność Windows NT
W naszych rozważaniach skupimy się teraz na typowym sprzęcie
i oprogramowaniu serwerów bazujących na technologii Intel-a.
Liczba dostawców sprzętu i oprogramowania ma tutaj niebagatelne
znaczenie. Dobrze jest, gdy czują oni na sobie presję konkurencji,
zmuszającą do ciągłych innowacji i obniżania cen. Z drugiej jednak
strony komplikuje to życie administratorom, którzy muszą - by
utrzymać środowisko w optymalnym stanie - nadążać za ofertą
rynku.
Intel i architektura komputerów osobistych
Czym jest architektura PC, oparta na technologii Intel-a? Rysunek
19.1 ilustruje przykład takiej architektury. Główną jej część stanowi
układ procesora (wykonanego przez Intel lub jedną z
firm
produkujących procesory z nim kompatybilne - Cyrix, AMD itd.).
Procesor ten definiuje interfejs pomiędzy procesorem, pamięcią
podręczną (cache) i główną pamięcią operacyjną RAM (Random
Access Memory).
Procesory intelowskie determinują standard komputerów
osobistych oraz - w dużym stopniu - założenia kolejnych wersji
systemu Windows NT , które mają na tych procesorach działać.
(Pominiemy tutaj wewnętrzną budowę procesora, bo nie ma ona
związku z regulowaniem wydajności systemu).
Z procesorem, za pośrednictwem najszybszej w systemie magistrali
732
Rozdział 19
danych (32-bitowej - tam gdzie działa Windows NT 4) połączone są
dwa, najbardziej znaczące zasoby w systemie. Pierwszym z nich jest
pamięć operacyjna (RAM), główna pamięć w komputerze, która
przechowuje instrukcje, tworzone przez programy uruchamiane
przez użytkowników. Drugi z tych zasobów, pamięć podręczna
drugiego poziomu - second-level cache - służy do przyspieszenia
wszystkich operacji. Koncepcyjnie jest ona zbliżona do pamięci
operacyjnej, tyle że szybsza. Jej zadaniem jest przechowywanie
instrukcji lub danych, które - według przewidywań procesora
i
systemu operacyjnego - zostaną za chwilę wykorzystane.
Zazwyczaj komputery pracują nieco szybciej, jeśli - przy tej samej
prędkości procesora - dysponują większą pamięcią podręczną.
Ponieważ Windows NT działa na różnych platformach, ważne jest,
aby wiedzieć na którym z dwóch rodzajów procesorów będzie
pracował. Rodzina maszyn Intel-a 80x86 znana jest także pod
nazwą komputerów o złożonej liście rozkazów - CISC (Complex
Instruction Set Computers). Oznacza to, że każdy rozkaz
(instrukcja) realizuje zestaw skomplikowanych czynności. Drugi
rodzaj stanowią komputery o zredukowanej liście rozkazów - RISC
(Reduced Instruction Set Computers ), takie jak DEC Alpha, które
dla każdej instrukcji wykonują relatywnie proste zadania.
Informacje te stają się istotne wtedy, gdy rozważać będziemy
prędkość przetwarzania. Komputery typu RISC - w porównaniu
Magistrala procesora
i pamięci (32 bitowa)
Pa mię ć podrę cz na
drugiego poziom u
(wytwórc a płyty
główne j)
P amię ć
opera cyjna
Kontroler
ma gistrali
EISA
Kontroler
ma gistrali
PCI
CPU
Magistrala EISA
(8, 16 lub 32-bitowa)
Magistrala
PCI (32 bitowa)
Standardowe
karty
rozszerzeń
Porty
Szeregowe /
Równoległe
Kontrolery
dysków
IDE lub SCSI
Kontrolery
dysków
IDE lub SCSI
Szybkie
karty
PCI
Rys. 19.1 Typowa
architektura PC
oparta na
technologii Intel-
a.
Optymalizacja wydajności
733
z komputerami CISC, przy tej samej liczbie operacji w tym samym
czasie zazwyczaj - charakteryzują się wyższą prędkością
przetwarzania. Ponieważ rodzina Intel-a wciąż się rozwija, z reguły
nowsze generacje jej procesorów przewyższają wydajnością starsze
procesory o podobnych prędkościach (zakładając oczywiście, że
system operacyjny zaprojektowano z
myślą o
tych właśnie
odmianach procesorów). Windows NT należy do elitarnej, bardzo
wąskiej grupy systemów operacyjnych, który efektywnie
wykorzystuje wiele z cech najnowszych procesorów Intela.
Jak dotąd, ze składników architektury PC omówiliśmy trzy (CPU,
pamięć podręczną i operacyjną), połączone z szybką magistralą
danych. Aby ją „zarezerwować” dla potrzeb istotnych transferów
pomiędzy pamięcią i
procesorem, mniej ważna komunikacja
obsługiwana jest przez inne magistrale.
Wiele nowoczesnych komputerów osobistych, które mogłyby
pełnić rolę serwerów, zazwyczaj obsługuje dwa typy magistrali
danych. Pierwszy z nich - EISA (Enhanced Industry Standard
Architecture), istnieje już na rynku kilka lat. Z tego powodu
większość kart rozszerzeń (wykorzystujące 16 i
32-bitowe
magistrale danych) architekturę tę obsługuje. EISA zaprojektowano
w czasach, gdy procesory i urządzenia zewnętrzne były znacznie
wolniejsze niż dzisiejsze.
Magistrala PCI obsługuje 32-bitowy transfer danych. Oznacza to, że
jeżeli serwer posiada magistralę PCI i urządzenie zewnętrzne (takie
jak karta kontrolera dysków SCSI), które obsługuje ten typ
magistrali, jego system może osiągnąć, w odniesieniu do EISA,
znacznie wyższy poziom wydajności. Jednak niektóre urządzenia
zewnętrzne nie są w stanie wykorzystać możliwości magistrali PCI
(np. napędy dyskietek). Większość serwerów, jakie ostatnio autor
konfigurował, miało jednocześnie porty EISA i PCI. Zazwyczaj
gniazda PCI należy pozostawić dla kart sieciowych wymagających
transferów rzędu 100 MB na sekundę (i potrzebujących prędkości
magistral PCI).
Istnieją jeszcze kontrolery, które łączą szybką magistralę procesora
i pamięci z wolniejszymi urządzeniami zewnętrznymi. Wyróżniamy
kilka odmian magistrali danych, obsługujących urządzenia
zewnętrzne. Stąd kluczowe znaczenie ma właściwe zestawienie typu
magistrali z rodzajem karty, dołączanej do komputera.
734
Rozdział 19
Przed rozpoczęciem pomiarów wydajności systemu należy poznać
jeszcze kilka istotnych szczegółów, aby móc rozpocząć działania
optymalizujące jego pracę. Niektóre z kart przyłączanych do EISA,
PCI lub innych, wolniejszych magistrali, są jednocześnie
kontrolerami urządzeń wewnętrznych komputera. Najczęściej
spotykanym przykładem może tu być kontroler twardego dysku.
Oczywiście, istnieje kilka różnych standardów tych kontrolerów
(SCSI, Fast - Wide SCSI, IDE i inne), z różną charakterystyką
wydajności.
IDE (Intergrated Drive Electronics) to standard obsługujący wiele
logicznych pętli (co przyspiesza dostęp do dysku i
redukuje
obciążenie systemu) i większy transfer danych, niż starsze napędy
(MFM, RLL czy ESDI). Kontrolery IDE obsługują zazwyczaj dwa
dyski twarde - jeden w trybie master (nadrzędny, ładujący zazwyczaj
system operacyjny), drugi - w slave (podrzędny). W stosunku do
kontrolerów SCSI są wolniejsze (pojedynczy kontroler obsługuje też
mniejszą liczbę dysków). Niemniej jednak IDE jest obecnie (w
maszynach PC) stosowany najczęściej.
Standard SCSI (Small Computer Standard Interface) używany był
powszechnie w systemach pracujących pod nadzorem UNIX-a.
Zaprojektowany został dla większych transferów danych i większej
liczby napędów (standardowo jeden kontroler obsługuje siedem
urządzeń zewnętrznych). Jeżeli w
systemie istnieje wielkie
zapotrzebowanie na pamięć dyskową, można w nim umieścić kilka
kontrolerów SCSI. Cena ich jest nieco wyższa (np. w porównaniu
z IDE), a obsługa trudniejsza, jednakże wielu administratorów woli
w serwerach mieć ten typ kontrolera. Na rynku dostępne są
również napędy taśm SCSI, jak i stacje dysków optycznych i kilka
innych urządzeń zewnętrznych (np. skanery). Magistrala danych
SCSI została zaprojektowana dla bardziej wymagających transferów
danych, które spotykane były tylko w maszynach z systemem
UNIX (teraz jednak takie transfery leżą w możliwościach serwerów
NT ).
Standard SCSI został zaprojektowany kilka lat temu, a technologia
wciąż idzie naprzód. Opracowano w tym czasie jego nowe formy.
Jedną z bardziej popularnych modyfikacji jest fastwide SCSI.
Magistrala danych jest tutaj dwukrotnie szersza niż oryginalna,
dwukrotnie wzrosła też prędkość transferu. Kontrolery te
Optymalizacja wydajności
735
umożliwiają często podłączenie nawet do 15 urządzeń
zewnętrznych. Przy dużym zapotrzebowaniu na pamięć dyskową
i wysoką prędkość transferu rozważyć możemy - dla serwera NT -
magistralę SCSI–3.
Inne składniki komputerów także posiadają swoje standardy. Np.
modemy często określane są jako kompatybilne z produktami
firmy Hayes lub US Robotics. Jednakże urządzenia te wykonują swe
czynności niezależnie od pozostałych i przez to mają mały wpływ
na wydajność całego systemu. Nie możemy tego samego powiedzieć
o podsystemie obsługi wideo. Niektóre karty sterowników
graficznych realizują instrukcje graficzne na wysokim poziomie,
wykorzystując własne (wbudowane w
kartę) możliwości
obliczeniowe. Posiadają one własne procesory i szybkie pamięci
graficzne. Środowisko NT możemy tak skonfigurować, by
możliwości kart maksymalnie wykorzystać lub - by do obsługi
grafiki angażowany był procesor główny (co jednak zwiększa
obciążenie systemu).
Przed przejściem do zagadnień związanych z oprogramowaniem
należy omówić jeszcze jedną kwestię „sprzętową”. Spróbujmy objąć
w całości współpracę poszczególnych składników komputera.
Układy scalone pamięci operacyjnej pracują z własną, określoną
prędkością. Z
uwagi na fakt, iż prędkość transferu
zsynchronizowana jest z magistralą danych procesora, należy
zadbać o to, aby prędkość pamięci operacyjnej odpowiadała
taktowaniu zegara procesora (a
ściślej mówiąc, aby pamięć
operacyjna nie była zbyt wolna). Wydajność systemu jest także
ściśle związana z napędami dysków. W systemie może pracować
szybka magistrala danych, ale z powodu wolnych dysków twardych
prędkość magistrali nie będzie miała żadnego znaczenia. Będą one
poważnie redukowały transfer danych. Dlatego w
systemach
wymagających wysokiej wydajności należy także sprawdzać
charakterystykę wydajności urządzeń zewnętrznych.
Rysunek 19.2 przedstawia hierarchię składników sprzętu.
Poszczególne jej elementy ściśle ze sobą współpracują. Przykładem
takiej współpracy jest korzystanie z danych zapisanych na dyskach.
Każdy ze składników może pochodzić od innego producenta.
Zadaniem administratora powinno być dobranie odpowiednich
składników - tak, by spełniały wymagania wydajności, przy
736
Rozdział 19
rozsądnych cenach.
System operacyjny i jego współpraca ze sprzętem
Rozdział 2 zawiera szczegółowe informacje o architekturze NT .
System operacyjny instalujemy dopiero po skonfigurowaniu sprzętu
i sprawdzeniu jego pracy. Dopóki komputer nie działa poprawnie
(nie uruchamia się lub wykazuje błędy konfiguracji), nieistotne są
możliwości systemu operacyjnego.
Pierwszy poziom współpracy (nazywany również interfejsem) -
pomiędzy sprzętem a systemem operacyjnym - został zdefiniowany
przez firmę Intel (lub innego producenta procesora, np. DEC)
i
Microsoft. System operacyjny zawiera wiele programów,
napisanych w języku, którego używa procesor główny i procesory
pośrednie (zestaw kodu zerojedynkowego - binarnego).
Niskopoziomowy interfejs układów scalonych komputera
podzielony jest na małe zestawy kodów charakterystycznych dla
danego rodzaju procesora (pomaga to w komunikacji NT z różnymi
platformami sprzętowymi, takimi jak Intel, DEC Alpha itp.).
Każde urządzenie komputera (karty rozszerzeń, kontrolery SCSI,
napędy dysków) odpowiada na wysyłane kody zerojedynkowe
(binarne). Istotny jest fakt, iż różne urządzenia używają różnych
zestawów kodów kontrolnych. (Np. inny kod binarny wysyłany
jest, w celu wysunięcia taśmy, do 4 mm napędu DAT , a inny do
napędu CD-ROM - by wysunąć kieszeń). Biorąc pod uwagę liczbę
producentów i rozmaitych urządzeń istniejących na rynku możemy
wyobrazić sobie, jak wiele różnego rodzaju kodów kontrolnych
można napotkać.
W czasach panowania DOS-u, każda aplikacja musiała sama dbać
o współpracę ze wszystkimi urządzeniami zewnętrznymi.
Inne kontrolery
ma gistrali (tzn. SCSI)
Inne urządzenia
zewnętrzne
Kontrolery zewnętrznej magistra li (tzn. PCI)
Magistrala procesora i pa mięci operacyjnej
Urzą dzenia ze wnętrzne (tzn. dyski)
Procesor (CPU) Pamięć operacyjna (RAM )
Pamięć podręczna (cache)
Rys. 19.2
Hierarchia
sprzętu.
Optymalizacja wydajności
737
W Windows (jeszcze przed Windows 95 i NT ) zrealizowano
koncepcję sterowników urządzeń. Dzięki temu można było pisać
aplikacje zgodne ze standardowym interfejsem dla danego systemu
operacyjnego. Całe zadanie tłumaczenia kodów aplikacji na kody
rozpoznawane przez urządzenia spoczęło wówczas na systemie
operacyjnym.
Jednakże to nie wszystko. Ponieważ różne urządzenia mają różne
możliwości (np. jedne drukarki mogą drukować grafikę, inne nie),
sterowniki urządzeń muszą sygnalizować aplikacji, że żądanie przez
nią wysłane nie może być spełnione z przyczyn (takich lub innych)
urządzenia. Problemem mogą być też same sterowniki, które są
częścią oprogramowania i mogą być napisane dobrze lub źle.
Wynikiem ewentualnych błędów są różnego rodzaju, wnoszone na
bieżąco, aktualizacje i poprawki. Równocześnie, mimo iż Windows
NT zawiera całą gamę sterowników, dla pewnych urządzeń może
ich zabraknąć. (Wspaniałym źródłem, z którego niezmiernie łatwo
uzyskać najnowsze sterowniki, jest Internet). Jeżeli brak informacji
o tym, czy dane urządzenie obsługiwane jest przez NT , należy
przejrzeć tzw. Listę urządzeń kompatybilnych - HCL (Hardware
Compatibility List) na stronie: www.microsoft.com (lub na
płytach CD ROM).
Poprawna konfiguracja interfejsów niskiego poziomu stwarza
podstawę, na której można realizować usługi systemu operacyjnego.
Według tego samego schematu, który doprowadził do powstania
sterowników urządzeń, powstał zestaw funkcji, wykorzystywanych
przez niemal każdą aplikację. Zamiast spędzać mnóstwo czasu na
pisaniu oddzielnych kodów dla każdej aplikacji, programiści
Microsoft wbudowali odpowiedni schemat funkcjonalny w sam
system operacyjny. Przykładem jego działania jest przetwarzanie
kolejki wydruków (usuwanie wydruków i śledzenie kolejności ich
wysyłania do drukarki) oraz działanie sterowników sieciowych
T CP/IP. Wprowadzenie takiego schematu daje jeszcze jeden efekt -
dzięki niemu twórca aplikacji nie musi przejmować się
opracowaniem wszystkich funkcji sterujących i może skupić się na
dopracowaniu szczegółów swojego produktu.
A zatem każdy administrator systemu powinien pamiętać, że jest
na szczycie hierarchii wydajności i w każdym momencie może się
zdarzyć, że przy najlepszym sprzęcie, najlepszych sterownikach
738
Rozdział 19
urządzeń, najlepiej wyregulowanym systemie NT , lecz przy źle
napisanych aplikacjach poniesie klęskę. Rysunek 19.3 ilustruje
sumarycznie (w czytelnej postaci) to, co do tej pory
powiedzieliśmy. Jak widać, nie pokazuje on zależności między
poszczególnymi komponentami. System operacyjny współdziała
z CPU i niektóre z urządzeń zewnętrznych współpracują ze sobą.
Widzimy tutaj, iż wydajność jest wypadkową współpracy kilku
komponentów. Zoptymalizowanie tej współpracy jest
skomplikowanym zadaniem, ale na szczęście Windows NT został
wyposażony w narzędzia, które je istotnie ułatwiają.
Określanie normalnych poziomów sprawności systemu
Poprawne określenie wszystkich parametrów sprawności systemu
wydawać się może trudne. Niektóre opracowania omawiają teorię
związaną ze wszystkimi składnikami systemu i zasady obliczania
współczynników wyznaczających wydajność rozmaitych
konfiguracji.
Jednakże, ponieważ technologia wciąż idzie naprzód i konfiguracje,
które opisano najprawdopodobniej zdążyły się już
zdezaktualizować, administratorzy systemów preferują metody
bardziej empiryczne. W odróżnieniu od większości systemów
operacyjnych, Windows NT umożliwia obserwację większości
zjawisk towarzyszących współpracy pomiędzy poszczególnymi
składnikami. Musimy tutaj podkreślić, iż nieumiejętne regulowanie
pracy systemu może dać rezultaty niezamierzone nawet przez jego
twórców.
Inne kontrolery
ma gistrali (tzn. SCSI)
Inne urządzenia
zewnętrzne
Kontrolery zewnętrznej magistra li (tzn. PCI)
Magistrala procesora i pa mięci operacyjnej
Urzą dzenia ze wnętrzne (tzn. dyski)
Sterowniki urządzeń
Procesor (CPU) Pamięć operacyjna (RAM )
Pamięć podręczna (cache)
Rys. 19.3.
Hierarchia
składników
sprzętu
i oprogramowani
a
Optymalizacja wydajności
739
Poniżej przedstawiliśmy schematy kontrolowania wydajności. Dla
potrzeb tego rozdziału przyjęliśmy, że każda z konfiguracji sprzęto-
wych, na której działa Windows NT , obejmuje pięć składowych,
których praca może być monitorowana i regulowana:
!
Zdolność przetwarzania procesora
!
Pojemność pamięci operacyjnej i pamięci wirtualnej
!
Pojemność i wydajność wejścia/wyjścia
!
Wydajność transmisji w sieci
!
Wydajność aplikacji
Zdolność przetwarzania procesora
Pierwsza składowa określa pracę, jaką procesor komputera może
wykonać w określonym czasie. Pomimo że może ona zależeć od
prędkości taktowania zegara procesora, typu listy instrukcji, jakie
wykonuje, łatwości, z jaką system operacyjny wykorzystuje zasoby
procesora i dowolnej liczby innych czynników - dla potrzeb jej
oszacowania należy przyjąć zdolność przetwarzania procesora za
określoną dla danego typu procesora i systemu operacyjnego.
Różne procesory wykazują różne zdolności przetwarzania
w zależności od typu pracy, jaką wykonują. Niektóre komputery
radzą sobie przyzwoicie z przetwarzaniem tekstu i operacjami na
liczbach całkowitych, podczas gdy inne zaprojektowano jako
numeryczne maszyny liczące, które opracowują skomplikowane
operacje zmiennoprzecinkowe. T akie charakterystyki przypisane
są zazwyczaj do całych rodzin procesorów (takich jak Intel
Pentium) i można je wziąć pod uwagę, ustalając odpowiednią
architekturę sprzętu.
Pamięć operacyjna i pamięć wirtualna
Kolejnym składnikiem jest pamięć operacyjna (RAM) i pamięć
wirtualna. Projektanci aplikacji wiedzą, że pamięć operacyjna może
być odczytywana bardzo szybko i ma bezpośrednie połączenie -
poprzez magistralę danych procesora i pamięci - z CPU. Dążą do
tego, aby ich aplikacje wykonywały więcej funkcji i, oczywiście,
odpowiadały szybciej na żądania użytkowników. Dlatego wciąż
szukają nowych sposobów na umieszczanie większej liczby
740
Rozdział 19
informacji (danych, składników aplikacji itp.) w
pamięci
operacyjnej, skąd będą one szybciej pobierane, niż z dysku twardego
czy dyskietki. Dawno minęły czasy, gdy komputer osobisty z 256
KB pamięci operacyjnej budził zazdrość i
podziw otoczenia.
Nowoczesne serwery NT mają przynajmniej 24 MB pamięci, a jest
to dolny limit dla rozsądnej konfiguracji.
Pracując z
Windows NT i
większością innych systemów
operacyjnych mamy do czynienia w zasadzie z dwoma typami
pamięci. Pamięć operacyjna (RAM) ma ścisły związek z układami
scalonymi, które przechowują informacje i znajdują się fizycznie
w
komputerze. Pierwsze systemy operacyjne generowały
komunikaty o błędach (lub całkiem się „zawieszały”), gdy brakło im
dostępnej pamięci operacyjnej. Aby rozwiązać ten problem
stworzono pamięć wirtualną. Jest ona połączeniem układów
scalonych, realizujących pamięć operacyjną i części przestrzeni
jednego lub kilku dysków - dzięki czemu system „udaje” środowisko,
w
którym znajduje się znacznie więcej fizycznej pamięci
operacyjnej, niż w rzeczywistości. T akie systemy operacyjne
dysponują procedurami, wykrywającymi obszary pamięci fizycznej,
które najprawdopodobniej nie będą szybko potrzebne (zazwyczaj
dzięki kombinacji atrybutów obszaru pamięci i
algorytmów
określających najrzadziej używane obszary). Procedury te
przenoszą następnie ich zawartość do pliku znajdującego się na
dysku, który zawiera takie właśnie, zeskładowane (swapped) części
pamięci operacyjnej. Gdy wymieniony obszar pamięci jest znów
potrzebny, system operacyjny przesyła go z powrotem do pamięci.
Ponieważ transfery dyskowe są znacznie wolniejsze (niż te
w pamięci operacyjnej) - wtedy, gdy trzeba przenieść zawartość
części pamięci operacyjnej na dysk i zapisać w niej nowe dane,
spowalniana jest także praca aplikacji.
Niektóre transfery zawartości pamięci operacyjnej na dysk są
nieszkodliwe. Pewne, załadowane do pamięci składniki systemu
operacyjnego używane są bardzo rzadko. Niektóre aplikacje operują
na danych, które zawsze umieszczane są w pamięci operacyjnej,
nigdy nie będąc używane. Jednakże problemy pojawiają się wtedy,
gdy pamięć komputera zaangażowana jest w takim stopniu, iż
system musi przenieść dane z pamięci na dysk, a następnie, inne
dane - z dysku do pamięci. Wówczas maszyna nie ma czasu na
wykonanie żądań użytkowników. Niektóre obszary pamięci
Optymalizacja wydajności
741
oznaczone są w systemie operacyjnym jako „stałe” - oznacza to ,
że nie mogą być składowane na dysku. A zatem dla aplikacji
przeznaczony jest mniejszy obszar pamięci, niż mogliśmy tego
oczekiwać. Nowoczesna baza danych (taka jak Serwer SQL lub
Oracle), zajmuje dużą część wspólnej pamięci operacyjnej. Bazy
danych używają pamięci operacyjnej do przechowywania transakcji
oczekujących, rekordów plików protokołów, które mają być
zapisane na dysku i zapisów pamięci podręcznej, które zostały
pobrane w wyniku przewidywania żądań użytkowników. Należą one
do najbardziej wymagających aplikacji, realizowanych na serwerach
sieciowych.
Obsługa wejścia/wyjścia
Kolejnym składnikiem jest obsługa wejścia/wyjścia komputera.
Wystarczy skupić się na obsłudze wejścia/wyjścia kontrolerów
i napędów dysków. Ocenia się, iż wkrótce wystąpią trudności,
wynikające z
zapełnienia magistrali PCI transferem danych
audio/wideo. Zazwyczaj w transferze danych z dysków do pamięci
operacyjnej, skąd procesor może je pobrać, biorą udział trzy
jednostki: kontroler magistrali danych (najczęściej PCI lub EISA),
kontroler napędu dysków (zazwyczaj IDE lub droższy SCSI), i sam
napęd dysku. Dla obliczania wydajności napędów dyskowych należy
traktować je tak, jak gdyby były przyłączone bezpośrednio do
magistrali procesora. W tym układzie kontrolery i dyski „widziane”
są jako całość, co ułatwia pomiar i zarządzanie. Jednak nie zawsze
można obliczyć wydajność samego kontrolera napędów dysków, nie
biorąc pod uwagę wydajności poszczególnych dysków do niego
podłączonych.
Transmisje w sieci
Serwer Windows NT wyznacza środowisko oparte na strukturze
sieciowej, w
której dane są wysyłane i
przyjmowane za
pośrednictwem kart sieciowych. Urządzenie wejścia/wyjścia sieci
należy, z
kilku powodów, oddzielić od innych urządzeń
wejścia/wyjścia. Są to przede wszystkim różne technologie.
Administrator serwera nie ma wyłącznego wpływu na system
transmisji w sieci (z wyjątkiem sytuacji, gdy pełni on jednocześnie
funkcje administratora sieci). Jest po prostu jednym z wielu
użytkowników i dlatego musi umieć w określić, czy jest przyczyną
742
Rozdział 19
kłopotów w sieci, czy ich ofiarą.
Karty sieciowe są często pomijanym elementem serwerów. Błędem
jest uzależnianie parametrów wydajności transmisji w sieci tylko od
jej typu. Może to prowadzić do błędnego założenia, że rodzaj
używanej karty sieciowej nie ma znaczenia, ponieważ prędkość
transmisji i tak jest stała. T ymczasem testy przeprowadzone na
różnych kartach wykazują, że dla danego komputera różne karty
sieciowe będą miały lepsze lub gorsze parametry transmisji danych.
Ponieważ większość kart na rynku przeznaczona jest do pracy
w
komputerach z
niewielkimi transferami sieciowymi, może
zaistnieć konieczność znalezienia tej, która podoła większemu
obciążeniu serwera.
Wydajność aplikacji
Wydajność aplikacji realizowanych w systemie stanowi bardzo
istotny element całkowitej jego wydajności. Należy to podkreślić -
zwłaszcza w
odniesieniu do systemów z
bazami danych.
Niejednokrotnie zdarza się, że baza funkcjonuje bardzo wolno.
Okazuje się wówczas, że aplikacja została zaprojektowana tak
niefortunnie, że w sytuacji, gdy potrzebne jest dziesięć cyfr z bazy,
aplikacja wykonuje puste pętle - w oczekiwaniu odpowiedzi na
dziesięć żądań wysłanych przez bardzo obciążoną sieć. T en sam
skutek odniesie jedno żądanie, które spowoduje jednoczesne
przysłanie wszystkich danych i nie obciąży dodatkowo sieci,
a będzie szybsze. Możliwe też, że żądania te są wysyłane
z pominięciem indeksów, służących przyspieszeniu komunikacji. Po
zmianie kilku poleceń zawartych w żądaniu można skrócić - z 30
minut do 10 sekund (nie jest to żadna przesada) - czas oczekiwania
na odpowiedź. Jest to jeden z aspektów pracy w środowisku
sieciowym, który wymaga doświadczenia i zdolności ogólnego
spojrzenia. Istotna jest umiejętność oceny, czy dana aplikacja
działa wolno, ponieważ jest rzeczywiście skomplikowana, czy też
jest niedokładnie skonstruowana. I do tego właśnie służą narzędzia
monitorowania wydajności. Udostępniają one dane wskazujące, czy
wykonana optymalizacja odnosi przewidywane skutki.
Obliczanie wartości wskaźników ilustrujących wydajność systemu
nie jest metodą skuteczną. Lepszy sposób polega na wykorzystaniu
klucza wskaźników wydajności, oferowanych przez system.
Optymalizacja wydajności
743
Z czasem możemy utworzyć własny klucz kontrolny, będący
dokładnym wizerunkiem wydajności systemu.
Samoczynna optymalizacja a Windows NT
Jak już wcześniej wspominaliśmy, Windows NT jest systemem,
który sam optymalizuje (w pewnych granicach) własną pracę.
Jednakże należy zaznaczyć, że system ten, działając np. na
maszynie 486/33 obsługującej tysiące użytkowników, takiemu
zadaniu nie podoła. Samoczynna optymalizacja obejmuje takie
procedury, na które oddziaływać może administrator systemu. Gdy
zrozumie on jej istotę, łatwiej będzie mu interpretować rezultaty
monitorowania pracy systemu, a przez to orientować się, kiedy
wymagana jest jego interwencja.
W procesie samoczynnej optymalizacji realizowane są takie
operacje, w
których system nie powinien zastępować
administratora. Mamy tutaj na myśli przenoszenie plików
pomiędzy dyskami - wtedy, gdy zajętość dysku może spowodować
błędy w pracy aplikacji. Kolejną taką czynnością jest kończenie
zadań realizowanych w tle, nie kontynuowanych przez jakiś czas.
Istnieją i takie operacje, których Windows NT nie jest w stanie
wykonać. Nie może np. zmienić ustawienia przełączników na
kartach rozszerzeń ani dyskach - aby przekonfigurować system
w celu osiągnięcia wyższej wydajności. Nie może też zmienić układu
połączenia komputerów w sieci.
Cóż więc może kontrolować system operacyjny Windows NT ?
Przede wszystkim może wpłynąć na efektywniejsze wykorzystanie
pamięci. Istnieje kilka usprawnień, wykorzystywanych (przez
system) do zachowania w pamięci informacji, które mogą być
w niedługim czasie potrzebne. W
tym celu przypisuje on
pomocnicze obszary pamięci do obsługi pamięci podręcznej dysków
(disk cache) oraz do innych celów. Usiłuje zaadaptować się do
wskazanych priorytetów przetwarzania. Gdy zmiany priorytetów
zostaną wykryte, zmienia on przyporządkowanie pamięci - tak, aby
jak najlepiej dostosować się do postawionych wymagań. Dlatego
właśnie pamięć w serwerze NT jest prawie zawsze zajęta, nawet gdy
system nie jest bardzo obciążony. Windows NT wykrywa, że duży
jej obszar nie jest angażowany i, zamiast pozostawić ją nieaktywną,
744
Rozdział 19
próbuje wykorzystać tak, aby jak najlepiej dostosować swoje
działanie do potrzeb wszystkich aktywnych użytkowników.
Kolejną procedurą, jaką Windows NT może robić automatycznie,
jest dynamiczne dostosowywanie wielkości pamięci wirtualnej.
Jeżeli bieżąca wielkość pliku stronicowania (pagefile.sys) nie
wystarcza do prawidłowego obsłużenia pracy, system zajmuje wolną
pamięć dyskową - tak by sprostać aktualnym wymaganiom.
Niestety, w rezultacie nowe obszary zajęte przez dodane pliki
stronicowania nie sąsiadują na dysku z pierwotnym plikiem.
Powoduje to dodatkowe opóźnienia odczytu lub zapisu do tych
plików, ponieważ głowice muszą przesuwać się pomiędzy
oddzielnymi obszarami dysku. Dlatego, w
miarę możliwości,
sytuacji takich powinniśmy unikać.
Narzędzia do monitorowania wydajności
Przejdziemy teraz do narzędzia o nazwie Performance Monitor
(Monitor wydajności). Umożliwia ono proste monitorowanie
większości istotnych parametrów wydajności systemu
operacyjnego. Wyposażone jest w
wygodny interfejs czasu
rzeczywistego, pozwala na przechowywanie danych w protokołach,
które mogą się przydać w przyszłości.
Windows NT może monitorować wszystkie (istotne) zadania
systemu lub tylko wybrane z nich. Zadaniem administratora jest
dokonanie odpowiedniej selekcji - by uzyskać żądany zakres
informacji.
Pomiar aktywności
W jaki sposób Windows NT mierzy aktywność wybranych zadań?
Musimy przede wszystkim zrozumieć pojęcie obiektu (przykładem
obiektu w systemie NT może być procesor lub logiczne napędy
dysków). Do każdego z obiektów przypisane są serie liczników.
Każdy z nich mierzy różne rodzaje aktywności danego obiektu -
takie jak całkowita liczba bajtów na sekundę i liczba bajtów odczytu
na sekundę. Liczniki muszą mierzyć coś, co będzie pożyteczne (lub
np. wyznaczać stopień załadowania systemu). Posłużmy się
przykładem: informacja o odczycie sześciu milionów bajtów nie
Optymalizacja wydajności
745
mówi nam nic konkretnego. Gdyby było to sześć milionów bajtów
na sekundę, wskazywałoby na znaczną ilość danych w systemie.
Gdyby to było sześć milionów bajtów odczytu od ostatniego
uruchomienia systemu, dwa miesiące temu, nie byłaby to istotna
informacja. Dlatego większość liczników kontrolujących aktywność
systemu wskazuje wartości na sekundę lub procent zaangażowania
całkowitej pamięci (tak jak procent czasu procesora poświęcony
obsłudze zadań użytkowników). Kilka składników (m.in. liczba
zadań w kolejce) oznacza konkretne fakty statystyczne.
Pomiary liczników obserwowane są w konkretnym przedziale czasu.
Wykres ilustrujący każdą wartość na przestrzeni danego okresu
powodowałby szybki wzrost danych do obsłużenia. Dlatego
narzędzia, takie jak Monitor wydajności, podają średnie wartości
parametrów dla wskazanego przedziału czasu. Zmusza to do
ostrożności przy oznaczaniu wartości takiego przedziału. Na
przykład, wyciąganie średniej z obliczeń pobranych w ciągu całego
dnia pozwala na zaobserwowanie długoterminowych trendów
wzrostu zaangażowania systemu. Nie pozwoli nam jednak dostrzec
problemów z pamięcią, występujących między godziną 8 a 9 rano
i 1 a 2 po południu, a które nie ujdą uwagi użytkowników. Dlatego
powinniśmy dla pomiarów ustalić rozsądne przedziały czasu (w
okolicach kilku minut). Monitorowanie można także, aby nie
zbierać bezużytecznych danych, włączać i wyłączać automatycznie
(temat omawiany w dalszej części rozdziału).
Monitorowanie systemu nie może mieć wpływu na dane w nim
przechowywane. Na przykład błąd popełnimy wtedy, gdy do
zmierzenia osobno wszystkich parametrów uruchomimy kilkanaście
oddzielnych zadań Monitora wydajności, przy ustalonym 1-
sekundowym przedziale czasu pomiaru (zapisując jeszcze te dane na
jednym dysku). Musimy być bowiem świadomi, iż same czynności
zbierania informacji obciążą ogromnie system i
dane będą
bezużyteczne.
Ostatnim, istotnym dla monitorowania wydajności NT , czynnikiem
jest oznaczenie logiczne napędu. Większość obiektów śledzonych
przez Monitor wydajności ma kilka oznaczeń logicznych.
Przykładem jest monitorowanie napędu dysku logicznego - system
musi wiedzieć, który z dysków logicznych ma monitorować.
Dlatego Monitor zawiera listę oznaczeń logicznych (czyli
746
Rozdział 19
,,realizacji’’) obiektów.
Monitor wydajności śledzi wiele różnych typów obiektów (np.
procesory). Każdy obiekt ma kilka cech, które mogą być
kontrolowane. Każdej z tych cech Windows NT przypisuje licznik
(na przykład licznik mierzący procent zaangażowania czasu
procesora). Gdy dany obiekt ma kilka składników, należy wskazać
Monitorowi, który z
nich ma być śledzony i
przez który
z liczników (rysunek 19.4).
Aktywności, które można monitorować
Windows NT zapewnia szeroką gamę liczników śledzących funkcje
obiektów. Oto lista takich obiektów, z liczbami przypisanych im
liczników (w nawiasach):
!
Przeglądarka (21)
!
Pamięć podręczna - cache (27)
!
IP (17)
!
Dysk logiczny (21)
!
Pamięć operacyjna (27)
!
NetBEUI (39)
!
Zasoby NetBEUI (3)
!
Interfejs sieciowy (17)
!
NWLink IPX (39)
O biekt
D yski logic zne
Licz niki
% cz as prac y dysku
O dcz ytan e baj ty /se k.
Zapi sane bajt y /sek.
456
123
43
N apę d C
N apę d D
Re al iza cj a
Rys. 19.4.
Terminologia
dotycząca
Monitora
wydajności
Optymalizacja wydajności
747
!
NWLink NetBIOS (39)
!
NWLink SPX (39)
!
Obiekty (zdarzenia, semafory typu mutex, procesy, sekcje,
semafory i wątki)
!
Plik stronicowania (paging file) (2)
!
Dysk fizyczny (19)
!
Proces (18)
!
Procesor (10)
!
Port RAS (17)
!
Pełna usługa RAS (18)
!
Redyrekcja (37)
!
Serwer (26)
!
Kolejka zadań serwera (17)
!
System (24)
!
T CP (9)
!
Wątek (12)
T ak jak Protokół zdarzeń może być wykorzystywany przez
aplikacje - aby informacje o tym, co wydarzyło się w systemie
znajdowały się w
jednym miejscu, tak też aplikacje mogą
współpracować z Monitorem wydajności, składując informacje (o
wydajności) w jednym miejscu. Opcje monitorowania pojawiają się
na liście obiektów tylko wtedy, gdy działają odpowiednie aplikacje.
Na przykład, pięć obiektów Monitora wydajności, związanych
z serwerem SQL i dziewięć obiektów, związanych z
serwerem
wymiany, wymienione są na liście wówczas, gdy serwery te są
aktywne. Nie przeszkadza to uruchamianiu sesji Monitora w kilku
oknach - do kontrolowania pojedynczych czynników. Pozwala to
też na umieszczenie zebranych danych na jednym wykresie
i obserwowanie ważnych parametrów systemu, charakteryzujących
współpracę aplikacji z systemem operacyjnym. W ten sposób
można wyśledzić aplikację, odpowiedzialną za duże przeciążenia
systemu czy nawet blokowanie jego pracy.
Monitor wydajności jest narzędziem, którego roli przecenić nie
748
Rozdział 19
można i należy go szybko opanować. Praca z nim nie wiąże się
z żadnym ryzykiem, może on śledzić rozmaite zagadnienia, a jego
interfejs jest bardzo czytelny. Swobodne posługiwanie się różnego
rodzaju wykresami i licznikami przyda się w sytuacjach, gdy trzeba
będzie szybko rozwiązać uciążliwy problem.
M onitor wydajności
Jak wygląda Monitor wydajności (Performance Monitor)? Rysunek
19.6 ilustruje jeden z najlepszych sposobów przedstawiania danych -
wykres liniowy.
Rys. 19.5.
Monitor
wydajności
w menu Start.
Optymalizacja wydajności
749
!
W górnej części okna znajduje się tradycyjny pasek menu
Windows, który umożliwia dostęp do wszystkich opcji
przetwarzania.
!
Poniżej znajduje się pasek narzędzi, który pozwala na wybranie
najczęściej używanych opcji. Dzięki pierwszym czterem
przyciskom możemy wybrać sposób, w
jaki dane będą
wyświetlane: chart view, alert view, log view i report view.
Kolejne trzy pozwalają dodać, zmienić lub usunąć dany licznik
z listy menu rozwijanego. Następny przycisk służy do krótkiego
przeglądu informacji o wydajności (gdy dane nie są zbierane
w zdefiniowanych uprzednio przedziałach czasu) a sąsiedni - do
zapisania uwagi (zakładki) w protokole, co pomaga w szybkim
przypomnieniu zagadnienia przy przeglądaniu protokołu.
Ostatni przycisk wyświetla okno
Display Options
,
przeznaczone do zmiany ustawień.
!
Większa część okna zajęta jest przez wykres ilustrujący zebrane
dane.
Niektórzy z nas są przyzwyczajeni do jednoczesnego stosowania
kilku okien lub pasków narzędzi - tak aby widzieć wszystko, co
dzieje się w systemie. Możemy wówczas - do zmniejszania wykresu
Monitora wydajności - użyć klawiszy kontrolnych. Aby np.
Rys. 19.6.
Podstawowy
interfejs
Monitora
wydajności
750
Rozdział 19
uzyskać wykres z rysunku 19.7, należy nacisnąć kombinację
klawiszy CT RL+M (wyświetlenie i lub ukrycie paska narzędzi).
Kombinacja CT RL+P wyświetla okno Monitora wydajności na
wierzchu wszystkich okien pulpitu. Wystarczy teraz ustawić
Monitor tak, by kontrolował żądane składniki systemu, schować
menu, pasek narzędzi, okno statusu, zmniejszyć wielkość okna
i przesunąć je do wybranej pozycji.
Przy pierwszym uruchomieniu Monitora wydajności (Performance
Monitor) zauważymy natychmiast, że nie wykonuje on żadnych
działań. Przy tak dużej liczbie opcji monitorowania Microsoft nie
sugerował domyślnych ustawień tego narzędzia. Dlatego musimy
ustalić wszystkie żądane opcje, liczniki i obiekty, które mają być
kontrolowane. Zadanie to nie jest trudne. Klikamy najpierw ikonę
znaku plus na pasku narzędzi. Wyświetlone zostanie okno
dialogowe
Add to Chart
(Dodaj do wykresu) (rysunek 19.8).
W oknie tym wybieramy żądane opcje:
Rys. 19.7.
Zmniejszone okno
Monitora
wydajności.
Optymalizacja wydajności
751
!
Computer
(Komputer): Znacznik ten umożliwia wybranie
komputera, który ma być monitorowany. Jest to bardzo
użyteczna opcja, ponieważ pozwala kontrolować całe
środowisko, do którego ma się odpowiednie uprawnienia,
z własnego terminala. Znacznik po prawej umożliwia
odnalezienie komputerów, które można monitorować (pozostaje
też wpisanie podwójnego backslash-a (\\) i nazwy komputera).
!
Obj ect
(Obiekt): Jest to lista, którą można przewinąć, aby
wybrać obiekty do monitorowania. Wybrany obiekt powoduje
zmianę dopuszczalnych wartości wyświetlanych w kolejnych
dwóch polach.
!
Counter
(Licznik): Jest to lista przewijalna - do wyboru
odpowiedniego licznika, który ma być przypisany do
wyznaczonego obiektu.
!
Instance
(Realizacja): Po prawej stronie pól
Obj ect
i
Counter
znajduje się lista oznaczeń (,,realizacji’’) wybranego obiektu
(należy wybrać napęd dysku).
!
Add
(Dodanie): Aby dodać podany licznik obiektu, dopisany do
listy liczników, należy kliknąć ten przycisk.
!
Explain
(Objaśnienie): Bardziej szczegółowy opis wybranego
licznika uzyskamy po kliknięciu przycisku
Explain
; tekst
objaśnienia pojawi się u dołu okna dialogowego (rysunek 19.8).
Rys. 19.8. Okno
dialogowe Add to
Chart.
752
Rozdział 19
Chociaż objaśnienia te nie są zbyt szczegółowe ani jasne,
w pewnych sytuacjach mogą okazać się przydatne.
!
Cancel
(Rezygnacja): Po zakończeniu pracy klikamy ten
przycisk przed wybraniem
Add
, lub klikamy
Done
- po
naciśnięciu
Add
. Wrócimy do głównego ekranu, wyświetlającego
efekty naszych działań.
!
T o samo okno dialogowe znajduje zastosowanie dla wszystkich
typów monitorowania (wykresy, alarmy, protokoły, raporty).
Ostatnie słowo na pasku tytułu zmienia się, oznaczając opcję
ekranu, którą właśnie wykorzystujemy.
!
Na koniec wypada wspomnieć o kontroli koloru (Color), skali
(Scale), szerokości (Width) i stylu (Style) (pola u dołu okna).
Monitor sam zmienia kolory i wzorce linie dla krzywych (line
pattern) w trakcie dodawania przez użytkownika liczników,
niemniej jednak sposób wyświetlania możemy tutaj ustalić
samodzielnie.
Wykresy
Dotychczasowe rozważania ilustrowaliśmy wykresami względnie
prostymi. Spójrzmy jednak na rysunek 19.9, z
wykresami
ilustrującymi kilka nowych zagadnień. Po pierwsze, trudno jest na
tym rysunku skojarzyć krzywą z odpowiadającym jej licznikiem;
krzywych jest kilka i przecinają się wzajemnie. Nawet osoby mające
duże doświadczenie w odczytywaniu wykresów z trudnością radzą
sobie z
więcej niż kilkoma krzywymi na jednym wykresie
Rys. 19.8. Okno
dialogowe Add to
Chart z wybraną
opcją Explain
( Objaśnienie).
Optymalizacja wydajności
753
(pamiętajmy o tym, kiedy będziemy chcieli zademonstrować
kierownictwu nasze wydruki). Ponadto większość osób uznałaby
wykresy tu zaprezentowane za szczególnie trudne do odczytania.
Otóż Microsoft - aby ułatwić przypisanie poszczególnych
krzywych odpowiadającym im elementom danych - używa różnych
kolorów i wzorców linii. Jeśli wykres ma być czytelny na rysunku
czarno-białym, liczba krzywych powinna być niewielka (pomimo
różnych poziomów szarości odpowiadających różnym kolorom
i różnych wzorców linii).
Dobranie liczników, które chcemy monitorować i dopasowanie
opcji wyświetlania wraz z kolorami, które zadowolą nasze poczucie
estetyki, zabiera zwykle trochę czasu. Konieczność
przeprowadzania adaptacji po każdym uruchomieniu Monitora
stanowiłaby dużą niedogodność. Na szczęście wprowadzono tutaj
opcję
Sav e Chart Settings
(Zachowanie ustawień wykresu) w menu
File
(Plik) (rysunek 19.10), umożliwiającą zachowanie na dysku
ustawień dla danego wykresu. Można też, poprzez
Sav e
Workspace
(Zachowanie ustawień roboczych) zachować, w pliku
ustawień roboczych, wszystkie ustawienia dla wykresów, wybrane
opcje menu itd. Funkcje te naprawdę dają bardzo wiele. Można np.
z góry utworzyć cały szereg plików z
różnymi ustawieniami
Monitora wydajności, kiedy wszystko idzie dobrze. Można nawet
nagrywać dane dla kluczowych parametrów, odpowiadających
prawidłowej pracy systemu. W przypadku zaś wystąpienia jakiegoś
Rys. 19.9.
Kompletny wykres
Monitora
wydajności.
754
Rozdział 19
kryzysu istnieje możliwość szybkiego wyświetlenia wykresów
wydajności - w celu porównania ich wartościami odpowiadającymi
warunkom normalnym. T aka asekuracja może się opłacić wtedy,
gdy wszyscy naokoło zarzucają nas pretensjami. T worzymy
wówczas listę najważniejszych czynności, niezbędnych do
przywrócenia stanu sprzed awarii.
Jeśli zaś, poza administrowaniem systemem NT , tworzymy własne
aplikacje, autor podpowiada nam, że największe zainteresowanie
wśród użytkowników budzi możliwość generowania raportów
i narzędzia do prezentacji. Z
większością formularzy do
wprowadzania danych można sobie poradzić bez kłopotów, o ile są
funkcjonalne i wydajne. Gdy jednak przychodzi do raportów
i prezentacji, użytkownicy będą kłócili się między sobą godzinami,
które kolumny powinny znaleźć się w raporcie, w jakim porządku
należy je wyświetlać, a czasem - w jaki sposób należy obliczać
wartości w kolumnach. Autor miał już do czynienia z osobami,
które godziny całe poświęcały na dyskusję o krojach czcionek
i nagłówku dokumentu. T eraz jednak sami jesteśmy w
roli
użytkownika narzędzia do prezentacji danych (tzn. Monitora
wydajności). Stąd też Monitor ma kilka opcji prezentacji danych.
Nie ograniczają się one jedynie do wyboru podstawowego formatu
(np. raportowania alarmów dla omówionych wyżej wykresów
graficznych); możemy także ustalić sposób zbierania i prezentacji
danych na wykresie. Rysunek 19.11 przedstawia okno dialogowe
Chart Option
(Opcja wykresu).
Optymalizacja wydajności
755
Wymienione przed chwilą okno dialogowe umożliwia ustawienie
następujących opcji:
!
Legend
(Legenda): znacznik określający, czy część ekranu ma
zająć legenda (tzn. sekcja, w której kolor i wzorzec linii dla
krzywej przypisuje się danemu komputerowi, obiektowi,
Rys. 19.10.
Zachowanie
ustawień
Monitora
wydajności do
pliku.
Rys. 19.11. Okno
dialogowe Chart
Options.
756
Rozdział 19
licznikowi i realizacji). Zalecamy zawsze uaktywniać tę opcję,
chyba że konwencja wykresu jest absolutnie oczywista.
!
Value
Bar
(Pasek wartości): znacznik określający, czy
następujące ekrany danych należy prezentować tuż pod samym
wykresem: Last (ostatni), Average (średnia), Minimum,
Maximum i Graph Time (czas wykresu) (rysunek 19.11).
!
Vertical
Grid
(siatka pionowa): znacznik określający, czy na
wykresie mają być naniesione pionowe linie, by ułatwić odczyt
wartości dla poszczególnych punktów danych (na wykresie
z
rysunku 19.11 wybrano zarówno linie poziome, jak
i pionowe).
!
Horizontal
Grid
(siatka pozioma): znacznik określający, czy na
wykresie mają być naniesione poziome linie - by ułatwić odczyt
czasów odpowiadających poszczególnym punktom danych.
!
Vertical
Labels
(etykiety pionowe): znacznik definiujący, czy
ma być wyświetlana skala wartości dla linii pionowej.
!
Gallery
(galeria): opcja zawierająca przełączniki do wyboru
pomiędzy: Graph (wykres składający się z punktów połączonych
liniami) i Histogram (wykres słupkowy, na którym każdy punkt
danych reprezentowany jest przez pionowy słupek o wysokości
proporcjonalnej do mierzonej wartości)
!
Vertical
Maximum
(zakres pionowy): pole edycyjne do
podawania, czy wyświetlany ma być cały przedział wartości
ustalonych przez system NT (od 0% do 100%), czy też żąda się
przedziału zawężonego (np. od 0% do 50%). Opcja ta jest
użyteczna wtedy, gdy chcemy odczytać niewielkie zmiany
danych, niemożliwy do uchwycenia przy wyświetlaniu całego
zakresu wartości.
!
Update
Time
(czas aktualizacji): Sekcja pozwalająca nam ustalić,
czy aktualizacja ma być wykonywana okresowo (Periodic
Update), czy też ręcznie (Manual Update). Domyślna jest
aktualizacja okresowa (Periodic). Monitor wydajności zbiera
dane automatycznie dla danego punktu, ilustrującego wybrane
parametry w odstępie czasu podanym w polu wprowadzania
danych. W przypadku wybrania ręcznej (Manual) aktualizacji,
dane zbieramy samodzielnie, klikając na pasku narzędzi
Optymalizacja wydajności
757
Monitora przycisk z rysunkiem aparatu fotograficznego, przez
wybranie pozycji menu
Options
(Opcje) i
Update Now
(T eraz
aktualizuj), lub naciśnięcie CT RL+U.
Widzimy teraz, jak szeroką gamą opcji wyświetlania wykresów
dysponuje Monitor wydajności. Nie martwmy się, jeśli nie jesteśmy
jeszcze pewni, których opcji będziemy używać w
naszym
środowisku. Autor, w dalszej części rozdziału, zamieścił listę swoich
ulubionych liczników. Przejdziemy teraz do innych opcji zbierania
danych i prezentacji, które udostępnia Monitor wydajności. Jak
dotąd poznaliśmy tylko jeden z czterech możliwych formatów
prezentacji, niemniej jednak przystosowanie się do pozostałych
trzech nie powinno zabrać nam wiele czasu.
Widok alarmów w M onitorze wydajności
Rysunek 19.12 przedstawia następną opcję prezentacji Monitora
wydajności: widok alarmów (alert view). Załóżmy, że chcemy
kontrolować kilka parametrów dla kilku serwerów. Na wykresach
jednak pionowe linie zakrywają częściowo wyświetlane wartości,
tak że zamiast informacji o historii widzimy tylko ustalone
przedziały czasu. Ponadto mało kto lubi spędzać dwadzieścia cztery
godziny na dobę czekając na pojawienie się na ekranie informacji
sygnalizującej awarię. (W dalszej części wyjaśnimy pojęcie widoku
protokołu, umożliwiającego przechwycenie dowolnej danej
i zachowanie jej na dysku do późniejszej analizy). Mimo iż - w celu
wykrywania problemów z czasem reakcji na żądania użytkowników
- ustalimy względnie rozsądny interwał pozyskiwania danych (np.
60-sekundowy), w krótkim czasie zostaniemy „zalani” potokiem
danych.
758
Rozdział 19
Ponadto znakomita większość danych, które znaleźć się mogą
w pliku protokołu Monitora wydajności, nie będzie miała dla nas
żadnego znaczenia. Odzwierciedlają one bowiem normalne działanie
systemu, bez jakichkolwiek problemów. Ceny napędów dyskowych
nie są dzisiaj wygórowane, więc przechowanie tych wszystkich
danych nie stanowi zbyt dużego obciążenia. Cenny jest jednak nasz
czas pracy, a przedarcie się przez stosy liczb, by odnaleźć te, które
mogłyby sygnalizować jakiś problem, zabrałoby go naprawdę sporo.
Widok alarmów jest narzędziem umożliwiającym selektywną
rejestrację danych - tj. tylko wtedy, gdy osiągają one pewne
wartości graniczne (wprowadzone przez nas do Monitora
wydajności jako interesujące).
Konfigurację monitorowania z widokiem alarmów należy rozpocząć
od wybrania opcji widoku z
paska narzędzi (tzn. ikony
przedstawiającej książkę protokołów z wykrzyknikiem na okładce).
Następnie - w celu wybrania liczników do monitorowania - trzeba
kliknąć przycisk ze znakiem dodawania (+). Pojawiające się
w odpowiedzi okno dialogowe
Add to Alert
(Dodanie do alarmu)
(rysunek 19.13) ma te same możliwości kontroli, które
zastosowano do wybrania liczników w widoku wykresu (Computer,
Object, Counter, oraz Instance). Najważniejsze dane, wymagane do
uaktywnienia pracy widoku alarmów, wpisuje się u dołu ekranu.
Rys. 19.12. Ekran
Protokołu
alarmów.
Optymalizacja wydajności
759
Przełącznik
Alert If
(Alarm w przypadku) umożliwia określenie
sytuacji, w której rekord z alarmem powinien zostać zapisany. Za
pomocą tego przełącznika podajemy, że interesują nas wartości
większe (Over) lub mniejsze (Under) - od tej, zapisanej w polu
edycyjnym. Obszar kontrolny
Run Program on Alert
(Program
uruchamiany dla alarmu) daje możliwość uruchomienia jakiegoś
programu w przypadku napotkania wartości spoza prawidłowego
zakresu. Możemy tutaj zadecydować, czy program ma być
uruchamiany za każdym razem, gdy spełniony będzie warunek
alarmu, czy też tylko po pierwszym jego wystąpieniu.
Widok alarmów może okazać się naprawdę użyteczny, jeżeli jego
działanie będzie długotrwałe (lub permanentne, o
okresach
aktywności serwera). Zbiera on tylko te dane, które mają dla nas
jakieś znaczenie. Można podać wartości charakteryzujące zarówno
bardzo wielkie, jak i bardzo małe obciążenie. Można nawet
automatycznie uruchomić program podejmujący działania
naprawcze lub umożliwiający dokładniejsze monitorowanie
w przypadku napotkania jakichś niezwykłych stanów w systemie.
Co prawda na przeglądanie takich informacji też potrzeba czasu, ale
teraz przynajmniej możemy ograniczyć się do danych
sygnalizujących przynajmniej potencjalnie interesujące nas
zdarzenia.
Widok protokołu w M onitorze wydajności
Widok protokołu (log view) Monitora wydajności stanowi kolejny
etap naszych rozważań. Obowiązuje tutaj czytelna zasada -
wszystkie dane wpisywane są do pliku protokołu. Później plik ten
możemy otworzyć (z poziomu Monitora) i przejrzeć wyniki lub je
wyeksportować do pliku danych (by np. umożliwić ich import, dla
Rys. 19.13. Okno
dialogowe Add to
Alert.
760
Rozdział 19
dalszych analiz, do arkusza kalkulacyjnego (np. Microsoft Excel).
Obsługa Widoku protokołu nie jest kłopotliwa. Najpierw musimy
podać parametry do protokołowania (klikając na pasku narzędzi
ikonę ze znakiem dodawania), wskazać plik, który ma zawierać
protokołowane dane oraz określić metodę ich pozyskiwania.
Rysunek 19.14 ilustruje okno dialogowe
Log Options
(Opcje
protokołowania), w którym wpisujemy powyższe informacje.
Okno dialogowe
Log Options
zawiera standardowe możliwości
wyboru plików. Dane można dopisać na koniec istniejącego pliku
lub utworzyć dla nich nowy plik. Można nawet, by ułatwić
wyszukiwanie, przechowywać wszystkie pliki protokołów
w oddzielnym katalogu (lub w napędzie sieciowym). Po wpisaniu
nazwy pliku, musimy jeszcze tylko podać czas aktualizacji.
Wskazana jest tutaj ostrożność, gdyż po wybraniu np. czasu
aktualizacji wynoszącego 10 sekund, w
każdym dniu
wygenerowanych zostanie 8 600 punktów dla każdego wybranego
licznika. Proces protokołowania uruchamiamy wybierając
Start
Log
. Zauważmy, że Monitor wydajności musi być stale aktywny,
aby mógł zbierać dane do wybranego przez nas pliku protokołu.
(Narzędzie to może także pracować w tle, o czym powiemy
później).
Rys. 19.14. Okno
dialogowe Opcje
protokołowania.
Optymalizacja wydajności
761
Widok raportów M onitora wydajności
A teraz ostatni widok, udostępniony przez Monitor wydajności -
Widok raportów (report view), przedstawiony na rysunku 19.15.
Musimy tutaj podać listę liczników do monitorowania;
w
odpowiedzi pojawi się lista parametrów i
wartości
zaobserwowanych w ostatnim interwale aktualizacji. W pracy z tym
widokiem bardzo pomocną będzie dla nas opcja ręcznej aktualizacji
danych. Wyobraźmy sobie sytuację, w której cały system działa
dobrze, jeśli pewna aplikacja nie jest uruchomiona. Zbieramy zestaw
wartości dla tej normalnej sytuacji i zapisujemy je na dysk.
Uruchamiamy następnie „podejrzany” program i zbieramy nowy
zestaw danych dla porównania. Jest to więc jeszcze jedno narzędzie
w naszym arsenale środków, jakimi dysponować możemy
w kryzysowych momentach pracy systemu.
Wybór źródła danych w M onitorze wydajności
Monitor wydajności oferuje nam wiele, wbudowanych w widoki
wykresów, możliwości prezentacji. Opcja protokołowania
użyteczna jest jedynie przy zbierania danych w długich przedziałach
czasu, kiedy nie mamy możliwości stałego śledzenia wykresów
przed ich zamazaniem. W tej sytuacji pomocna będzie opcja
Data
From
(Źródło danych) z menu
Options
, generująca okno dialogowe
(rysunek 19.16) do wyboru przedmiotu wizualizacji wykresem.
Normalnym ustawieniem jest wizualizacja aktywności bieżącej
(liczniki aktualnie wybrane do monitorowania). Dysponujemy
opcją wyboru jednego z
już wcześniej utworzonych plików
protokołów, jako przedmiotu późniejszej wizualizacji wykresem.
762
Rozdział 19
Na koniec warto zapamiętać, iż jeśli wybierzemy pewne ustawienia
do monitorowania zestawu parametrów za pomocą jednego widoku,
nie będą one obowiązywały dla innych widoków. Jeśli np. za
pomocą wykresu monitorujemy szybkości transferu danych na
dysku logicznym, nie oznacza to, że do tych ustawień i danych
można uzyskać dostęp z widoku raportów).
Rys. 19.15. Okno
dialogowe
Dodanie do
raportu.
Rys. 19.16. Okno
dialogowe Źródło
danych.
Optymalizacja wydajności
763
Inne narzędzia do optymalizacji
Omówimy teraz szereg narzędzi przydatnych w
przypadku
problemów związanych z wydajnością. Monitor wydajności jest
podstawowym, wiele oferującym narzędziem, przewidzianym do
obsługi monitorowania wydajności w środowisku Windows NT .
Warto jednak zwrócić uwagę także na te dane, które możemy
pozyskać z innych, niżej wymienionych, narzędzi do obsługi
monitorowania wydajności:
!
Event Viewer (Przeglądarka zdarzeń)
!
Ekran
Virtual Memory
(Pamięć wirtualna) w aplecie
Control
Panel System
(System panelu kontrolnego).
!
Ekran
Tasking
(Obsługa zadań) w aplecie
Control Panel System
(System panelu sterowania).
!
Aplet
Serv ices
(Usługi) Panelu sterowania (
Control Panel
).
!
Aplet
Serv er
w Panelu sterowania.
!
Windows NT Diagnostics (Diagnostyka systemu Windows NT )
w
grupie programów Administrative T ools (Narzędzia do
administrowania).
Przeglądarka zdarzeń
Podstawowym przeznaczeniem Przeglądarki zdarzeń (Event
Viewer) jest nadzorowanie (auditing) systemu Windows NT
(opisaliśmy je dokładnie w
rozdziale 24). Służy ona do
nadzorowania zarejestrowanych pewnych sytuacji (zdarzeń), które
zdefiniowano jako interesujące na przyszłość. Odnosi się ona
zarówno do usług (które np. nie chcą się uruchomić lub startują
i „zawieszają” się), jak i
komunikatów informacyjnych (np.
o uruchomieniu i zamknięciu systemu). Przeglądarka zdarzeń może
również rejestrować działania związane z aplikacjami (np. serwera
SQL i Serwera wymiany poczty), które zaprojektowano tak, aby
mogły rejestrować takie informacje. Rekord z datownikiem może
okazać się bardzo pomocny, kiedy próbujemy dowiedzieć się, co
działo się w systemie wówczas, gdy wystąpił dany problem.
Posłużymy się czytelnym przykładem: użytkownicy zgłosili nam
niezwykłą powolność systemu w
okolicach godziny 12:45.
764
Rozdział 19
Ponieważ w
czasie tym Monitor wydajności (Performance
monitor) nie działał, nie ma żadnych zarejestrowanych danych
dotyczących liczników związanych z wydajnością. Są jednak dane
subiektywne: opinia użytkowników o niskiej wydajności systemu
o określonej porze dnia. Pierwszą rzeczą jest sprawdzenie - za
pomocą Przeglądarki Zdarzeń - czy około godziny 12:45 nie
wystąpiły jakieś specjalne zdarzenia.
Rysunek 19.17 ilustruje pracę Przeglądarki w systemie autora.
Możemy tutaj zauważyć, że w tym (mniej więcej) czasie, kiedy
użytkownicy zgłaszali problemy z
wydajnością, w
kolejce
oczekiwało kilka zadań drukowania. Najwidoczniej ktoś (autor,
w rzeczy samej) skierował wówczas do kolejki kilka złożonych
wydruków graficznych na taką drukarkę, która mocno obciążyła
zasoby systemowe. Można wówczas wykonać pewne testy,
przeprowadzić symulację sytuacji odpowiedzialnej za problem,
a następnie podjąć działania naprawcze. Najlepszą i najważniejszą
cechą Przeglądarki zdarzeń jest jej - dzięki oczekiwaniu w tle - stała
gotowość do podjęcia
żądanych działań. Ponadto jej
skonfigurowanie nie nastręcza problemów.
Aplet do wyświetlania parametrów pamięci wirtualnej
W naszej pracy pomocny może też być ekran
Virtual Memory
(Pamięć wirtualna) apletu
Control Panel System
(System panelu
sterowania). Rysunek 19.18 przestawia ten ekran dla komputera
autora książki. Nie uzyskamy tutaj np. informacji, dlaczego dana
aplikacja działała zbyt wolno dziś po południu - możemy jednak
sprawdzić konfigurację plików stronicowania (paging files). U dołu
ekranu zapisane są też ciekawe informacje o pamięci używanej
Rys. 19.17.
Rekord
Przeglądarki
zdarzeń
wykorzystany do
monitorowania
wydajności.
Optymalizacja wydajności
765
przez sterowniki i wielkości Rejestru (Registry). Ramka u góry służy
do sprawdzenia, które napędy dyskowe zawierają pliki
stronicowania (co zainteresuje nas zwłaszcza wtedy, gdy
obserwować będziemy intensywne stronicowanie w systemie wraz
z mocno obciążonym napędem dyskowym). Stronicowanie może
istotnie obciążyć dyski zawierające pliki stronicowania.
Obsługa zadań
Ciekawym mininarzędziem do analizy jest okno do ustalania
priorytetów zadań w Windows NT . Jest ono miejscem, w którym
możemy wpływać na algorytmy samoczynnej optymalizacji.
System NT Workstation jest zoptymalizowany pod kątem czasu
reakcji na działania użytkowników (w tle). W
NT Server
poświęcono (w pewnym stopniu) szybkość reakcji konsoli na rzecz
nadzoru użytkowników pracujących w sieci, przeprowadzanego za
pośrednictwem usług w tle (takich jak usługi sieciowe, drukowania
i usługi zarządzania systemem bazy danych). Rysunek 19.19
przedstawia okno
Tasking
(Obsługa zadań) apletu
System
,
dostępnego z Panelu Sterowania (
Control
Panel
). Jak widać,
dostępne są trzy poziomy sterowania - od intensywnej obsługi
aplikacji pierwszoplanowych - do równowagi między obsługą żądań
z pierwszego planu a ich obsługą z tła. Jeśli kiedykolwiek zmuszeni
zostaniemy do pracy intensywnym przetwarzaniu danych na mało
wydajnym serwerze, odniesiemy wrażenie, że nie ma nawet
Rys. 19.18. Ekran
Virtual Memory.
766
Rozdział 19
równowagi pomiędzy procesami, a raczej, że serwer zwyczajnie
ignoruje nas na rzecz tych użytkowników, którzy są podłączeni do
niego przez sieć. (Być może jest to tylko subiektywna opinia
autora, a może po prostu przyzwyczaił się on za bardzo do
względnie dobrego sprzętu...).
Aplet Usługi
Następnym narzędziem, pomocnym przy rozwiązywaniu
problemów z wydajnością, jest aplet
Serv ices
(Usługi) (rysunek
19.20). Za jego pomocą sprawdzamy, jakie usługi są w danym
momencie aktywne. W odniesieniu do problemów z wydajnością
narzędzie to znajduje zastosowanie do wyszukania kilku
działających, ale już niepotrzebnych usług. Jest to idealny sposób na
zwiększenie wydajności systemu bez ponoszenia dodatkowych
kosztów. Inny wariant polega na uruchamianiu szeregu usług,
wymaganych jedynie w
określonych porach dnia. Możemy
utworzyć plik wsadowy z
komendami net start
i net stop
- w celu uruchamiania i zatrzymywania tych usług
w zależności od potrzeb. Ilustruje to poniższy przykład, w którym
zatrzymana zostaje usługa bazy danych Oracle, by umożliwić
zakończenie operacji tworzenia kopii bezpieczeństwa (na
marginesie: w pliku wsadowym jest też kilka komend zamykających
bazę Oracle, a następnie - przez skrypt - znów ją otwierających).
Rys. 19.19. Okno
dialogowe
Tasking ( Obsługa
zadań).
Optymalizacja wydajności
767
Wystarczy zapamiętać, że za pomocą apletu
Serv ices
można
sprawdzić, które usługi są aktualnie realizowane.
Aplet Server
Następnym narzędziem z listy jest aplet
Serv er
(którego nie
należy mylić z apletem
Serv ices
) (rysunek 19.21). Dzięki niemu
możemy szybko sprawdzić kilka parametrów bezpośrednio
wpływających na wydajność, bez konieczności ustawiania plików
Monitora wydajności
(Performance monitor). Poniżej
przedstawiamy te pozycje, które autor uznał za godne uwagi:
!
Liczba użytkowników z aktualnie otwartymi sesjami w serwerze.
Listę takich użytkowników uzyskamy po wybraniu funkcji
Users
(Użytkownicy). Jeśli borykamy się z
problemem
nawracającym, z opcji tej możemy skorzystać do sprawdzenia,
czy i kto jest zawsze zalogowany, gdy pojawia się problem.
Można potem sprawdzić, jakie czynności użytkownika mogłyby
ewentualnie go powodować. Jeśli opisany sposób wydaje nam się
żmudny, pamiętajmy, że może on (jako jedyny !) umożliwić
nam wykrycie przyczyny zakłóceń pojawiających się „ni stąd, ni
Rys. 19.20. Aplet
Usługi
Rys. 19.21. Aplet
Server.
768
Rozdział 19
zowąd”, a
potem znikających bez śladu, zanim zdążymy
uaktywnić i ustawić formalne procedury monitorowania.
!
Liczba zablokowanych (locked) plików. W
niektórych
aplikacjach kładzie się bardzo duży nacisk na utrzymywanie
integralności danych. Stąd też aplikacje takie - podczas ich
aktualizowania przez wątek - blokują swoje pliki danych.
Problem polega na tym, że inne aplikacje użytkownika,
wymagające dostępu do tych plików mogą, oczekując aż
pierwsza aplikacja je odblokuje, „utknąć” w martwym punkcie.
Użytkownikowi końcowemu może wydawać się, że długie okresy
oczekiwania wynikają z bardzo dużego obciążenia procesora.
Aplet do diagnostyki systemu Windows NT
Ostatni na liście innych użytecznych narzędzi do monitorowania
jest panel Windows NT Diagnostics (Diagnostyka systemu
Windows NT ) (rysunek 19.22). Nie jest on aż tak funkcjonalny,
jak panele kontrolne urządzeń w Windows 95, udostępniające
wszystkie wewnętrzne parametry (jak przerwania, adresy w pamięci
itd), mające wpływ na działanie systemu. Niemniej także i tutaj
znajdziemy podobne informacje.
Narzędzia do monitorowania - uwagi końcowe
Opisane wyżej narzędzia są naprawdę bardzo pomocne
Rys. 19.22. Ekran
diagnostyczny
W indows NT.
Optymalizacja wydajności
769
w wykrywaniu przyczyn i rozwiązywaniu większości problemów,
z
którymi administratorzy borykają się najczęściej. Przed
przejściem do następnego tematu kilka ostatnich uwag:
!
Dyskowe narzędzia monitorujące wprowadzają pewne niewielkie
obciążenie dodatkowe (zwykle 1,5%). Z tego powodu Microsoft
uznał, że monitorowanie dyskowe jest domyślnie wyłączone.
Włączenie liczników związanych z dyskami możliwe jest po
wpisaniu w linii komend: diskperf -y, i następnie przełado-
waniu komputera, którego napędy dyskowe chcemy
monitorować. Potem dane z tych liczników zostaną skojarzone
z napędami logicznymi i fizycznymi.
!
Musimy pamiętać, że monitorowanie wielkiej liczby parametrów
może spowolnić system. Dlatego należy je przeważnie
rozpoczynać dla problemów ogólnych, a dodatkowe liczniki,
odnoszące się do konkretnych części i obszarów systemu,
uaktywniać dopiero wtedy, gdy liczniki ogólne wskażą na
potencjalne przyczyny problemów.
!
Monitor wydajności (Performance Monitor) umożliwia
monitorowanie zdalnych komputerów NT . W
ten sposób
administrator może, korzystając z
własnej stacji roboczej,
nadzorować kilka serwerów. W przypadku takiej konfiguracji
wydajność wszystkich komputerów w sieci można sprawdzać
w jednym miejscu.
M onitorowanie wydajności w zadanych godzinach
Informacji o wydajności nie musimy pobierać permanentnie.
W wielu firmach systemy są niemal nieobciążone wieczorem lub
nocą. Nie ma sensu marnowanie przestrzeni dyskowej na dane
z bardzo wielu liczników, o których i tak wiadomo, że wskazują
wartości bliskie zeru. Celem uniknięcia takiego marnotrawstwa
możemy skorzystać z małego i zgrabnego narzędzia, zawartego
w
pakiecie Windows NT Resource Kit, umożliwiającego
rozpoczęcie w tle monitorowania wydajności z użyciem plików
ustawień, już przedtem zachowanych na dysku. Można
skonfigurować wiele plików ustawień tak, by średnie zbierane były
co minutę podczas normalnych godzin pracy, a co pół godziny
w
nocy, kiedy działają stosunkowo długie zadania wsadowe
770
Rozdział 19
i obciążenie systemu mało zmienia się w czasie. Usługą realizującą
to zadanie jest datalog.exe. Włącza się ją i wyłącza z linii
komend NT (albo poprzez plik wsadowy) lub z wykorzystaniem
komendy
monitor.exe
. W
poniższym przykładzie
monitorowanie powinno zacząć się o godzinie 8:00, a zakończyć
o godzinie 11:59 (praca poranna):
at 8:00 ”monitor START”
at 11:59 ”monitor STOP”
Pakiet Resource Kit udostępnia więcej szczegółowych informacji na
temat omawianej usługi. W dalszym ciągu musimy - aby sprawdzić,
co się dzieje w
systemie - oglądać pliki protokołów, ale
przynajmniej nie jesteśmy zmuszeni do stałego przesiadywania przy
komputerze (żeby włączać i wyłączać proces monitorowania).
Istnieje ponadto udogodnienie, polegające na interaktywnym
tworzeniu i sprawdzaniu plików ustawień z użyciem Monitora
wydajności. Własność ta, w połączeniu ze wszystkimi wyżej
omówionymi funkcjami monitorowania, stwarza rzeczywiście
skuteczny zestaw narzędziowy do kontroli wydarzeń
w zarządzanym systemie NT .
Startowy zestaw liczników
Jest wiele rzeczy do obserwacji, a tylko kilka narzędzi do
wykorzystania. Ponadto wiele z liczników przeznaczonych jest dla
bardzo specjalnych sytuacji, pozbawiając nas w ten sposób wielu
użytecznych danych. Przedstawimy teraz zestaw liczników, który
(według opinii autora) pozwoli nam stworzyć ogólną i miarodajną
ocenę stanu systemu. Jeśli któryś z tych liczników zaczyna
sygnalizować problem, wówczas do wyśledzenia jego przyczyny
będziemy mogli skorzystać z
innych liczników, związanych
z podejrzanym obiektem.
Opierając się na klasycznym modelu budowy komputera (procesor
(CPU), pamięć, wejście/wyjście (przede wszystkim dyski twarde)
i obsługa sieci) autor proponuje nam rozważyć następujący startowy
zestaw liczników:
!
Procesor: wykorzystanie czasu procesora [%]. Jeśli nasz
procesor jest obciążony w
blisko 100%, oznacza to, iż
najprawdopodobniej zbliżamy się do granicy możliwości
Optymalizacja wydajności
771
przetwarzania naszego komputera. W przypadku systemów
wieloprocesorowych musimy ustalić obciążenie wszystkich
procesorów. Mogłoby np. okazać się, że system i aplikacje
korzystają jedynie z jednego z procesorów, gdy pozostałe są
bezczynne (Windows NT „czuwa” nad podziałem zaangażowania
procesorów). Pamiętajmy, że przetwarzanie w sposób naturalny
ma zmienny przebieg (aplikacja czeka przez chwilę na dane
z
dysku, potem startuje w
wybuchu nagłej aktywności).
W związku z tym obciążenia powinniśmy mierzyć w rozsądnych
przedziałach czasu (10 sekund i więcej).
!
Pamięć: szybkość stronicowania
[stron/sekundę].
Stronicowanie pomiędzy pamięcią fizyczną a wirtualną jest
zjawiskiem normalnym i zdarza się przy niewielkim obciążeniu.
Uważać należy na sytuacje, w
których staje się ono
intensywniejsze (niż zwykle), a system, zamiast realizować
przetwarzanie dla użytkowników - poświęca cały swój czas na
przesyłanie informacji między plikami stronicowania i samą
pamięcią fizyczną. Szybkość stronicowania mniejszą lub równą 5
uważa się zwykle za prawidłową, ale może się to zmieniać
w różnych systemach.
!
Fizyczne napędy dyskowe: fragmentaryczny czas
obciążenia [%]. Aplikacje ,,wolą’’ przechowywać wszystkie
pliki we wspólnej przestrzeni - tak, aby można je było znajdować
i separować od tych, utworzonych przez inne aplikacje. Ma to
swoje negatywne strony: kiedy działa jakaś aplikacja (zwłaszcza
gdy obsługuje wielu użytkowników), przejawia tendencję do
znacznego (nieproporcjonalnego względem pozostałych
napędów) obciążania napędu dyskowego z jej plikami. Dyski
twarde - z uwagi na ich nieefektywną obsługę w prawie każdej
aplikacji - stają się przyczyną „wąskich gardeł” (kiedy to
aplikacje bezczynnie wyczekują na zakończenie transferu
danych dla jednego użytkownika, zanim inni będą mogli uzyskać
dostęp do swoich danych). Zjawisko to wyznacza jeden
z najważniejszych aspektów optymalizacji dla baz danych.
Doświadczenie uczy, że powinno się redukować obciążenie
napędu przekraczające 90 % jego czasu.
!
Fizyczne napędy dyskowe: długość kolejki. Długość kolejki
jest następnym wskaźnikiem służącym do wykrywania, że kilka
772
Rozdział 19
procesów użytkownika nic nie robi w oczekiwaniu na dostęp do
napędu dyskowego. Zdroworozsądkowa reguła mówi, że jeżeli dla
danego napędu dyskowego długość kolejki przekracza 2, to
należy rozważyć sposoby zmniejszenia jego obciążenia.
!
Serwery: ogólna liczba przesłanych bajtów na sekundę.
Ostatnim komponentem wydajności, któremu powinniśmy
poświęcić uwagę, jest obciążenie sieci powodowane transmisją.
Niestety, ze względu na dużą ilość monitorów dla każdego
z różnych protokołów sieciowych, nie jest to zadanie proste.
Omawiany licznik pozwala nam zorientować się, kiedy sieć i/lub
karta interfejsu sieciowego nie nadąża z obsługą żądań. Wartość
bliska nominalnej wartości granicznej dla używanego typu sieci
(3 miliony bitów na sekundę dla standardu Ethernet oraz 4 albo
16 milionów bitów na sekundę - dla T oken ring) wskazuje, że
sama sieć jest przeciążona. Parametr ten jednak może być
mylący, gdyż w przypadku podłączenia do sieci lokalnej, która
bez trudności przesyła dane z
wymienionymi powyżej
prędkościami, prawdziwym „wąskim gardłem” stałaby się sieć, do
której podłączeni bylibyśmy za pomocą łączy o maksymalnej
przepustowości np. 56 KB/s. Wreszcie sieć może sobie radzić ze
swoją przepustowością nominalną, ale karta sieciowa naszego
komputera - już nie.
Narzędzia do monitorowania powinniśmy uruchamiać podczas
normalnej pracy systemu - dla orientacji, jakie wartości liczników
wiążą się z wydajnością pozostającą w granicach normy. Jest to
szczególnie istotne w przypadku tych liczników, których nie
wymieniliśmy na powyższej liście; trudno byłoby podać dla nich
reguły ogólne, gdyż w bardzo dużym stopniu zależą one od sprzętu.
Stąd np. szybki napęd dyskowy, współpracujący z
szybkim
kontrolerem i magistralą, może odczytać o wiele więcej bajtów
w ciągu sekundy, niż wolny napęd połączony z
wolnym
kontrolerem.
Na koniec wspomnieć należy jeszcze o możliwościach innego
narzędzia (z pakietu Resource Kit), przeznaczonego do symulacji
obciążeń w systemie. Dzięki niemu możemy ustalić, które liczniki
wiążą się z ograniczeniami systemu. Powinniśmy zacząć od średnich
obciążeń, a następnie zwiększać je - aż do zauważenia poważnego
pogorszenia wydajności. Wartości liczników należy rejestrować
Optymalizacja wydajności
773
w trakcie zwiększania obciążenia i zaznaczać liczniki, dla których
wartości te są największe. Operacja taka jest czasochłonna i wpływa
na pracę użytkowników. Jeśli jednak zarządzamy szczególnie dużym
lub wymagającym środowiskiem NT , dane te mogą okazać się
bardzo cenne - zwłaszcza przy organizowaniu zasobów przed
osiągnięciem przez system absolutnej granicy przetwarzania.
Musimy być świadomi, iż każda aplikacja ma inny wpływ na
system. Np. bazy danych nadmiernie angażują pamięć,
wejście/wyjście i
zdolność systemu do prostych
(całkowitoliczbowych) obliczeń. Aplikacje inżynierskie i naukowe
nadużywają moc obliczeniową komputera, zwłaszcza przy
kalkulacjach zmiennoprzecinkowych. Warto wiedzieć, co
konkretnie robią aplikacje w serwerze. Dzięki temu będziemy mogli
się zorientować, która aplikacja (a więc i który użytkownik)
powoduje wzrost obciążenia systemu. Pamiętajmy, że licznik dla
kolejki dyskowej może wykazać przeciążenie danego napędu
dyskowego; naszym zadaniem jednak jest wykrycie aplikacji
i użytkownika, odpowiedzialnych za przeciążenia, a
także
zaradzenie temu i poprawienie wydajności.
Częste problemy: wykrywanie i rozwiązywanie
Niestety nasza nowo nabyta wiedza o analizowaniu przyczyn
problemów z
wydajnością w
systemie Windows NT nie jest
wystarczająca. T rzeba jeszcze umieć wykryć konkretny problem
i rozwiązać go tak, by wydajność wróciła do normy. Musimy być
przy tym świadomi, iż:
!
Problemy mogą się ukrywać. Rozważmy przykład intensywnie
wykorzystywanego napędu dyskowego. Jeśli nie sprawdzimy
wszystkich wskaźników, nie będziemy w
stanie ustalić
prawdziwej przyczyny zakłóceń, a
mianowicie wysokiego
stopnia stronicowania związanego z
napędem, na którym
znajduje się większość plików naszej bazy danych. Jest to dobry
przykład problemu zarówno z
pamięcią, jak i
sposobem
organizacji zasobów dyskowych w systemie. Stąd najlepiej jest
zawsze sprawdzać wszystkie dostępne informacje.
!
Żeby wiedzieć, co regulować, trzeba też wiedzieć dokładnie, co
działa w systemie kiedy pojawił się problem. Może okazać się to
774
Rozdział 19
trudne w systemach przetwarzających dane dla dużej liczby
użytkowników i obsługujących wiele różnorodnych aplikacji. Nie
wystarczy wiedzieć, że napęd dyskowy jest przeciążony. T rzeba
jeszcze ustalić - by dokonać odpowiednich czynności
regulacyjnych - która aplikacja jest przyczyną zakłóceń.
!
Różne są opinie co do satysfakcjonującego czasu reakcji. Osoby
przyzwyczajone do pracy z
prostymi aplikacjami dla
komputerów osobistych akceptują natychmiastowe czasy
reakcji. Kiedy jednak wyszukuje się dane w bazie danych
o objętości kilkuset gigabajtów, trzeba być odrobinę bardziej
wyrozumiałym i cierpliwym. T aki parametr powinien więc
zostać wspólnie przyjęty w
firmie, najlepiej przed
wprowadzeniem aplikacji - tak, by administrator zapewnił sobie
wystarczające zasoby obliczeniowe.
!
Należy również dokładnie rozważyć stosunek kosztów do
wydajności. Chociaż wielka szybkość przetwarzania jest zaletą
w każdym systemie, poświęcanie kilku miesięcy pracy na
przyspieszenie o
dwie sekundy czasu reakcji na żądania
użytkownika dla jednej aplikacji byłoby wielką przesadą..
Administratorzy mają przecież również mnóstwo innych zadań.
Następną decyzją do podjęcia mogłoby być rozstrzygnięcie, czy
lepiej wydać 400 złotych na dodatkowe 8 MB pamięci
operacyjnej, czy też wynająć specjalistę, który zoptymalizuje
system w ciągu miesiąca, biorąc 30 złotych za godzinę (a więc za
około 4800 złotych).
!
Czasem warto też rozważyć całkowicie „nietechniczne”
rozwiązanie problemu, przed zakupem sprzętu lub poświęceniem
długiego czasu pracy na optymalizację. Jednym z klasycznych
problemów z serwerami jest szczytowe obciążenie przez pierwszą
godzinę dnia pracy, a następnie przez pierwszą godzinę po
przerwie obiadowej. Zjawisko to można łatwo wyjaśnić:
większość pracowników przychodzi do biur, robi sobie kawę
i loguje się do systemu, żeby sprawdzić pocztę. T o samo dzieje
się po obiedzie, a czasem też tuż przed końcem dnia pracy (z
dodatkową ewentualnością szczytowych obciążeń zasobów
związanych z drukowaniem). Czasem list lub komunikat od
administratora do użytkowników, który wyjaśni sytuację
i zaproponuje znacznie krótszy czas reakcji (pod warunkiem
Optymalizacja wydajności
775
zmiany nawyków), może rozwiązać problem (bez drastycznych
decyzji co do ograniczeń dostępu czy zakupów dodatkowego
sprzętu).
M etodologia optymalizacji wydajności
Rozpoczęliśmy od podstawowych danych związanych
z wydajnością, zebranych z wykorzystaniem narzędzi omówionych
w tym rozdziale. Znajomość tych danych należy połączyć z wiedzą
o tym, co dzieje się w systemie (jakie uruchomiono zadania, czy nie
są realizowane comiesięczne zestawienia, bilanse itd.).
W następnym etapie powinniśmy powiązać zebrane dane
z informacjami na temat platformy sprzętowej i systemu Windows
NT . Zadaniem administratora jest określenie ewentualnych
przyczyn obserwowanego problemu. T utaj właśnie okazują się
szczególnie pomocne zebrane wcześniej dane przy prawidłowej
wydajności systemu. Wówczas nawet niewielkie zmiany we
wskaźnikach wydajności zostaną uchwycone, co może naprowadzić
nas na przyczynę problemu. Dobrze jest czasem zacząć od
ustalenia, co działa dobrze i zawężać stopniowo listę możliwych
źródeł zakłóceń.
Po zestawieniu listy potencjalnych przyczyn problemu,
powinniśmy - w celu potwierdzenia naszych hipotez - zebrać trochę
więcej danych. Może też jednak okazać się, że ogólne dane
o wydajności nie będą wystarczające. Być może trzeba będzie
uruchomić dodatkowe liczniki wydajności, aby pozyskać
odpowiednio wiele danych do podjęcia decyzji. Jest to często trudne
wyzwanie dla administratora, bo użytkownicy żądają rozwiązań
natychmiastowych i rzadko okazują cierpliwość. Poważne kłopoty
sprawiają tzw. problemy nawracające. Załóżmy, że (używając
alarmów w Monitorze wydajności) stwierdzamy pewnego ranka, że
wczoraj wystąpiły dwa „skoki” obciążenia systemu. Jak można
odtworzyć warunki, które doprowadziły do tych zakłóceń?
Mogłoby okazać się konieczne uruchomienie dodatkowych
monitorów na wiele dni lub nawet tygodni, zanim problem ten
pojawiłby się ponownie.
Jeśli mamy już wystarczająco wiele danych, musimy sformułować
możliwe przyczyny zakłóceń. Ograniczenie listy możliwych
776
Rozdział 19
przyczyn tylko do tych, które wydają się nam możliwe, jest jak
najbardziej zasadne. Dobrze jest też przypisać prawdopodobieństwa
poszczególnym pozycjom na liście możliwych przyczyn.
Po przeprowadzeniu wszystkich uznanych za celowe analiz czas na
faktyczne rozwiązanie problemu. T eraz właśnie niezbędna okaże
się, zebrana wcześniej, wiedza na temat systemu. Podstawowa
zasada eksperymentów naukowych, którą powinni przestrzegać
także administratorzy sieci komputerowych, dopuszcza zmianę
tylko jednej rzeczy na raz w systemie. Jeśli przenieślibyśmy
wszystkie pliki między napędami, to być może rozwiązalibyśmy
nasz problem, powodując jednak kilka następnych.
Typowe problemy z wydajnością
Dodanie jeszcze jednego napędu dyskowego jest wydatkiem mało
znaczącym, ponadto często wymaganym w przyszłości, wraz ze
wzrostem zapotrzebowań aplikacji. Jednak rozbudowa
o potężniejszy procesor/jednostkę centralną jest z
reguły
poważnym wydatkiem. Niektóre zagadnienia, jakie trzeba rozważyć
przy problemach z procesorem, obejmuje poniższa lista:
!
Czy procesor jest rozsądnie obciążony przez uruchomioną
aplikację? Ustalenie tego faktu może być trudne dla osób mało
obeznanych z
technologią komputerową. Jednak jeśli
dysponujemy procesorem Pentium z zegarem 150 MHz, który
jest przeciążony przez system poczty elektronicznej obsługujący
10 użytkowników, wtedy problem wiąże się raczej z aplikacją lub
innymi parametrami optymalizacji ale z
pewnością nie
z procesorem.
!
Czy w komputerze zainstalowano jakiekolwiek nowe lub mało
znane urządzenia? Źle napisany sterownik urządzenia może
zmarnować mnóstwo czasu procesora i spowolnić jego pracę.
!
Czy posiadamy dane monitorowania, zebrane podczas prób
planowania wydajności (patrz niżej), które potwierdziłyby naszą
opinię, że wzrost wymagań użytkowników uzasadnia zakup
nowego procesora? Czy w systemie zaczęto używać nowych
aplikacji, które ewentualnie wymagają optymalizacji lub
modernizacji procesora?
Optymalizacja wydajności
777
Kolejny aspekt naszych rozważań stanowi pamięć. Użytkownicy
PC bardzo często narzekają na wielkie, ich zdaniem,
zapotrzebowania systemu NT względem pamięci. Wspominaliśmy
już, iż z uwagi na szybszy (w stosunku do dysków) dostęp do
informacji znajdującej się w
pamięci operacyjnej, projektanci
systemów operacyjnych i aplikacji będą z pewnością dalej tworzyli
oprogramowanie wymagające coraz większej pamięci do
wykonywania coraz bardziej złożonych zadań. Nie należy też
zapominać, że wiele działań systemu NT , związanych
z samoczynną optymalizacją, dotyczy przydzielania pamięci w celu
polepszenia wydajności. Starając się ustalić przyczynę wadliwego
funkcjonowania pamięci powinniśmy znaleźć odpowiedź na
poniższe pytania:
!
Czy dobrze zoptymalizowano aplikacje wykorzystujące pamięć
współdzieloną? DBA może ustalić wymagania bazy danych
Oracle - od kilku do prawie stu megabajtów. T rzeba sprawdzić
prawidłowość optymalizacji (ani za mało, ani za dużo) przed
dokupieniem pamięci oraz stwierdzić, czy w systemie nie
działają żadne niepotrzebne usługi. Mając do czynienia ze
wszystkimi udogodnieniami zautomatyzowanej instalacji
oprogramowania trudno jest zapamiętać, czy usunięto wszystkie
stare usługi aplikacji przed zainstalowaniem nowych.
Sprawdzenie tego na liście w Panelu sterowania nie powinno być
specjalnie uciążliwe.
!
Jaka jest konfiguracja gniazd rozszerzeń pamięci? Często
producenci sprzętu łączą te gniazda parami i wymagają instalo-
wania układów pamięci w takich bankach również parami. Jeśli
rzeczywiście trzeba będzie zwiększyć wydajność serwera
i pamięć, wtedy lepiej wcześniej zakupić pojemniejsze układy
pamięci, by nie trzeba było ich później wymieniać na nowe,
spełniające wymagania.
Przechodzimy teraz do problemów wejścia/wyjścia, związanych
z napędami dyskowymi. Autor pracuje dużo z systemami baz
danych i uważa, że te właśnie zakłócenia pojawiają się najczęściej.
Są one jednak najłatwiejsze do rozwiązania, ze względu na dzisiejsze
pojemności i ceny napędów dyskowych. Pierwszą czynnością jest
ustalenie, które pliki są często używane (lub używane w tym samym
czasie przez daną aplikację) i umieszczenie ich na oddzielnych
778
Rozdział 19
napędach dyskowych. Najlepszym zaleceniem optymalizacyjnym
dla bazy danych Oracle, która działa mało wydajnie z powodu
problemów wyjścia/wejścia, jest umieszczenie tablic i indeksów na
osobnych napędach dyskowych (uważając przy tym na sposób
wzajemnego ich połączenia). Obciążenie można rozłożyć między
kilka napędów dyskowych, tak by każdy działał znacznie poniżej
granicznych wartości transferu danych, ale może zdarzyć się i tak,
że przekroczona zostanie wartość graniczna transferu dla
sterującego tymi napędami kontrolera. W
przypadku bardzo
wielkich zestawów napędów dyskowych z wieloma poziomami
kontrolerów dyskowych, ktoś musi - obok rozłożenia pomiędzy
poszczególne napędy dyskowe - rozłożyć obciążenie między
kontrolery (i kontrolery kontrolerów).
!
Napotkać możemy sytuacje, w których obciążenie wynikające
z aplikacji lub inne czynniki nie pozwolą na rozłożenie
obciążenia między kilka napędów dyskowych (jeśli np. wszystkie
operacje wejścia/wyjścia koncentrują się wokół jednego pliku).
T rzeba wówczas - aby zapewnić obsługę często używanych
plików - rozważyć zakup szybszych napędów i kontrolerów
(takich jak SCSI lub nawet napędów dysków
elektrostatycznych), a pozostałe napędy przydzielić do innych
zadań (takich jak magazynowanie wszystkich danych
o wydajności, które będziemy musieli protokołować w
tak
bardzo obciążonym systemie). Można też wdrożyć ,,paskowanie
dysków’’ (disk stripping), aby pojedyncze pliki przechowywane
były na wielu napędach dyskowych.
!
W zależności od stosowanego w danym napędzie dyskowym
systemu plików NT (FAT , NT FS itd.) pojawić się mogą
problemy wywołane fragmentacją plików. U zarania dziejów
komputerów wszystkie dane w pliku musiały być ulokowane na
dysku, jako zbiór przylegających do siebie bloków. Powodowało
to mnóstwo komplikacji - np. przy tworzeniu takich aplikacji,
jak edytory tekstów, które zapisują na dysk pewne dane do
jednego dokumentu, wykonują inne operacje, by ponownie
zapisywać do tego samego dokumentu. Dyskowe bloki danych za
obszarem zajętym przez dokument utworzony przez edytor
tekstów zostały zapisane w wyniku realizacji innych procedur.
W rezultacie utworzenie miejsca na zapisanie zmodyfikowanego,
większego dokumentu, wymagało przeprowadzenia bardzo wielu
Optymalizacja wydajności
779
operacji przestawiania plików na dysku. Rozwiązaniem było
umożliwienie dzielenia plików na wiele sekcji i uzupełnienie
obsługi plików o usługi systemu operacyjnego, potrafiące złożyć
taki plik razem wtedy, gdy ma być wykorzystany. T aki
mechanizm powodował z kolei nowy problem, spowodowany
różnicą między szybkością transmisji danych z
dysków
a mechanicznym ruchem ramion z głowicami. Stąd też dostęp do
pliku rozrzuconego po całym dysku (pliku pofragmentowanego)
jest znacznie wolniejszy niż do takiego, który znajduje się
w grupie przylegających do siebie sekcji. Czy fragmentacja
w ogóle ma istotny wpływ na pogorszenie działania Windows
NT nie zostało do końca ustalone. W każdym razie dostępne są
narzędzia do defragmentacji dla wielu różnych systemów plików,
takie jak Executive Software wraz z powiązanym produktem
Diskeeper.
!
Ciekawa sytuacja wiąże się z niższym, niż usług drukowania,
priorytetem usług dyskowych. Odważni mogą spróbować wejść
do Rejestru poprzez
service\lanman\server
\
parameters
i podnieść priorytet serwera z domyślnego poziomu 1 na 2
(dodać ThreadPriority typu DWORD z wartością 2).
!
Istnieje możliwość rozrzucenia jednego pliku między kilka
napędów dyskowych. Czasem sprzęt (lub oprogramowanie)
odpowiada wówczas za składanie razem sekcji kilku napędów
i traktowanie tych sekcji jako jednego napędu logicznego. Na
przykład w przypadku pary dwudyskowej pierwszy blok logiczny
znajdowałby się na pierwszym fizycznym napędzie dyskowym;
drugi natomiast - na drugim napędzie fizycznym; trzeci - na
pierwszym itd. T echnika ta, zwana ,,paskowaniem’’ (stripping)
jest przykładem technologii zwanej RAID (Redundant Arrays of
Inexpensive Disks ), stosowanej w celu polepszenia wydajności
i niezawodności.
Ostatnim obszarem występowania problemów w
naszych
rozważaniach jest sieć. Z uwagi na złożoność jej struktury nawet
administratorzy sieciowi mają czasem kłopoty, gdyż serwery
i stacje robocze mogą powodować zakłócenia równie często, jak np.
niska wydajność sieci lub uszkodzony sprzęt. Aby efektywnie
wykrywać awarie w sieci musimy dysponowanie diagramem jej
struktury. Nie jest to łatwe, gdyż w sieci wszystko ciągle się
780
Rozdział 19
zmienia, i większość osób nie ma dostępu do takich diagramów (jeśli
w ogóle ktoś je kiedyś wykonał). Przed przejściem do dalszych
analiz zapoznajmy się z poniższymi uwagami:
!
Szybkie i skuteczne rozwiązanie awarii w sieci możliwe będzie po
zawężeniu strefy jej występowania - do konkretnego fragmentu
sieci lub nawet do konkretnego komputera. Często wiąże się to
z weryfikacją pracy znajomych użytkowników różnych
segmentów sieci. Niektórzy z Czytelników mogą mieć dostęp do
zaawansowanych technik monitorowania, pomocnych przy
takim zawężaniu lokalizacji problemu. Źródłem większości
zakłóceń pracy w sieciach rozległych jest ograniczona prędkość
transmisji łączy z odległymi miejscami. Chociaż takie łącza
sieciowe nie muszą być przyczyną problemów w naszej sieci,
i tak pierwsi o nich usłyszymy (,,czemu twój serwer działa dziś
tak wolno?’’). Wniosek jest oczywisty: powinniśmy mieć na
podorędziu dane dowodzące, że niewystarczająca prędkość
transmisji nie wynika z błędów w naszej pracy.
!
Po stwierdzeniu, iż problem występuje na zarządzanym przez nas
serwerze, spróbujmy ograniczyć liczbę monitorowanych przez
serwer protokołów sieciowych. Podczas instalacji systemu
serwera łatwo zaznaczało się każdy możliwy protokół w celu
uniknięcia późniejszych kłopotów, ale teraz może to być
przyczyną nadmiernego obciążenia.
!
Można również tak zmodyfikować kolejność wiązania dla
różnych protokołów sieciowych, aby nadać większą rangę
ważniejszym z nich (np. protokołowi T CP/IP dla tych transakcji
baz danych, które wszyscy chcą przyspieszyć), kosztem
wydłużenia czasu reakcji dla usług, które w mniejszym stopniu
wymagają dużej szybkości (np. zadania drukowania).
!
Jeśli wszystkie opisane (i nieopisane) wyżej działania nie odniosą
skutku, spytajmy się ekspertów od sieci, czy potrafią polecić
kartę sieciową o przepustowości lepszej od obecnie używanej.
Karty bardzo różnią się wydajnością, przy czym większość
z nich stanowią proste karty przystosowane do względnie
niskich wymagań transmisyjnych stacji roboczych, a nie dużych,
wyznaczonych przez serwery. Zamiana karty jest mniej
kosztowna od wymiany całej sieci na szybszą lub też zmiany jej
topologii - w celu polepszenia routingu.
Optymalizacja wydajności
781
Na tym etapie będziemy kończyć nasze rozważania poświęcone
wydajności pracy serwera NT w sieci. Sztuka optymalizacji jest
złożona, stanie się jednak prostsza wraz z
nabywaniem
doświadczenia. Objęcie wszystkich dostępnych technik jest dla wielu
osób trudne. Ewolucja systemu Windows NT będzie chyba
ukierunkowana na wykorzystanie wielu nowych technologii, łącznie
z
Internetem, sieciami intranetowymi oraz technikami
multimedialnymi (np. obsługi wideograficznej w
komputerach
osobistych).
Monitorowanie sieci
Wielu administratorów zarządza małymi sieciami, w których awarie
zdarzają się stosunkowo rzadko. Inni znowu mają do czynienia ze
złożonymi sieciami rozległymi, nakładającymi wysokie wymagania
na wszystkie części systemu. Narzędzia do monitorowania,
wbudowane w system NT , mają jednak spełniać stosunkowo proste
wymagania mniejszych sieci. Mają one za zadanie udostępnić
rozsądną ilości informacji, na podstawie których można ustalić, czy
to serwer NT jest przyczyną problemu. Mogą nawet pomóc
w odnalezieniu protokołu i (ewentualnie) aplikacji powodujących
zakłócenia. Mocniejsze narzędzia mogą monitorować poziom ruchu
w sieci oraz typy różnych jej segmentów. Wiele z nich można
nawet uruchomić w Windows NT , a sprzedawane są przez wielkich
producentów sprzętu (np. Hewlett-Packard). Posiadają one
wygodne interfejsy graficzne (co ma znaczenie przy ilustrowaniu
obciążenia). Powinniśmy w każdym razie o takich narzędziach
pamiętać, kiedy już będziemy umieli udowodnić, że serwer zapewnia
obsługę transmisji w wystarczającym stopniu, a źródło spowolnienia
obsługi użytkowników leży gdzie indziej w sieci firmy.
Protokół SMNP
Protokół SNMP (Simple Network Monitoring Protocol) stworzono
z myślą o monitorowaniu informacji związanych z siecią. Wspomi-
namy go tutaj z dwóch powodów. Po pierwsze, sferę zastosowań
tego protokołu rozszerzono do monitorowania pracy urządzeń
sieciowych w takich systemach operacyjnych, jak Windows NT
Server. Agenta SNMP można zainstalować po to, by urządzenia
782
Rozdział 19
odległe mogły ustalić, co robi serwer. Po drugie, są pakiety narzędzi
do zbierania wyników pomiarów wydajności innych urządzeń
w sieci, funkcjonujących w Windows NT . Jedną ze stacji roboczych
(lub też jeden z serwerów) można by wykorzystać jako centralny
komputer monitorujący system sieciowy.
Planowanie i rutynowe monitorowanie wydajności
Kiedy administrator otrzyma sygnał od użytkownika
o niewystarczającej przestrzeni dyskowej w
systemie lub
o znacznym wydłużeniu prostej transakcji bazy danych, wtedy
powinien on rozpatrzyć problem o charakterze zewnętrznym. T aka
sytuacja zmusza go do szybkiego działania w dużym stresie.
Sytuacji takich, chociaż nie można całkowicie wyeliminować,
powinniśmy unikać za wszelką cenę. W tym celu trzeba nadzorować
system dokładnie i systematycznie. Wszystkie, opisane w tym
rozdziale, techniki monitorowania możemy stosować niemal
w każdej sytuacji. W
planowaniu musimy dysponować
potwierdzonymi danymi, charakteryzującymi tendencje
w znaczącym przedziale czasu, łącznie z
informacjami
o przewidywanych zmianach środowiska.
Metod obliczania zapotrzebowania na zasoby i wydajność jest wiele.
Dla celów niniejszej książki wystarczy zaprezentować kilka
podstawowych koncepcji, z których mogą (przy minimalnym
wysiłku) skorzystać administratorzy zajmujący się serwerami
małych grup roboczych lub dużymi, złożonymi z
serwerów,
centrami danych:
!
Jeśli nie udaje nam się przez dłuższy czas zamknąć programu
monitorującego wydajność, autor proponuje realizować
automatyzację pozyskiwania danych przy użyciu plików
protokołów Monitora wydajności (za pomocą komendy at)
albo przez uruchomienie go jako usługi. Za obowiązkowe należy
uznać okresowe zbieranie z tych plików informacji o średnich
i maksymalnych/minimalnych wartościach, i ich umieszczanie
w arkuszu kalkulacyjnym, bazie danych lub książce protokołów.
Optymalizacja wydajności
783
!
Zebrane dane należy okresowo przedstawiać kierownictwu, użyt-
kownikom itd. Dobrze jest dostosować planowanie wydajności
do cyklu finansowego swojej firmy.
!
Dane możemy gromadzić w arkuszu kalkulacyjnym, który
pomoże później utworzyć wykresy ilustrujące obciążenie
systemu w czasie. Długie szeregi liczb często są nieczytelne, ale
na wykresie nie sposób nie dostrzec, że krzywa wykorzystania
dysku zmierza nieubłaganie ku wartości granicznej.
!
Znajomość zdarzeń w systemie i przewidywanie na tej podstawie
przyszłych zdarzeń to nie wszystko. Możemy np., opierając się
na trendach wykorzystania procesora, przewidzieć, że jego
wydajność będzie wystarczająca przez dwa następne lata. Wiemy
jednocześnie, że grupa projektowa przygotowuje pięć nowych
aplikacji dla naszego serwera. Musimy znaleźć sposób
oszacowania (nawet bardzo pobieżne będzie lepsze niż żadne)
wpływu, jaki wywrą owe planowane zmiany na krzywe wzrostu -
aby wyznaczyć przedział czasu, w którym jakiś składnik serwera
osiągnie kres swojej wydajności.