Upload
jar
View
1.217
Download
4
Embed Size (px)
Citation preview
Program wykładu 1
Zaawansowane elementy systemu GNU/Linux:diagnostyka i optymalizacja
Jacek Kobus
Instytut Fizyki UMK2008/9
Program wykładu
1. Wprowadzenie
2. Wykorzystanie CPU
Program wykładu 2
• Proces/wątek i jego stany, tworzenie procesu (fork i clone2 )
• Zmiana kontekstu, przerwania
• Diagnostyka top, ps, psacct, sar, iostat, vmstat, strace,oprofile
3. Wykorzystanie pamięci
• Pamięć fizyczna i wirtualna, stronicowanie, pamięć wymiany
• Pamięć podręczna stron i buforów
• Pamięć jądra (alokator płytowy)
• Diagnostyka: top, ps, sar, iostat, vmstat, pmap, slabtop
Program wykładu 3
4. Wykorzystanie podsystemu blokowego wej/wyj
• Rodzaje i systemy plików (EXT2/EXT3/EXT4, JFS, XFS, Reiserfs)
• Planista wej/wyj
• Diagnostyka: sar, iostat, vmstat, fsck, lsof
5. Wykorzystanie podsystemu sieciowego
• Stos protokołów, gniazda
• Diagnostyka: netstat, sar, iptraf, ntop, tcpdump, wireshark
6. Wykorzystanie mechanizmów komunikacji międzyprocesowej
• Potoki, nazwane potoki, semafory, przekazywanie komunikatów, pa-mięć dzielona
• Diagnostyka: ipcs
7. Testy sprawności systemu i usług (benchmarking)
8. Konfiguracja jądra 2.6 systemu GNU/Linux
Program wykładu 4
Notatki do wykładu są dostępne pod adresem:
• http://www.fizyka.umk.pl/˜jkob/diagopt.pdf
• http://www.fizyka.umk.pl/˜jkob/diagopt.html
Literatura
[1] D. P. Bovet i M. Cesati. Linux Kernel. Wydawnictwo RM, Warszawa, 2001.
[2] P. G. Ezolt. Optimizing Linux(R) Performance: A Hands-On Guide to Linux(R)Performance Tools. HP Professional Series, 2005.
[3] Free OnLine Books. http://www.linux.org/docs/online books.html/.
[4] IA Optimization Reference Manual. http://dynopt.dtc.umn.edu/documents/IA--OPTIMIZATION-Ref-Manual.pdf.
[5] Interactive Linux Kernel Map. http://www.linuxdriver.co.il/kernel map/.
[6] R. Love. Linux kernel. Przewodnik programisty. Wydawnictwo Helion, Gliwice, 2004.
[7] A. H. Majidimehr. Optymalizacja systemu UNIX. Wydawnictwo Naukowo-Techniczne, Warszawa, 1998.
Program wykładu 5
[8] M. Mitchell, J. Oldham, and A. Samuel. Advanced Linux Programming.http://www.advancedlinuxprogramming.com/.
[9] D. Mosberger i S. Eranian. IA-64 Linux Kernel. Design and Implementation. Prentice-Hall PTR, Upper Saddle River, 2002.
[10] G. D. Musumeci and M. Loukides. Optymalizacja systemów komputerowych. Wy-dawnictwo RM, Warszawa, 2002.
[11] In Sanda K.Johnson, J. Gerrit Huizenga, and Badari Pulavarty, editors, PerformanceTuning for Linux Servers, New York, 2005. IBM Press, Pearson plc.
[12] A. Silberschatz i P. B. Galvin. Podstawy systemów operacyjnych. WydawnictwoNaukowo-Techniczne, wyd.5, Warszawa, 2002.
[13] S. Tommesani. Programming SIMD computers. http://www.tommesani.com/-Docs.html.
[14] U. Vahalia. Jądro systemu UNIXr, nowe horyzonty. Wydawnictwo Naukowo-Techniczne, Warszawa, 2001.
Wprowadzenie 6
Unix/Linux
• system z podziałem czasu (planista: prosty algorytm priorytetowy)
• wieloprocesowość i wieloprocesorowość
• jądro monolityczne, wielobieżne (wielowejściowe, reentrant)
• systemowa ochrona programów i danych
• hierarchiczna struktura plików
Unix/Linux jest dojrzałym, wydajnym, skalowalnym i niezawodnym syste-mem operacyjnym.
Wprowadzenie 7
Krótka historia Uniksa
• eksperymentalny system CTSS (Compatibile Time-Sharing System, po-łowa lat 1960., MIT) −→ Multics1 −→ Unix2 (1969)
• Ken Thompson, Denis Ritchie (Bell Labs, 1969-1970) – powstaje Unixpracujący na maszynach PDP oraz języki programowania B (Thomson)oraz C (Ritchie); przepisanie Uniksa w języku C w 1973 (PDP-11/45,PDP-11/70)
• Thomson i Ritchie publikują pracę na temat Unixa (1974); źródła sys-temu udostępnione, system intensywnie badany i rozwijany
• brak standaryzacji – IBM, DEC, SUN, Silicon Graphics, Microsoft two-rzą swoje wersje Unixa (AIX, Ultrix/Tru64 Unix, Solaris, Irix, XENIX)
1E.S.Raymond (Unix. Sztuka programowania) pisze, że Multics (MULTIplexed Information andComputing Service) to była próba stworzenia przeładowanego funkcjami „narzędzia informacyj-nego”, które miało efektywnie obsługiwać dzielenie czasu superkomputerów między wielu interak-tywnych użytkowników.2Unix wziął się od słowa UNICS (Uniplexed Information and Computing Service) pod jaką był
początkowo znany Unix.
Wprowadzenie 8
Długa historia Uniksa
• w połowie lat 1970. system Unix zaczął przenikać do innych firmi na uniwersytety (Rand, BBN, DEC, University of Illinois, HarvardUniversity, Perdue University, University of California w Berkeley)
• 1976 – Version 6 (dokumentacja J.Lionsa wewnętrznego działania jądraUniksa)
• 1979 – Version 7 (komputery PDP-11, Interdata 8/32), wersja na kom-putery VAX była znana pod nazwą 32V; ostatnia wersja Uniksa z AT&Tprzed komercjalizacją systemu
• 1978 – wersja 3BSD: dodanie do systemu 32V przez Billa Joya i OzalpaBabaoglu pamięci wirtualnej i stronicowania na żądanie (pierwsza tegotypu implementacja w systemach UNIX)
Wprowadzenie 9
– DARPA (Defence Advanced Research Projects Agency) wspiera bu-dowę standardowego systemu UNIX na potrzeby rządu; powstajewersja 4BSD; wersja 4.2BSD (1983) implementuje stos protokołówkomunikacyjnych TCP/IP przyczyniając się do ich popularności3
– w Berkeley opracowano nowy moduł obsługi terminala, interfejsużytkownika (powłokę C), edytor ex/vi, kompilatory języków Pascali LISP, wiele programów systemowych
• UNIX Support Group przejęła nadzór administracyjny i odpowiedzial-ność za dystrybucję systemu UNIX wewnątrz AT&T
• 1982 – USG udostępnia System III poza AT&T: system zawierał cechywersji 7 i 32V, UNIX/RT, fragmenty pakietu narzędziowego Program-mer’s Work Bench (PWB).
• 1983 – System V (USG→ System Development Laborartory (USDL))3W Bell Labs opracowano UUCP (Unix to Unix Copy Program), który od momentu powstania
Usenetu w 1981 obsługiwał komunikację między użytkownikami.
Wprowadzenie 10
• 1984 – System V Release 2 (V.2); System V Release 2, Version 4(V.2.4) – system pamięci wirtualnej ze stronicowaniem w trybie kopio-wania przy zapisie i pamięcią dzieloną
• 1986 – wersja 4.3BSD (ulepszona i rozszerzona wersja 4.2BSD)
• 1987 – System V Release 3 (V.3): system strumieni wejścia-wyjściaz wydania V8 (STREAMS), system zdalnych plików RFS; USDL →AT&T Information Systems (ATTIS)
• 1989 – AT&T (ATTIS→ UNIX Software Organisation, USO) udostęp-nia czwarte wydanie Systemu V (System V Release 4 – SVR4), któryłączy cechy Systemu V, wersji 4.3BSD, SunOS firmy Sun: możliwośćużywania długich nazw, system plików z Berkeley, zarządzanie pamięciąwirtualną, dowiązania symboliczne, sterowanie zadaniami, niezawodnesygnały, zgodny z POSIX.1; USO → USL (Unix System Laboratories)
• 1993 – wersja 4.4BSD (realizacja protokołu X.25, wsparcie dla standar-du POSIX, NFS, nowy system plików, unowocześniona struktura jądra,system pamięci wirtualnej z systemu Mach)
Wprowadzenie 11
• 1993 – USL zostaje kupiona przez Novell Inc. (w 1994 Novell przekazujeznak towarowy Uniksa grupie standaryzacyjnej X/Open)
• 1995 – SCO odkupuje od firmy Novell system UnixWare (plus prawado źródeł Uniksa)
• 1998 – IBM, Novell, SCO rozpoczęły (trwający 3 lata) projekt Monte-rey stworzenia Jednego Wielkiego Systemu z zastrzeżonych Uniksów
• 2000 – SCO sprzedaje UnixWare i prawa do kodu Calderze (dystrybutorLinuksa)
• 2003 – SCO Group (poprzednio Caldera Systems) kontra IBM (pozewo naruszenie własności intelektualnej wartości 5 mld USD), patrz:http://en.wikipedia.org/wiki/SCO v. IBM Linux lawsuit.
Wprowadzenie 12
Historia systemów operacyjnych wg E.S.Raymonda4
4UNIX Sztuka programowania, Wydawnictwo Helion, Gliwice, 2004
Wprowadzenie 13
GNU/Linux
• Richard Stallman i FSF (Free Software Foundation)
• GNU (Gnu’s Not Unix) – projekt stworzenia wolnego, uniksopodobnegosystemu operacyjnego wspierany od 1984 r. przez FSF
– asembler, kompilator C, program łączący
– biblioteka GNU C (glibc)
– bash (Bourne Again SHell)
– interpreter Ghostscript dla PostScriptu
– emacs (R.Stallman), gzip
• GPL (General Public Licence)
– oryginał: http://www.fsf.org/copyleft/gpl.html
– tłumaczenie: http://gnu.org.pl/text/licencja-gnu.html
– rodzaje licencji: http://www.gnu.org/licenses/license-list.pl.html
Wprowadzenie 14
Katalog wolnego oprogramowania†: 2210 pakietówPakiety oprogramowania GPL:
• projekt GNU: bash, bison, calc, chess, C-library, cpio, ddd, djgpp,emacs, fileutils (chgrp, chmod, chown, cp, itd), finger, gawk, gcal,gcc, gdb, ghostscript, ghostview, gimp, gnome, gnumeric, gpaint,gpc, grep, grub, gnupg, GSL (GNU Scientific Library), gzip, less, m4,make, mc, mtools, ncurses, octave, PSPP, GNU SQL, SXML, tar,texinfo, wget, wmaker
• inne projekty: AbiWord, Alliance, AWStats, CUPS, CVS, eFax, Fre-eAmp, FreePascal, NQS, links, lynx, Perl, Quake, Samba, scigra-phica, sane, VNC
Inne oprogramowanie otwartych źródeł:apache, BladeEnc, Cygwin, f2c, gnuplot, HylaFAX, ispell, mesa, send-mail, python, X†http://www.gnu.org/directory/GNU/
Wprowadzenie 15
GNU/Linux (cd)
• Linus Torvalds udostępnia jądro systemu Linux 0.01 (maj 1991): In-tel 80386+sprzęt PC, brak współpracy z siecią, elementarny systempamięci wirtualnej, strony dzielone w trybie kopiowania przy zapisie,system plików Minix
• Linux 1.0 (marzec 1994): usieciowienie systemu (TCP/IP, PPP, SLIP),interfejs gniazd zgodny z systemem BSD, rozbudowany system pamię-ci wirtualnej, komunikacja międzyprocesowa IPC, emulacja obliczeńzmiennopozycyjnych, system plików ext2, sterownikai SCSI, wsparciedla dysków elastycznych, pamięci CD-ROM, kart dźwiękowych, my-szek, klawiatur
• Linux 1.2 (marzec 1995): obsługa PCI, obsługa wirtualnego proceso-ra 8086 (emulacja systemu DOS), częściowe wsparcie dla procesorówSparc, Alpha, Mips, obsługa IPX, rozszerzona implementacja IP (za-pora ogniowa),
Wprowadzenie 16
• Linux 2.0 (czerwiec 1996): wielu architektur (64-bitowy port na proce-sory Alpha, Motorola 68000, Sun Sparc, architektury wieloprocesoro-we), poprawione zarządzanie pamięcią, ujednolicona pamięć podręcznasystemu plików (rozszerzona na sieciowe systemy plików), zwiększo-na wydajność pamięci wirtualnej, ulepszony stos TCP/IP, Appletalk,AX.25, ISDN, zdalne montowanie woluminów Netware oraz SMB, do-danie wątków wewnątrz jądra, manipulowanie modułami, automatycz-ne ładowanie modułów na żądanie, zgodne ze standardem POSIX sze-regowanie procesów w czasie rzeczywistym
• Linux 2.2 (styczeń 1999)
• Linux 2.4 (styczeń 2001): pliki większe niż 2 GB, SMP do 32 proce-sorów, adresowanie do 64 GB RAM (IA32), wsparcie dla IA64, systemplików z kroniką
• Linux 2.6 (początek 2004), 2.6.15.1 (styczeń 2006), 2.6.19.3 (luty2007)
• Linux 2.6.20 (4/02/2007, Super Kernel Sunday)
Wprowadzenie 17
Cechy jądra 2.6 wg Josepha Pranevicha(http://www.kniggit.net/wwol26.html)
• wsparcie dla wbudowanych (embedded OS) systemów operacyjnych(włączenie projektu uClinux do głównego nurtu rozwoju jądra)
• wsparcie dla serwerów NUMA (Non-Uniform Memory Access)
• hiperwątkowość (hyperthreading)
• wsparcie dla PAE (Physical Address Extension), obsługa do 64GB RAMw trybie stronicowania
• lepszy rozkład obciążenia na różne procesory systemów SMP
• 4096 głównych numerów (major number) urządzeń i ponad milion pod-rzędnych numerów (minor number) (dla /dev/hda2 major mode wynosi3 a minor mode – 2)
• jądro wielowątkowe, nowy planista I/O
• wsparcie dla futex-ów (Fast User-Space Mutexes), które umożliwiająlepsze szeregowanie procesów (priorytetowanie)
Wprowadzenie 18
Cechy jądra 2.6 wg Josepha Pranevicha (cd)
• wewnętrzna wątkowa infrastruktura jądra została przystosowanado pracy z Native POSIX Thread Library (NPTL), co umożliwia lepszewykorzystanie nowoczesnych procesorów
• usprawniona obsługa modułów, wsparcie dla USB 2.0 i poprawienieobsługi łączności bezprzewodowej
• wsparcie dla urządzeń Serial ATA (transfery rzędu 150 MB/s).
• wsparcie dla windowsowego zarządcy logicznych dysków (Logical DiskManager), który umożliwia zmianę wielkości partycji
• wsparcie dla NTFS w trybie odczytu i zapisu
• zastąpienie OSS-u (Open Sound System) przez ALSA (Advanced LinuxSound Architecture)
• wsparcie dla IPsec
• wirtualizacja KVM (Kernel-based Virtual Machine)
Wprowadzenie 19
GNU/Linux (cd)
• GNU/Linux = system GNU oparty na Linuksie
• Numeracja wydań jądra systemu Linux:wersja.podwersja.korekta
• typowa dystrybucja Linuksa: źródła Linuksa 3%, źródła GNU (30%)
• znaczenie Internetu dla rozwoju wolnego oprogramowania
Wprowadzenie 20
GNU/Linux – ostatnia dekada
• Red Hat Linux (Marc Ewing, październik 1994)
• powstaje Red Hat Software (Marc Ewing, 1995)
• Eric Raymond ogłasza The Cathedral and the Bazaar (kongres zwolenni-
ków Linuksa w Niemczech, 1997)
• Netscape ogłasza zamiar udostępnienia źródeł Communicatora w In-ternecie (styczeń, 1998)
• pojawia się termin open source software (kwiecień 1998); firmy Oracle,Informix, Sysbase, IBM, Dell, HP i.in. ogłaszają wsparcie dla ruchuopen source (1998)
• Linus Torvalds udostępnia jądro 2.4 (styczeń 2001)
• Red Hat Linux Advanced Server – pierwszy linuksowy system opera-cyjny klasy enterprise wspierany przez Dell, IBM, HP, Oracle, (marzec
2002)
Wprowadzenie 21
Kto korzysta z systemu GNU/Linux?
• Amazon.com (przy pomocy Red Hat Software) wymienia serwery i prze-chodzi na technologie oparte o GNU/Linux redukcjąc koszty sprzętuz 71 do 54 mln USD
• DreamWorks wykorzystał przy produkcji filmu Shrek 1100 procesorów(80% Linux, 20% IRIX)
• Władca pierścieni był realizowany na 200 2-procesorowych kompute-rach PC korzystających z Red Hat Linuksa
• Toyota, le Monde, BP, . . .
Wprowadzenie 22
Przyszłość oprogramowania otwartych źródeł5
• wg raportu MITRE Corporation oprogramowanie otwartych źródeł mo-że być wykorzystywane przez administrację rządową (lipiec 2001)
• wg IDC stosowanie architektury Intel + Linux obniża TCO o 45-80%w stosunku do architektur RISC/Unix (styczeń 2002)
• wg IDC wydatki na komputery używające otwartego oprogramowaniaosiągną w 2008 9.1 mld dolarów. Serwery linuksowe mają stanowić25.7% wszystkich sprzedanych jednostek (15.6% w 2003)6
• wg IDC wydatki przedsiębiorstw na “linuksowy ekosystem” wzrosnądwukrotnie w ciągu następnych czterech lat osiągając 49 mld dolaróww 2011; wzrost znaczenia Linuksa wiąże się ze spadkiem zainteresowa-nia systemami uniksowymi7
5 http://www.redhat.com/mktg/rh10year/6http://news.cnet.com/IDC-Linux-server-sales-to-hit-9.1-billion-in-2008/2100-1010 3--
5479681.html7http://blogs.techrepublic.com.com/opensource/?p=194
Wprowadzenie 23
Przyszłość oprogramowania otwartych źródeł (cd)
• Is Sun Solaris on its deathbed?http://www.nytimes.com/idg/IDG 852573C400693880002574CE003-
71FE1.html?ref=technology
• Znaczenie oprogramowania otwartych źródeł dla UE omawia raportkomisji przedsiębiorczości i przemysłu UE z listopada 2006 Econo-mic impact of open source software on innovation and the compe-titivness of the Information and Communication Technologies (ICT)sector in the EU (http://ec.europa.eu/enterprise/ict/policy/doc/-2006-11-20-flossimpact.pdf).
Wprowadzenie 24
Cechy systemu GNU/Linux
• Unix w standardzie POSIX8
• wersje na procesory Intel, AMD, Sun Sparc, DEC Alpha, PowerPC
• jądro systemu dostosowane do wymagań użytkowników i możliwościsprzętowych (modułowość)
• GRUB, LILO (LInux LOder), (SYS|ISO|EXT|MEM|PXE)LINUX – pro-gramy do uruchamiania systemu (systemów)
• oprogramowanie w formie pakietów (rpm, deb)
• dokumentacja w postaci HOWTO (http://www.linuxdoc.org), listy dysku-syjne, także w języku polskim (http://www.jtz.org.pl), spolszczone stro-ny podręcznika systemowego (http://ptm.linux.pl/) i szeregu programów(KDE, gimp, itp.), książki, czasopisma
8POSIX (Portable Operating System Interface for UNIX) oznacza zespół standardów IEEEoraz ISO, które określają interfejs pomiędzy programami i systemem operacyjnym.
Wprowadzenie 25
Cechy systemu GNU/Linux (cd)
• usługi
– serwer www (apache), serwer buforujący www (squid)
– serwer poczty elektronicznej (postfix, sendmail, qmail)
– serwer faksów (e-fax, hylafax)
– serwer grup dyskusyjnych (inn)
– serwer nazw domenowych DNS (bind)
– serwer plików (ftp, nfs, samba)
– serwer drukarek (cups, samba)
– router, zapora ogniowa (netfilter, iptables)
– połączenie z LAN, WAN: ethernetowe, modemowe (ISDN, DSL),radiowe
Wprowadzenie 26
Cechy systemu GNU/Linux (cd)
• oprogramowanie (http://rpmfind.net/linux/RPM)
– przeglądarki sieciowe (netscape, opera, mozilla, galeon)
– pakiet biurowy (OpenOffice, KOffice), mała księgowość (LeftHand)
– edytory (joe, jed, emacs, vi,), skład tekstu (LATEX, Kile)
– czytniki plików postscriptowych i pdf (gv, xpdf, acroread)
– programy graficzne (GIMP, xfig, xpaint)
– relacyjne bazy danych (Ingres, PostgreSQL, MySQL)
– menadżery plików (Midnight Commander (mc), konqueror)
– menadżery okien (xfce, fluxbox, wmaker, twm)
Wprowadzenie 27
Cechy systemu GNU/Linux (cd)
– KDE (K Desktop Environment), biblioteka Qt
– GNOME (GNU Object Model Environment), biblioteka GTK(GIMP Toolkit)
– kompilatory (C, C++, Pascal, FORTRAN, LISP) i narzędzia pro-gramistyczne
– języki skryptowe (perl, (t)csh, sh, bash, phyton, php3)
– zabezpieczenie danych i komunikacji (ssh, gpg, SSL)
– emulatory innych systemów operacyjnych (DosEmu, Wine, VMware,VirtualBox), Cross-Over Office
Dystrybucje Linuksa 28
Dystrybucje Linuksa9
Na dystrybucję (zestaw oprogramowania) składają się:
• system operacyjny GNU/Linux
• programy ułatwiające instalację oraz konfigurację systemu
• cała gama programów użytkowych i narzędziowych
Najpopularniejsze dystrybucje: Debian, Fedora, GenToo, Linspire(Lindows ¬ 04/2004), Mandriva (Mandrake ¬2005), RedHat, Slackwa-re, SuSE, Ubuntu
Polskie dystrybucje:• PLD http://www.pld.org.pl/
• Aurox Linux http://www.aurox.org/ – projekt zawieszony
Ważne adresy: http://www.linux.pl/, http://www.linuxnews.pl/9http://old.lwn.net-Distributions/ http://www.linuxiso.org/
Dystrybucje Linuksa 29
Dystrybucje Linuksa na pojedynczym CD10
• Knoppix LiveCD (http://www.knopper.net/knoppix/)bootowalna dystrybucja Debian GNU/Linux z 2 GB programów (KDE,OpenOffice.org) (polska strona projektu Knoppix: http://knoppix.7th-
guard.net/)
• Knoppix for Kids LiveCD: multimedia, Internet, biuro, nauka pi-sania na klawiaturze, programy edukacyjne z matematyki, chemii, etc,gry (słówka)
• SUSE Linux Live (http://software.opensuse.org/)
• Linspire/Freespire The world’s easiest desktop Linux (http://www.-
linspire.com/, http://freespire.org/)
10http://dmoz.org/Computers/Software/Operating Systems/Linux/Distributions/Live CD/,http://www.frozentech.com/content/livecd.php
Dystrybucje Linuksa 30
Dystrybucje Linuksa na pojedynczym CD (cd)
Ubuntu Linux for human beings (http://www.ubuntu.com/)
• Edubuntu Live CD Linux for Young Human Beings (http://www.edu-
buntu.org/) – wersja serwer i desktop plus dodatkowe oprogramowanieedukacyjne na osobnym CD
• Kubuntu Live (http://www.kubuntu.org/) – KDE
• Xubuntu Live (http://www.kubuntu.org/) – Xfce
”Ubuntu” is an ancient African word, meaning ”humanity to others”.
Dystrybucje Linuksa 31
Dystrybucje Linuksa na pojedynczym CD (cd)
• Linux-EduCD (http://www.linux-educd.pl/): wygodne środowisko gra-ficzne, polski pakiet OpenOffice, polski interfejs do Mozilli, spolszczonyinstalator i programy dobieranymi wg potrzeb szkół (oprogramowanieedukacyjne, naukowe i multimedialne).
Dodatkowo dystrybucja zawiera oprogramowanie umożliwiające uru-chomienie serwera WWW, baz danych czy sieci bezdyskowych termi-nali. Studium Techniki opracowuje polskojęzyczny podręcznik z opiseminstalacji i konfiguracji systemu oraz zawartych na płycie programówedukacyjnych.
Do podręcznika Informatyka. Podręcznik dla ucznia Gimnazjum dołą-czona jest płyta CD ze specjalną wersją Linux-Edu o nazwie GimLin.
• System Rescue CD-ROM (http://www.sysresccd.org/): PXE, wspar-cie dla architektur x86-64, gparted, parted, partimage, ntfs3g, sfdisk,narzędzia do diagnostyki dysków, samba, NFS
Dystrybucje Linuksa 32
Szkolne sieci komputerowe
• SkoleLinux (http://http://wiki.debian.org/DebianEdu/) oraz Karoshi(http://www.karoshi.org.uk/) to specjalizowane dystrybucje, które umoż-liwiają tworzenie szkolnej sieci z serwerami, stacjami roboczymi i ter-minalami. Zalety: prosta instalacja, administracja poprzez wygodne in-terfejsy okienkowe/webowe.
Wykorzystanie CPU 33
Procesy
• Proces to program, który jest wykonywany.
• Procesem jest program użytkownika, zadanie systemowe (spooling,przydział pamięci itp.).
• Program jest bierny, jest zbiorem bitów przechowywanych na dysku.Program NIE jest procesem.
• Proces JEST aktywny, dla procesu licznik rozkazów wskazuje następnąinstrukcję do wykonania. Wykonanie procesu musi przebiegać w sposóbsekwencyjny.
System operacyjny odpowiada za wykonywanie następujących czynności:tworzenie i usuwanie procesów, wstrzymywanie i wznawianie procesów,dostarczanie mechanizmów komunikacji procesów, dostarczanie mechani-zmów obsługi blokad.
Wykorzystanie CPU 34
Proces stanowi jednostkę pracy w systemie.
System składa się ze zbioru procesów:
• procesy systemu operacyjnego (wykonują kod systemu)
• procesy użytkowników (wykonują kod programów użytkowników)
Pseudoparalelizm – w systemie (jednoprocesorowym) z podziałem czasuw każdej chwili wykonuje się tylko jeden proces, ale z uwagi na przełącza-nie (przełączanie kontekstu) powstaje wrażenia równoczesnej pracy wieluprocesów.
Przetwarzanie współbieżne – przetwarzanie równoległe
Wykorzystanie CPU 35
Blok kontrolny procesu:
• stan procesu
• numer procesu
• licznik rozkazów, stosu
• rejestry
• ograniczenia pamięci
• wykaz otwartych plików
• informacja o planowaniu przydziału procesora
• informacja o wykorzystanych zasobach (rozliczanie)
Wykorzystanie CPU 36
Z procesem związana jest określonawirtualna przestrzeń adresowa, segmentprogramu, danych, stosu.
# size /bin/pstext data bss dec hex filename
71928 769 131967 204664 31f78 /bin/ps
Wykorzystanie CPU 37
Stan procesu
• gotowy – proces czeka na przydział procesora
• bieżący (aktywny) – są wykonywane instrukcje
• oczekujący – proces czeka na wystąpienie jakiegoś zdarzenia (np. za-kończenia operacji wejścia-wyjścia)
Wykorzystanie CPU 38
Obserwacja procesów: ps, pstree -ch, top, htop, ksysguard
# ps auxfw | head -12USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 2 0.0 0.0 0 0 ? S< Oct02 0:00 [kthreadd]root 3 0.0 0.0 0 0 ? S< Oct02 0:00 \_ [migration/0]...root 494 0.0 0.0 0 0 ? S< Oct02 0:00 \_ [ksnapd]root 502 0.0 0.0 0 0 ? S< Oct02 0:16 \_ [kjournald]root 27749 0.0 0.0 0 0 ? S< 22:15 0:00 \_ [ipw2200/0]root 1 0.0 0.0 2136 640 ? Ss Oct02 0:04 init [3]root 567 0.0 0.0 2988 1352 ? S<s Oct02 0:01 /sbin/udevd -droot 2143 0.0 0.0 12204 660 ? S<sl Oct02 0:00 auditdroot 2145 0.0 0.0 10988 668 ? S<s Oct02 0:00 \_ /sbin/audispdroot 2177 0.0 0.0 1800 636 ? Ss Oct02 0:01 syslogd -m 0root 2180 0.0 0.0 1740 400 ? Ss Oct02 0:00 klogd -x...jkob 11469 0.3 1.9 162520 40624 pts/10 Sl Oct09 9:02 amarokappjkob 11481 0.0 0.1 4096 2384 pts/10 S Oct09 0:00 \_ ruby /usr/share/apps/amarok/scripts/score_default/score_default.rb...jkob 22279 0.9 5.0 185664 104192 ? Sl 15:57 4:13 \_ /usr/lib/opera/9.50/opera -style plastikjkob 22326 2.4 1.3 97144 27520 ? RNl 15:57 11:05 | \_ /usr/lib/opera/9.50/operapluginwrapper 119 124 /usr/lib/opera/plugins/libflashplayer.sojkob 22327 0.0 0.0 2740 448 ? S 15:57 0:00 | \_ /usr/lib/opera/9.50/operaplugincleaner 22279...jkob 28592 0.0 0.0 4896 1104 pts/14 S+ 23:29 0:00 | \_ /bin/sh /usr/lib/openoffice.org/program/sofficejkob 28604 8.8 2.4 185340 50048 pts/14 Sl+ 23:29 0:02 | \_ /usr/lib/openoffice.org/program/soffice.bin
Wykorzystanie CPU 39
Stany procesów wg komendy ps:
D Uninterruptible sleep (usually IO)R Running or runnable (on run queue)S Interruptible sleep (waiting for an event to complete)T Stopped, either by a job control signal or because it is being traced.W paging (not valid since the 2.6.xx kernel)X dead (should never be seen)Z Defunct ("zombie") process, terminated but not reaped by its parent.
< high-priority (not nice to other users)N low-priority (nice to other users)L has pages locked into memory (for real-time and custom IO)s is a session leaderl is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)+ is in the foreground process group
Diagnostyka wykorzystania CPU 40
Diagnostyka wykorzystania CPU: htop
NAMEhtop - interactive process viewer
DESCRIPTIONThis program is a free (GPL) ncurses-based process viewer.
It is similar to top, but allows to scroll the list verticallyand horizontally to see all processes and their full commandlines.
Tasks related to processes (killing, renicing) can be donewithout entering their PIDs.
Diagnostyka wykorzystania CPU 41
Diagnostyka wykorzystania CPU: top
NAMEtop - display Linux tasks
DESCRIPTIONThe top program provides a dynamic real-time view of a runningsystem. It can display system summary information as well as alist of tasks currently being managed by the Linux kernel. Thetypes of system summary information shown and the types, orderand size of information displayed for tasks are all userconfigurable and that configuration can be made persistentacross restarts.
Diagnostyka wykorzystania CPU 42
Tworzenie nowych procesów: fork/clone2
pid=fork()
Realizując funkcję systemową fork() jądro wykonuje następujące opera-cje:
• przydziela nowemu procesowi pozycję w tablicy procesów,
• przydziela procesowi potomnemu unikatowy identyfikator,
• tworzy logiczną kopię procesu macierzystego (ew. zapewniając współ-dzielenie segmentów instrukcji, itp.)
• zwiększa plikom związanym z tym procesem liczniki w tablicy plikóworaz i-węzłów.
• przekazuje identyfikator potomka procesowi macierzystemu i wartośćzero procesowi potomnemu.
Diagnostyka wykorzystania CPU 43
Tworzenie nowych procesów (cd): exec()
Funkcja exec()11 wywołuje inny program, umieszczając w obszarze pa-mięci procesu kopię pliku wykonywalnego. Zawartość kontekstu poziomuużytkownika, która istniała przed wywołaniem exec() staje się niedostęp-na, z wyjątkiem parametrów exec(), które jądro kopiuje ze starej do nowejprzestrzeni adresowej.
11Jądro iplementuje wywołanie systemowe execve(), ale dostępnych jest kilka interfejsów tegowywołania (patrz man 3 exec).
Diagnostyka wykorzystania CPU 44
Wątek to (lekki) proces działający w tej samej wirtualnej przestrzeni ad-resowej, co tworzący go (ciężki) proces.
Stan wątku jest zdefiniowany przez małą, odrębną ilość danych (własnystan rejestrów i stos).
Grupa równoprawnych wątków
• dzieli kod
• przestrzeń adresową
• otwarte pliki
• stos
• zasoby systemu
• należy do tego samego użytkownika
Wątki ze sobą współpracują, a nie współzawodniczą (tak jak procesy).
Diagnostyka wykorzystania CPU 45
Zalety stosowania wątków:
• przełączanie procesora między wątkami jest łatwiejsze (szybsze) niżmiędzy zwykłymi (ciężkimi) procesami
• lepsze wykorzystanie zasobów systemu komputerowego
• lepsza realizacja przetwarzania współbieżnego na maszynach o pamięciwspółdzielonej (SMP).
Wątek, to podstawowa jednostka wykorzystania procesora.
Rodzaje wątków:
• wątki jądra (kernel threads)
• procesy lekkie (lightweight processes)
• wątki użytkownika (user threads), p-wątki (p-threads), tj, wątki wgnormy POSIX
Diagnostyka wykorzystania CPU 46
Wątki jądra
Jądro nie jest procesem, ale zarządcą procesów.
Oprócz procesów użytkownika istnieje kilka uprzywilejowanych procesówzwanych wątkami jądra, które
• działają w trybie jądra (w przestrzeni adresowej jądra)
• nie komunikują się z użytkownikami (nie trzeba terminali)
• tworzone są w chwili startu systemu i działają do czasu wyłączeniasystemu
Diagnostyka wykorzystania CPU 47
# ps auxfw | head -35USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMANDroot 2 0.0 0.0 0 0 ? S< Oct02 0:00 [kthreadd]root 3 0.0 0.0 0 0 ? S< Oct02 0:00 \_ [migration/0]root 4 0.0 0.0 0 0 ? S< Oct02 0:00 \_ [ksoftirqd/0]root 5 0.0 0.0 0 0 ? S< Oct02 0:00 \_ [watchdog/0]root 6 0.0 0.0 0 0 ? S< Oct02 0:13 \_ [events/0]root 7 0.0 0.0 0 0 ? S< Oct02 0:00 \_ [khelper]root 58 0.0 0.0 0 0 ? S< Oct02 0:01 \_ [kblockd/0]root 61 0.0 0.0 0 0 ? S< Oct02 0:00 \_ [kacpid]root 62 0.0 0.0 0 0 ? S< Oct02 0:00 \_ [kacpi_notify]root 194 0.0 0.0 0 0 ? S< Oct02 0:00 \_ [cqueue/0]root 196 0.0 0.0 0 0 ? S< Oct02 0:00 \_ [ksuspend_usbd]root 202 0.0 0.0 0 0 ? S< Oct02 0:00 \_ [khubd]root 205 0.0 0.0 0 0 ? S< Oct02 0:00 \_ [kseriod]root 237 0.0 0.0 0 0 ? S Oct02 0:01 \_ [pdflush]root 238 0.0 0.0 0 0 ? S Oct02 0:11 \_ [pdflush]root 239 0.0 0.0 0 0 ? S< Oct02 0:03 \_ [kswapd0]root 291 0.0 0.0 0 0 ? S< Oct02 0:00 \_ [aio/0]root 381 0.0 0.0 0 0 ? S< Oct02 0:00 \_ [khvcd]...root 494 0.0 0.0 0 0 ? S< Oct02 0:00 \_ [ksnapd]root 502 0.0 0.0 0 0 ? S< Oct02 0:17 \_ [kjournald]root 530 0.0 0.0 0 0 ? S< Oct02 0:00 \_ [kauditd]root 1332 0.0 0.0 0 0 ? S< Oct02 0:00 \_ [kmpathd/0]root 1357 0.0 0.0 0 0 ? S< Oct02 0:00 \_ [kjournald]...root 10950 0.0 0.0 0 0 ? S< 18:15 0:00 \_ [ipw2200/0]root 1 0.0 0.0 2136 640 ? Ss Oct02 0:05 init [3]
Diagnostyka wykorzystania CPU 48
Procesy lekkie
Proces lekki jest wspieranym przez jądro wątkiem z przestrzeni użytkow-nika. System udostępniając procesy lekkie musi także udowstępniać wątkijądra. W każdym procesie może być kilka procesów lekkich, z których każdyjest wspierany przez osobny wątek jądra.
Procesy lekkie są niezależnie szeregowane, współdzielą przestrzeń adre-sową, mogą wywoływać funkcje systemowe, które powodują wstrzymaniew oczekiwaniu na wejście-wyjście lub zasób. Mogą się wykonywać na róż-nych procesorach.
Operowanie na procesach lekkich jest kosztowne, gdyż wymaga użycia wy-wołań systemowych (przełączeń trybu). Trzeba zapewnić synchronizacjęw dostępie do współdzielonych danych.
Diagnostyka wykorzystania CPU 49
Wątki użytkownika
Biblioteka pthreads (zgodna ze standardem POSIX) udostępnia abstrak-cję wątków całkowicie na poziomie użytkownika. Udostępnia ona funkcjetworzenia, usuwania, synchronizowania, szeregowania oraz zarządzania bezudziału jądra.
Kontekst wątku z poziomu użytkownika można zapamiętać i odtworzyćbez udziału jądra. Każdy wątek użytkownika ma własny stos, przestrzeńdo zapisania kontekstu rejestrów, inne informacje. Jądro jest nadal od-powiedzialne za przełączanie procesów (jądro nie wie o istnieniu wątkówużytkownika); jądro wywłaszczając proces użytkownika wywłaszcza zwią-zane z nim wątki.
Wątki użytkownika są wydajne, nie zużywają zasobów jądra (jeśli nie sązwiązane z procesem lekkim).
Problemy: biblioteka szereguje wątki, jądro procesy; synchronizacja i ochro-na; wątki zwiększają poziom współbieżności, ale nie równoległości.
Diagnostyka wykorzystania CPU 50
Koszty obsługi procesów/wątków
Czas (w µsek) wykonywania operacji przez wątki użytkow-nika, procesy lekkie i procesy na SPARCstation 2.
czas tworzenia czas synchronizacjina semaforze
Wątek użytkownika 52 66Proces lekki 350 390Proces 1700 200
Diagnostyka wykorzystania CPU 51
Jądro systemu GNU/Linux: proces, zadania i wątki
Diagnostyka wykorzystania CPU 52
Jądro systemu GNU/Linux: zadania (tasks)
Zadanie w systemie Linux może być traktowane jako równoważne typowe-mu jednowątkowemu procesowi w systemie UNIX. To zadanie jest opisy-wane strukturą danych, która zawiera następujące podstawowe atrybuty:
• informacje o zadaniu (task info): jednoznaczny identyfikator zadania(ID), informacje o związkach rodzic/dziecko pomiędzy zadaniami, iden-tyfikator grupy zadań (TID), który pozwala identyfikować zadania zwią-zane z jednym procesem
• przestrzeń adresową (address space): definiuje przestrzeń wirtualną za-dania
• informację o przydziale procesora (scheduling info): status zadania,politykę przydziału procesora, paramatery tej polityki (priorytet dyna-miczny), flaga need resched
• informacja o programie wykonywalnym (executable info): identyfikujeplik, który jest obrazem wykonywanego zadania
Diagnostyka wykorzystania CPU 53
• informacja o sygnałach (signal info): zawiera dane związane z sygna-łami i ich obsługą (signal handler table, pending signal mask, signalqueue)
• dane uwierzytelniające (credentials): dane określające prawa i przywi-leje zadania (UID, GID, maska określająca prawa dostępu do urządzeń)
• informacje księgowe (accounting info): czas utworzenia zadania, czaszużyty w trybie jądra i użytkownika, liczba błędów stron, itp.
• ograniczenia zasobów (resource limits): parametry określające maksy-malną wielkość pliku core, czas wykonywania się zadania, wykorzysty-waną pamięć, liczbę otwartych plików, itp.
• informacja o systemie plików (filesystem info): domyślna maska okre-ślająca prawa dostępu przy tworzeniu plików (umask), bieżący katalog
• tablica otwartych plików (open file table): tablica plików otwrtych przezzadanie
Diagnostyka wykorzystania CPU 54
Jądro systemu GNU/Linux: zadania (tasks)
W strukturze danych opisujących zadania można wyróżnić dwie części:
• zależną od platformy sprzętowej (thread structure)
• niezależną od platformy sprzętowej, która tworzy środowisko, w którymwykonuje się wątek
Diagnostyka wykorzystania CPU 55
Jądro systemu GNU/Linux: tworzenie zadania
Proces użytkownika tworząc nowy proces lub wątek wywołuje funkcję fork()lub pthread create(), które wykorzystują funkcję clone2() w celu wykonaniapotrzebnych czynności:12
int clone2(flags, ustack-base, ustack-size)
CLONE VM If set, the address space is shared between the parent and the childCLONE FS If set, the filesystem info is shared between the parent and the childCLONE FILES If set, the open file table is shared between the parent and the childCLONE SIGHAND If set, the set of pending signals and the signal handle table are shared
between the parent and the childCLONE THREAD If set, the child is part of the same task group as the parentCLONE SIGNAL Combines the effect of CLONE SIGHAND and CLONE THREADCLONE PTRACE If set, the child is also being traced if the parent is being tracedCLONE VFORK If set, the parent does not get scheduled for execution until the child
invoke the execve() system callCLONE PARENT If set, the new task becomes a sibling of the caller (the caller and
the new task share the same parent)CLONE PID If set, the child has the same task PID as the parent.
12Funkcja clone2() jest wzorowana na odpowiednim wywołaniu systemowym stosowanym w sys-temie operacyjnym Plan 9.
Diagnostyka wykorzystania CPU 56
Jądro systemu GNU/Linux: tworzenie zadania (cd)
Tworzenie nowego zadania obejmuje:
• przydzielenie pamięci nowemu zadaniu
• rozpoczęcie procesu inicjowanie zadania
• tworzenie wątku
• zakończenie procesu inicjowania zadania
• wprowadzenie nowego zadania do kolejki zadań bieżących (run queue)
Diagnostyka wykorzystania CPU 57
Jądro systemu GNU/Linux: stany zadania13
13http://www.ibm.com/developerworks/linux/library/l-task-killable/index.html
Diagnostyka wykorzystania CPU 58
Jądro systemu GNU/Linux: stany zadania
• TASK RUNNING – proces albo się wykonuje, albo czeka na wykonanie.
• TASK INTERRUPTABLE – proces jest wstrzymany, aż do zajścia jakiegoś warunku.Proces może zostać zbudzony przez np. przerwania sprzętowe, zwolnienie jakiegośzasobu systemowego, na który proces czeka, albo dostarczenie sygnału.
• TASK UNINTERRUPTABLE – stan typu TASK INTERRUPTABLE, z wyjątkiemtego, że dostarczenie sygnału do uśpionego procesu nie zmienia jego stanu. W takimstanie musi być proces, który musi czekać na zajście określonego zdarzenia.
• TASK STOPPED – wykonanie procesu zostało zatrzymane (wskutek odebrania sy-gnału SIGSTOP, SIGTSTP, SIGTTIN, SIGTTOU
• EXIT ZOMBIE – wykonanie procesu zostało przerwane, ale proces rodzica nie użyłjeszcze wywołania systemowego wait4() lub waitpid(), które zwraca informację o prze-rwanym procesie.
• EXIT DEAD – końcowy stan procesu
Diagnostyka wykorzystania CPU 59
Jądro systemu GNU/Linux: nowy stan zadania14
Do jądra w wersji 2.6.25 wprowadzono nowy stan dla zadań wymagającychuśpienia, tzw. TASK KILLABLE (patrz include/linux/sched.h).
2.6.18 2.6.26================================== =================================#define TASK_RUNNING 0 #define TASK_RUNNING 0#define TASK_INTERRUPTIBLE 1 #define TASK_INTERRUPTIBLE 1#define TASK_UNINTERRUPTIBLE 2 #define TASK_UNINTERRUPTIBLE 2#define TASK_STOPPED 4 #define __TASK_STOPPED 4#define TASK_TRACED 8 #define __TASK_TRACED 8/* in tsk->exit_state */ /* in tsk->exit_state */#define EXIT_ZOMBIE 16 #define EXIT_ZOMBIE 16#define EXIT_DEAD 32 #define EXIT_DEAD 32/* in tsk->state again */ /* in tsk->state again */#define TASK_NONINTERACTIVE 64 #define TASK_DEAD 64
#define TASK_WAKEKILL 128
#define TASK_KILLABLE (TASK_WAKEKILL | TASK_UNINTERRUPTIBLE)#define TASK_STOPPED (TASK_WAKEKILL | __TASK_STOPPED)#define TASK_TRACED (TASK_WAKEKILL | __TASK_TRACED)
14http://www.ibm.com/developerworks/linux/library/l-task-killable/index.html
Diagnostyka wykorzystania CPU 60
Wątki w Linuksie
Pierwotnie jądro Linuksa nie wspierało wątków jądra.
Dzięki wywołaniu systemowemu clone() można było tworzyć kopię pro-cesu wołającego, która dzieliła przestrzeń adresową z procesem wołającym(symulacja wątków w przestrzeni użytkownika)
Problemy: dostarczanie sygnałów, planowaniem przydziału procesora, syn-chronizacją międzyprocesowa, brak zgodności z wymogami normy POSIX.
Rozwiązanie: dodania do jądra wsparcia dla wątków i przerobienia bibliotekiwątków. Próby przebiegały w ramach dwóch konkurencyjnych projektów:
• NGPT (Next-Generation POSIX Threads), programiści firmy IBM(projekt przerwany w połowie 2003)
• NPTL (Native POSIX Thread Library), programiści firmy Red Hat
Wersję NPTL można określić przy pomocy komendy:getconf GNU_LIBPTHREAD_VERSION
Diagnostyka wykorzystania CPU 61
The Native POSIX Thread Library for Linux http://people.redhat.com/drepper/nptl-design.pdf
Diagnostyka wykorzystania CPU 62
http://en.wikipedia.org/wiki/Native POSIX Thread Library
NPTL is a so-called 1×1 threads library, in that threads created by theuser (via the pthread create() library function) are in 1-1 correspondencewith schedulable entities in the kernel (processes, in the Linux case). Thisis the simplest possible threading implementation.
An alternative to NPTL’s 1×1 model is the m×n model where there aretypically more userland threads than schedulable entities. In this implemen-tation, the threading library is responsible for scheduling user threads onthe available schedulable entities; this makes context switching of threadsvery fast, as it avoids system calls. However, this increases complexity andthe likelihood of priority inversion, as well as suboptimal scheduling witho-ut extensive (and expensive) coordination between the userland schedulerand the kernel scheduler.
The POSIX Thread Trace Toolkit (http://nptltracetool.sourceforge.net/) is a library-level trace
tool for the glibc (GNU C library) thread library (Native POSIX Thread Library or NPTL).
Diagnostyka wykorzystania CPU 63
Jądra wielobieżne
• Jądra uniksowe są wielobieżne (wielowejściowe, reentrant): kilka pro-cesów może się wykonywać w trybie jądra w tym samym czasie.
• W systemie jednoprocesorowym tylko jeden proces może działać, in-ne mogą czekać na CPU lub na zakończenie operacji wej-wyj (będączablokowanymi w trybie jądra).
• Wystąpienie przerwania sprzętowego pozwala jądru wielobieżnemuna zatrzymanie aktualnego procesu, nawet jeśli znajduje się on w trybiejądra. Wpływa to na zwiększenie szybkości obsługi urządzeń zewnętrz-nych.
• Linux (z jądrem w wersji ¬ 2.4) jest systemem operacyjnym z wy-właszczaniem procesów, ale bez wywłaszczania jądra. Jądro 2.6 jestjuż wielowejściowe.
Diagnostyka wykorzystania CPU 64
Zadania i wątki: przykłady
# ps -eLo user,pid,tid,lwp,nlwp,flag,cmd
USER PID TID LWP NLWP F CMDjkob 7827 7827 7827 1 0 /bin/sh /usr/lib/openoffice.org/program/sofficejkob 7837 7837 7837 6 0 /usr/lib/openoffice.org/program/soffice.binjkob 7837 7838 7838 6 1 /usr/lib/openoffice.org/program/soffice.bin...jkob 7837 7845 7845 6 1 /usr/lib/openoffice.org/program/soffice.bin
jkob 12882 12882 12882 7 0 amarokappjkob 12882 12889 12889 7 1 amarokapp...jkob 12882 14039 14039 7 1 amarokapp
jkob 15236 15236 15236 3 0 /usr/lib/opera/9.50/opera -style plastikjkob 15236 15247 15247 3 1 /usr/lib/opera/9.50/opera -style plastikjkob 15236 15250 15250 3 1 /usr/lib/opera/9.50/opera -style plastikjkob 15299 15299 15299 1 0 /usr/lib/opera/9.50/operaplugincleaner 15236
Diagnostyka wykorzystania CPU 65
Zadania i wątki: przykłady (cd)
# ps -eLo user,pid,tid,lwp,nlwp,flag,cmd
USER PID TID LWP NLWP F CMD6992 29043 29043 29043 12 1 /opt/BitDefender/bin/bdmaild -s6992 29043 29046 29046 12 1 /opt/BitDefender/bin/bdmaild -s...6992 29043 29159 29159 12 1 /opt/BitDefender/bin/bdmaild -s
6992 28951 28951 28951 5 1 /opt/BitDefender/bin/bdscand -s6992 28951 29031 29031 5 1 /opt/BitDefender/bin/bdscand -s...6992 28951 29040 29040 5 1 /opt/BitDefender/bin/bdscand -s
root 25095 25095 25095 4 5 /opt/BitDefender/bin/bdsmtpd --startroot 25095 25096 25096 4 1 /opt/BitDefender/bin/bdsmtpd --startroot 25095 25097 25097 4 1 /opt/BitDefender/bin/bdsmtpd --startroot 25095 25101 25101 4 1 /opt/BitDefender/bin/bdsmtpd --start
Diagnostyka wykorzystania CPU 66
Zadania i wątki: przykłady (cd)
# ps -eLo user,pid,tid,lwp,nlwp,flag,cmd
USER PID TID LWP NLWP F CMDroot 1325 1325 1325 1 1 [kjournald]...root 1329 1329 1329 1 1 [kjournald]
root 2514 2514 2514 1 1 [nfsd4]root 2515 2515 2515 1 5 [nfsd]...root 2538 2538 2538 1 5 [nfsd]
apache 7544 7544 7544 1 5 /usr/sbin/httpdapache 7560 7560 7560 1 5 /usr/sbin/httpd...apache 11652 11652 11652 1 5 /usr/sbin/httpd
Flagi procesu (patrz opis komendy ps i komentarze w inclu-de/linux/sched.h):
• 1 – forked but didn’t exec
Diagnostyka wykorzystania CPU 67
• 4 – used super-user privileges
Diagnostyka wykorzystania CPU 68
Serwer apache (httpd): Multi-Processing Module
/etc/httpd/conf/httpd.conf: prefork MPM15
# prefork MPM# StartServers: number of server processes to start# MinSpareServers: minimum number of server processes which are kept spare# MaxSpareServers: maximum number of server processes which are kept spare# ServerLimit: maximum value for MaxClients for the lifetime of the server# MaxClients: maximum number of server processes allowed to start# MaxRequestsPerChild: maximum number of requests a server process serves<IfModule prefork.c>StartServers 8MinSpareServers 5MaxSpareServers 20ServerLimit 256MaxClients 256MaxRequestsPerChild 4000</IfModule>
15http://httpd.apache.org/docs/2.0/mod/prefork.html
Diagnostyka wykorzystania CPU 69
Serwer apache (httpd): Multi-Processing Module
/etc/httpd/conf/httpd.conf: worker MPM16
# worker MPM# StartServers: initial number of server processes to start# MaxClients: maximum number of simultaneous client connections# MinSpareThreads: minimum number of worker threads which are kept spare# MaxSpareThreads: maximum number of worker threads which are kept spare# ThreadsPerChild: constant number of worker threads in each server process# MaxRequestsPerChild: maximum number of requests a server process serves<IfModule worker.c>StartServers 2MaxClients 150MinSpareThreads 25MaxSpareThreads 75ThreadsPerChild 25MaxRequestsPerChild 0</IfModule>
16http://httpd.apache.org/docs/2.0/mod/worker.html
Diagnostyka wykorzystania CPU 70
Diagnostyka wykorzystania CPU: sysstat
Pakiet sysstat: iostat, mpstat, sar (sadc, sa1, sa2, sadf)
Pakiet procps: vmstat, ps
Diagnostyka wykorzystania CPU 71
Diagnostyka wykorzystania CPU: iostat
NAMEiostat - Report Central Processing Unit (CPU) statistics andinput/output statistics for devices and partitions.
SYNOPSISiostat [ -c | -d ] [ -k | -m ] [ -t ] [ -V ] [ -x ][ device [ ... ] | ALL ] [ -p [ device | ALL ] ][ interval [ count ] ]
DESCRIPTIONThe iostat command is used for monitoring system input/outputdevice loading by observing the time the devices are active inrelation to their average transfer rates. The intervalparameter specifies the amount of time in seconds between eachreport. The first report contains statistics for the timesince system startup (boot). Each subsequent report containsstatistics collected during the interval since the previousreport.
Diagnostyka wykorzystania CPU 72
Diagnostyka wykorzystania CPU: iostat
Przykład: # iostat -c
sysstat version 6.0.x:
avg-cpu: %user %nice %system %iowait %idle4,90 0,00 0,83 2,37 91,90
sysstat version 7.0.x:
# iostat -cLinux 2.6.18-92.1.13.el5xen (host-5-151.fizyka.umk.pl) 10/18/2008
avg-cpu: %user %nice %system %iowait %steal %idle0.04 0.01 0.11 0.29 0.13 99.42
Diagnostyka wykorzystania CPU 73
Diagnostyka wykorzystania CPU: mpstat
NAMEmpstat - Report processors related statistics.
SYNOPSISmpstat [ -P { cpu | ALL } ] [ interval [ count ] ]
DESCRIPTIONThe mpstat command writes to standard output activities foreach available processor, processor 0 being the first one.Global average activities among all processors are alsoreported.
Diagnostyka wykorzystania CPU 74
Diagnostyka wykorzystania CPU: mpstatsysstat version 6.0.x:mpstat -P ALL19:35:42 CPU %user %nice %sys %iowait %irq %soft %idle intr/s19:35:42 all 4,83 0,00 0,62 2,45 0,12 0,08 91,89 1185,2519:35:42 0 4,83 0,00 0,62 2,45 0,12 0,08 91,89 1185,25
sysstat version 7.0.x:
mpstat -P ALLLinux 2.6.18-92.1.13.el5xen (host-5-151.fizyka.umk.pl) 10/18/2008
09:16:58 PM CPU %user %nice %sys %iowait %irq %soft %steal %idle intr/s09:16:58 PM all 0.04 0.01 0.11 0.29 0.00 0.00 0.13 99.42 425.1109:16:58 PM 0 0.14 0.03 0.32 0.91 0.00 0.01 0.22 98.37 314.6209:16:58 PM 1 0.01 0.00 0.04 0.09 0.00 0.00 0.11 99.75 48.1409:16:58 PM 2 0.01 0.00 0.03 0.08 0.00 0.00 0.11 99.77 31.6009:16:58 PM 3 0.01 0.00 0.04 0.09 0.00 0.00 0.08 99.78 29.62
Diagnostyka wykorzystania CPU 75
Diagnostyka wykorzystania CPU: sar
NAMEsar - Collect, report, or save system activity information.
SYNOPSISsar [ -c ] [ -q ] [ -u ] [ -w ] [ -x { pid | SELF | ALL } ]
[ -X { pid | SELF | ALL } ] [ -I { irq | SUM | ALL | XALL } ][ -P { cpu | ALL } ] -f [ filename ] ] [ interval [ count ] ]
DESCRIPTIONThe sar command writes to standard output the contents ofselected cumulative activity counters in the operatingsystem. The accounting system, based on the values in the countand interval parameters, writes information the specifiednumber of times spaced at the specified intervals in seconds.
Diagnostyka wykorzystania CPU 76
Diagnostyka wykorzystania CPU: sar
Przykłady:
wykorzystanie CPU: # sar -u [interval [count]]wykorzystanie CPU/PID: # sar -x [PID | ALL] [interval [count]]tworzenie procesów: # sar -c [interval [count]]zmiana kontekstu: # sar -w [interval [count]]długość kolejek i obciążenie: # sar -q [interval [count]]przerwania: # sar -I [X]ALL [interval [count]]statystyki z dnia dd: # sar [-q] [-c] -f /var/log/sa/sadd
Komenda /etc/init.d/sysstat start zaznacza początek zbieraniastatystyk (/usr/lib/sa/sadc).
# cat /etc/cron.d/sysstat# run system activity accounting tool every 10 minutes*/10 * * * * root /usr/lib/sa/sa1 1 1# generate a daily summary of process accounting at 23:5353 23 * * * root /usr/lib/sa/sa2 -A
sa1 jest skryptem, który wywołuje sadc. sa2 korzysta z sar.
Diagnostyka wykorzystania CPU 77
Diagnostyka wykorzystania CPU: vmstat
NAMEvmstat - Report virtual memory statistics
SYNOPSISvmstat [-a] [-n] [delay [ count]]vmstat [-f] [-s] [-m]vmstat [-S unit]vmstat [-d]vmstat [-p disk partition]
DESCRIPTIONvmstat reports information about processes, memory, paging,block IO, traps, and cpu activity.
Diagnostyka wykorzystania CPU 78
Diagnostyka wykorzystania CPU: vmstat
Przykład: vmstat -s (watch -n 1 -d vmstat -s)
87993 non-nice user cpu ticks2 nice user cpu ticks
10998 system cpu ticks1716911 idle cpu ticks
0 steal cpu ticks28854 IO-wait cpu ticks2012 IRQ cpu ticks1080 softirq cpu ticks
21719986 interrupts18412379 CPU context switches1173545862 boot time
7472 forks
Przykład: vmstat -a 1procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------r b swpd free inact active si so bi bo in cs us sy id wa st3 0 0 205880 77200 145036 0 0 168 45 1170 469 5 1 84 10 00 0 0 205880 77200 145036 0 0 0 0 1228 488 3 0 97 0 0
Diagnostyka wykorzystania CPU 79
Diagnostyka wykorzystania CPU: psNAME
ps - report a snapshot of the current processes.
DESCRIPTIONps displays information about a selection of the activeprocesses. If you want a repetitive update of the selection andthe displayed information, use top(1) instead.
This version of ps accepts several kinds of options:1 UNIX options, which may be grouped and must be preceded by adash.2 BSD options, which may be grouped and must not be used with adash.3 GNU long options, which are preceded by two dashes.
By default, ps selects all processes with the same effectiveuser ID (euid=EUID) as the current user and associated with thesame terminal as the invoker.
Diagnostyka wykorzystania CPU 80
PROCESS FLAGSThe sum of these values is displayed in the "F" column.1 forked but didn’t exec4 used super-user privileges
PROCESS STATE CODESHere are the different values that the s, stat and state output specifiers(header "STAT" or "S") will display to describe the state of a process.D Uninterruptible sleep (usually IO)R Running or runnable (on run queue)S Interruptible sleep (waiting for an event to complete)T Stopped, either by a job control signal or because it is being traced.W paging (not valid since the 2.6.xx kernel)X dead (should never be seen)Z Defunct ("zombie") process, terminated but not reaped by its parent.
For BSD formats and when the stat keyword is used, additionalcharacters may be displayed:< high-priority (not nice to other users)N low-priority (nice to other users)L has pages locked into memory (for real-time and custom IO)s is a session leaderl is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)+ is in the foreground process group
Diagnostyka wykorzystania CPU 81
Pliki wykonywalne i uprawnienia procesu
-rwsr-xr-x 1 root root 47620 VII 4 2007 /usr/bin/at-rwsr-xr-x 1 root root 23788 II 28 2008 /bin/fusermount-rwsr-xr-x 1 root root 57908 X 8 2007 /bin/mount-rwsr-xr-x 1 root root 25604 IV 5 2007 /usr/bin/passwd-rwsr-xr-x 1 root root 41748 IV 6 2007 /bin/ping-rwsr-xr-x 1 root root 27116 III 25 2008 /bin/su-rwsr-xr-x 1 root root 38968 X 8 2007 /bin/umount
# ps -eo ruid,rgid,euid,egid,fuid,fgid,comm# ps -eo ruser,rgroup,euser,egroup,fuser,fgroup,comm
root jkob jkob jkob jkob jkob atjkob jkob root jkob root jkob passwdjkob jkob jkob jkob jkob jkob pingjkob jkob root jkob root jkob su
Diagnostyka wykorzystania CPU 82
Uwierzytelnienia wg uprawnień
Capability Name Meaning
CAP_CHOWN Allow for the changing of file ownershipCAP_DAC_OVERRIDE Override all DAC access restrictionsCAP_DAC_READ_SEARCH Override all DAC restrictions regarding read and searchCAP_KILL Allow the sending of signals to processes belonging to othersCAP_SETGID Allow changing of the GIDCAP_SETUID Allow changing of the UIDCAP_SETPCAP Allow the transfering and removal of current set to any PIDCAP_LINUX_IMMUTABLE Allow the modification of immutable and append-only filesCAP_NET_BIND_SERVICE Allow binding to ports below 1024CAP_NET_RAW Allow use of raw sockets......
Pełna lista uprawnień znajduje się w include/linux/capability.h
Diagnostyka wykorzystania CPU 83
Diagnostyka wykorzystania CPU: procinfo
NAMEprocinfo - display system status gathered from /proc
SYNOPSISprocinfo [ -fsmadiDSbrChv ] [ -nN ] [ -Ffile ]
DESCRIPTIONprocinfo gathers some system data from the /proc directory andprints it nicely formatted on the standard output device.
Diagnostyka wykorzystania CPU 84
Diagnostyka wykorzystania CPU: /proc/17
• /proc/cpuinfo
• /proc/loadavg
• /proc/pid
17http://www.fizyka.umk.pl/˜jkob/diagopt/cpuinfo
Diagnostyka wykorzystania CPU 85
Diagnostyka wykorzystania CPU: collectl18
NAMEcollectl - Collects data that describes the current system status.
SYNOPSISRecord Mode - read data from live system and write to file ordisplay on terminal
collectl [-f file] [options]
Playback Mode - read data from one or more raw data files anddisplay on terminal
collectl -p file1 [file2 ...] [options]
Uwaga! Opcja -f nie działa.
18http://collectl.sourceforge.net/, http://www.fizyka.umk.pl/˜jkob/diagopt/collectl
Diagnostyka wykorzystania CPU 86
Diagnostyka wykorzystania CPU: collectl (cd)
# collectl -sC
# SINGLE CPU STATISTICS# CPU USER NICE SYS WAIT IRQ SOFT STEAL IDLE
0 5 0 2 0 0 0 0 930 3 0 1 0 0 0 0 950 3 0 3 0 0 0 0 940 5 0 2 0 0 0 0 930 3 0 1 0 0 0 0 950 2 0 1 0 0 0 0 950 4 0 2 0 0 0 0 930 3 0 2 0 0 0 0 950 2 0 2 0 0 0 0 930 3 0 2 0 0 0 0 950 3 0 1 0 0 0 0 950 4 0 1 0 0 0 0 950 3 0 2 0 0 0 0 950 4 0 1 0 0 0 0 950 3 0 3 0 0 0 0 94...
Diagnostyka wykorzystania CPU 87
Diagnostyka wykorzystania CPU: collectl (cd)# collectl -sZ -i1:1waiting for 1 second sample...
### RECORD 1 >>> scobie <<< (1225706517.001) (Mon Nov 3 11:01:57 2008) ###
# PROCESS SUMMARY (faults are /sec)# PID User PR PPID S VSZ RSS CP SysT UsrT Pct AccuTime RKB WKB MajF MinF Command1 root 20 0 S 1M 740K 0 0.00 0.00 0 0:01.01 0 0 0 0 /sbin/init2 root 15 0 S 0 0 0 0.00 0.00 0 0:00.00 0 0 0 0 kthreadd3 root RT 2 S 0 0 0 0.00 0.00 0 0:00.00 0 0 0 0 migration/04 root 15 2 S 0 0 0 0.00 0.00 0 0:00.42 0 0 0 0 ksoftirqd/05 root RT 2 S 0 0 0 0.00 0.00 0 0:00.00 0 0 0 0 watchdog/0...
9265 jkob 20 9147 S 2M 448K 0 0.00 0.00 0 0:00.02 0 0 0 0 /usr/lib/opera/9.62/operaplugincleaner10022 jkob 20 2624 S 5M 1M 0 0.00 0.00 0 0:00.07 0 0 0 0 su10026 root 20 10022 S 5M 2M 0 0.00 0.00 0 0:00.84 0 0 0 0 -tcsh10324 jkob 20 1 S 37M 13M 0 0.00 0.00 0 0:00.57 0 0 0 0 knotify10327 jkob 20 1 S 23M 4M 0 0.00 0.00 0 0:04.05 0 0 0 0 /usr/bin/artsd12478 jkob 20 2586 S 6M 2M 0 0.00 0.00 0 0:00.90 0 0 0 0 -bin/tcsh14677 root 15 2 S 0 0 0 0.00 0.00 0 0:00.02 0 0 0 0 ipw2200/014927 root 20 1 S 8M 2M 0 0.00 0.00 0 0:00.03 0 0 0 0 /usr/libexec/postfix/master14930 postfix 20 14927 S 9M 2M 0 0.00 0.00 0 0:00.00 0 0 0 0 qmgr
Diagnostyka wykorzystania CPU 88
Diagnostyka wykorzystania CPU: collectl (cd)# collectl --showtopopts
The following is a list of --top’s sort types which themselves applyto different categories of data. In some cases you may be allowed tosort by a field that is not part of the display if you so desire
Memoryvsz virtual memory Timerss resident (physical) memory syst system time
usrt user timetime total time
I/O Page Faultsrkb KB read majf major page faultswkb KB written minf minor page faultsiokb total I/O KB flt total page faultsrkbc KB read from pagecachewkbc KB written to pagecacheiokbc total pagecache I/Orsys read system callswsys write system callsiosys total system callsiocncl Cancelled write bytes
Diagnostyka wykorzystania CPU 89
Diagnostyka wykorzystania CPU: collectl (cd)
collectl --top time,10
# PROCESS SUMMARY (faults are /sec) 11:26:19# PID User PR PPID S VSZ RSS CP SysT UsrT Pct AccuTime RKB WKB MajF MinF Command19183 root 20 10026 R 17M 13M 0 0.02 0.19 21 0:01.14 0 0 0 86 /usr/bin/perl2250 root 20 2249 S 167M 138M 0 0.00 0.04 4 7:31.55 0 0 0 0 /usr/bin/Xorg9147 jkob 20 2519 S 203M 112M 0 0.00 0.03 3 5:08.36 0 0 0 440 /usr/lib/opera/9.62/opera2541 jkob 20 2539 S 60M 17M 0 0.00 0.01 1 0:33.62 0 0 0 78 kwin9264 jkob 39 9147 S 99M 24M 0 0.00 0.01 1 2:45.33 0 0 0 0 /usr/lib/opera/9.62/operapluginwrapper1 root 20 0 S 1M 740K 0 0.00 0.00 0 0:01.01 0 0 0 0 /sbin/init2 root 15 0 S 0 0 0 0.00 0.00 0 0:00.00 0 0 0 0 kthreadd3 root RT 2 S 0 0 0 0.00 0.00 0 0:00.00 0 0 0 0 migration/04 root 15 2 S 0 0 0 0.00 0.00 0 0:00.43 0 0 0 0 ksoftirqd/05 root RT 2 S 0 0 0 0.00 0.00 0 0:00.00 0 0 0 0 watchdog/0 ^COuch!
Diagnostyka wykorzystania CPU 90
Diagnostyka wykorzystania CPU: pidstat
NAMEpidstat - Report statistics for Linux tasks.
SYNOPSIS
pidstat [ -C comm ] [ -d ] [ -I ] [ -p { pid | SELF | ALL } ] [ -r ]\[ -t ] [ -T { TASK | CHILD | ALL } ] [ -u ] [ -V ] [ -w ] [ interval [ count ] ]
DESCRIPTIONThe pidstat command is used for monitoring individual taskscurrently being managed by the Linux kernel. It writes tostandard output activities for every task selected with option-p or for every task managed by the Linux kernel if option -pALL has been used. Not selecting any tasks is equiva- lent tospecifying -p ALL but only active tasks (tasks with non-zerostatistics values) will appear in the report.
The pidstat command can also be used for monitoring the childprocesses of selected tasks. Read about option -T below.
Diagnostyka wykorzystania CPU 91
Diagnostyka wykorzystania CPU: /usr/bin/time19
NAMEtime - time a simple command or give resource usage
SYNOPSIStime [options] command [arguments...]
The output is formatted using a format string that can be specified usingthe -f option or the TIME environment variable.%E Elapsed real time (in [hours:]minutes:seconds).%S Total number of CPU-seconds that the process spent in kernel mode.%U Total number of CPU-seconds that the process spent in user mode.%P Percentage of the CPU that this job got, computed as (%U + %S) / %E.%F Number of major page faults that occurred while the process
was running. These are faults where the page has to beread in from disk.
%R Number of minor, or recoverable, page faults.%c Number of times the process was context-switched
involuntarily (because the time slice expired).%w Number of waits: times that the program was context-switched
voluntarily, for instance while waiting for an I/Ooperation to complete.
19http://www.fizyka.umk.pl/˜jkob/diagopt/time
Diagnostyka wykorzystania CPU 92
Diagnostyka wykorzystania CPU: /usr/bin/time
/usr/bin/time i builtin time: format danychPrzykład:
/usr/bin/time ./xhf h2-0 tmp...1.08user 0.08system 0:01.30elapsed 89%CPU (0avgtext+0avgdata 0maxresident)k0inputs+0outputs (0major+24154minor)pagefaults 0swaps
time ./xhf h2-0 tmp...1.085u 0.108s 0:01.29 91.4% 0+0k 0+0io 0pf+0w
/usr/bin/time -f \’%U %S %P %E %W %X %D %K %M %F %R %I %O %r %s %k %w %c’ ./xmcsor.linux3.33 0.01 91% 0:03.66 0 0 0 0 0 0 2051 0 0 0 0 0 1 958
setenv TIME "%U %S %P %E %W %X %D %K %M %F %R %I %O %r %s %k %w %c"
Diagnostyka wykorzystania CPU 93
Diagnostyka wykorzystania CPU: ac (psacct)20
Pakiet psacct: ac, lastcomm, sa
NAMEac - print statistics about users’ connect time
SYNOPSISac [ -d | --daily-totals ] [ -p | --individual-totals ]
[ people ] [ -f | --file filename ]
DESCRIPTIONac prints out a report of connect time (in hours) based on thelogins/logouts in the current wtmp file. A total is alsoprinted out.
ac korzysta z danych gromadzonych przez init i login w /var/log/wtmp.
20http://www.fizyka.umk.pl/˜jkob/diagopt/psacct
Diagnostyka wykorzystania CPU 94
Diagnostyka wykorzystania CPU: lastcomm (psacct)
NAMElastcomm - print out information about previously executedcommands.
SYNOPSISlastcomm
[ command-name ... ] [ user-name ... ][ terminal-name ... ] [ --strict-match ]
DESCRIPTIONlastcomm prints out information about previously executedcommands. If no arguments are specified, lastcomm will printinfo about all of the commands in acct (the record file).
lastcomm i sa korzystają z danych w /var/account/psacct gromadzo-nych przez accton.
Diagnostyka wykorzystania CPU 95
Diagnostyka wykorzystania CPU: sa (psacct)
NAMEsa - summarizes accounting information
DESCRIPTIONsa summarizes information about previously executed commands asrecorded in the acct file.
SYNOPSISsa [ -a | --list-all-names ]
[ -b | --sort-sys-user-div-calls ][ -c | --percentages ] [ -f | --not-interactive ][ -j | --print-seconds ] [ -k | --sort-cpu-avmem ][ -m | --user-summary ] [ -n | --sort-num-calls ][ -u | --print-users ][ --other-usracct-file filename ][ --other-savacct-file filename ][ [ --other-acct-file ] filename ]
Diagnostyka wykorzystania CPU 96
Diagnostyka wykorzystania CPU: sa (psacct)
root@uran [~] 0:50#sa -a | head -20410188 868337.80re 4099.49cp 1127k36 2191.62re 2142.01cp 3945k REZMOZ_Yuk3.2_w3 664.83re 641.36cp 2480k REZMOZ_Yuk3.2.x453 5668.31re 537.61cp 24104k firefox-bin10 2901.96re 224.73cp 119781k MATLAB189 5127.87re 149.12cp 24116k firefox-bin*81 1073.30re 60.76cp 22736k mozilla-bin8 55.58re 53.48cp 39000k x2dhf
root@uran [~] 0:56#sa -ab | head -20410211 868436.80re 4099.49cp 1127k
3 664.83re 641.36cp 2480k REZMOZ_Yuk3.2.x36 2191.62re 2142.01cp 3945k REZMOZ_Yuk3.2_w10 2901.96re 224.73cp 119781k MATLAB8 55.58re 53.48cp 39000k x2dhf2 275.73re 3.09cp 18799k MathKernel
Diagnostyka wykorzystania CPU 97
Diagnostyka wykorzystania CPU: sa (psacct)
root@uran [~] 0:53#sa -ac | head -20410204 100.00% 868436.79re 100.00% 4099.49cp 100.00% 1127k36 0.01% 2191.62re 0.25% 2142.01cp 52.25% 3945k REZMOZ_Yuk3.2_w3 0.00% 664.83re 0.08% 641.36cp 15.64% 2480k REZMOZ_Yuk3.2.x453 0.11% 5668.31re 0.65% 537.61cp 13.11% 24104k firefox-bin10 0.00% 2901.96re 0.33% 224.73cp 5.48% 119781k MATLAB189 0.05% 5127.87re 0.59% 149.12cp 3.64% 24116k firefox-bin*81 0.02% 1073.30re 0.12% 60.76cp 1.48% 22736k mozilla-bin8 0.00% 55.58re 0.01% 53.48cp 1.30% 39000k x2dhf
root@uran [~] 1:07#sa -u | grep jkob| grep x2dhfjkob 368.76 cpu 38736k mem x2dhfjkob 300.46 cpu 38000k mem x2dhfjkob 356.26 cpu 38512k mem x2dhfjkob 479.88 cpu 40032k mem x2dhfjkob 442.22 cpu 39424k mem x2dhfjkob 636.31 cpu 41552k mem x2dhfjkob 312.31 cpu 37888k mem x2dhfjkob 312.46 cpu 37856k mem x2dhf
Przydział procesora 98
Algorytmy przydziału procesora
Jeśli dwa lub więcej procesów znajdują się w stanie gotowy do wykonania,to o kolejności przydziału jednostki centralnej decyduje planista (schedu-ler).
Planista powinien gwarantować:
1. sprawiedliwość przydziału CPU (jednoprocesory, SMP, SMT21)
2. dobrą wydajność CPU
3. mały czas odpowiedzi (dobra interaktywność)
4. mały czas przetwarzania (turnaround time), brak głodzonych zadań
5. dużą przepustowość (throughput)
6. szeregowanie wg miękkiego czasu rzeczywistego
21SMP=Symmetric Multi Processing, SMT=Simultaneous Multi Threading
Przydział procesora 99
Klasyfikacja procesów
Klasyfikacja procesów I:
• związane z urządzeniami I/O (I/O-bound)
• związane z procesorem (CPU-bound)
Klasyfikacja procesów II:
• interaktywne
• wsadowe
• czasu rzeczywistego
W systemach Unix/Linux planista zwykle jawnie faworyzuje procesy ogra-niczone wejściem-wyjściem.
Przydział procesora 100
Systemy operacyjne z procesami:
• bez wywłaszczania (nonpreemptive) – planista jest wywoływany tylkowówczas kiedy proces dobrowolnie zrezygnuje z CPU (wczesne systemywsadowe stosowały podejście run to completion).
• z wywłaszczaniem (preemptive) – system operacyjny odbiera CPU pro-cesowi i wywołuje planistę
Jeśli wykonuje się zadanie o niskim priorytecie, a jest gotowe do wy-konania zadanie o wyższym priorytecie, to zadanie o niskim prioryteciejest wywłaszczane.
Przydział procesora 101
Wywłaszczanie procesu
Kiedy proces wchodzi w stan gotowy jądro sprawdza, czy jego priorytetnie jest wyższy od priorytetu procesu właśnie zawłaszczającego procesor.Jeśli tak, to wywoływany jest planista wybierający nowy proces do urucho-mienia.
Kiedy proces wyczerpie swój kwant czasu, podlega wywłaszczeniu, a pla-nista wybiera kolejny proces do uruchomienia.
Wywłaszczenie może nastąpić, jeśli
• jednostka centralna wykonuje kod w trybie użytkownika
• kod jądra powraca do przestrzeni użytkownika z wywołania systemo-wego lub z procedury obsługi przerwania
• kod jądra wstrzymywany jest przez mutex lub explicite oddaje stero-wanie innemu procesowi
Przydział procesora 102
Planowanie przydziału procesora:
• rotacyjne (round-robin scheduling)
• priorytetowe (polityka planowania i mechanizm planowania)
• pierwszy nadszedł, pierwszy obsłużony (FIFO, first in, first out)
• najkrótsze zadanie najpierw (SJF, shortest job first)
• dwupoziomowe
Przydział procesora 103
Algorytm szeregowania w Linuksie
Począwszy od wersji jądra 2.5 używany jest nowy planista, tzw. planistaO(1), tzn., że czas szeregowania nie zależy od liczby procesów.
W wersji 2.6.23 pojawił się nowy, całkowiecie sprawiedliwy planista (CFSCompletely Fair Scheduler).
Przydział procesora 104
Planista O(1)
Szeregowanie zdań odbywa się według priorytetów. W grupie procesówo tym samym priorytecie są one uruchamiane wg algorytmu karuzelowego.
Linux stosuje szeregowanie wg priorytetów dynamicznych oraz priorytetówczasu rzeczywistego.
Przydział procesora 105
Planista O(1): priorytety dynamiczne
• Priorytet procesu (klasy SCHED OTHER) jest modyfikowany w czasiewykonywania procesu (zadania uzależnione od wejścia-wyjścia mająpriorytet podwyższany).Początkowy priorytet procesu jest określany jako poziom uprzejmości(priorytet statyczny) i przyjmuje domyślnie wartość 0.Początkowa wartość priorytetu dynamicznego jest równa priorytetowistatycznemu i jest zmieniana o ±5 w zależności od interaktywnościzadania (stosunek czasu jaki zadanie spędza w zawieszeniu do czasuaktywności jest miarą uzależnienia zadania od operacji wejścia-wyjścia).
• Kwanty czasu są obliczane na podstawie priorytetów dynamicznych.Procesy o wyższym priorytecie otrzymują dłuższy kwant czasu. Do-myślnie proces otrzymuje kwant 100 ms. Ten kwant może być zwięk-szony do 800 ms lub zmniejszony do 5 ms lub jednego tyknięcia (jiffy),w zależności od tego, która z tych wielkości jest większa. Nowy procesdziedziczy kwant po swoim rodzicu.
Przydział procesora 106
Planista O(1): priorytety dynamiczne (cd)
• Czas procesora jest dzielony na epoki.
• W pojedynczej epoce każdy z procesów otrzymuje (niekoniecznie jed-nakowy) kwant czasu.
• Epoka się kończy, gdy każdy z procesów wykorzysta w całości swójkwant czasu.
• Nowa epoka rozpoczyna się od przeliczenia priorytetów i wielkościkwantów czasu.
• Priorytet dynamiczny może być modyfikowany przez użytkownika przyużyciu komend /bin/nice, /bin/renice, /usr/bin/snice,nice. Służą one do ustalania wartości priorytetów statycznych: od -20(najwyższy priorytet) do +19 (najniższy).
Przydział procesora 107
Planista O(1): priorytety czasu rzeczywistego
Linux udostępnia dwie strategie szeregowania zadań czasu rzeczywistego:
• zadania klasy SCHED FIFO – gotowe do uruchomienia zadanie tej klasyjest szeregowane przez zadaniami SCHED OTHER i nie otrzymują kwantuczasu (wykonują się do zawieszenia lub oddania procesora)
• zadania klasy SCHED RR – zadanie typu SCHED FIFO z określonymkwantem czasowym (może działać tylko do wyczerpania limitu czaso-wego)
Priorytety zadań czasu rzeczywistego są z zakresu 1-99 i nie ulegają zmianiew czasie wykonywania zadania. Priorytety dynamiczne są z zakresu 100-139 (zakres mapowania poziomów uprzejmości od -20 do +19). Najpierwsą wykonywane zadania czasu rzeczywistego ściśle w kolejności malejącychpriorytetów. Jeśli nie ma zadań czasu rzeczywistego, to są wykonywaniepozostałe zadania także w kolejności malejących priorytetów.
Przydział procesora 108
Planista O(1): dostrajanie
Fragment pliku kernel/sched.c
/** Priority of a process goes from 0..MAX_PRIO-1, valid RT priority is* 0..MAX_RT_PRIO-1, and SCHED_NORMAL/SCHED_BATCH tasks are in the* range MAX_RT_PRIO..MAX_PRIO-1. Priority values are inverted: lower* p->prio value means higher priority.
* The MAX_USER_RT_PRIO value allows the actual maximum RT priority to* be separate from the value exported to user-space. This allows* kernel threads to set their priority to a value higher than any* user task. Note: MAX_RT_PRIO must not be smaller than* MAX_USER_RT_PRIO.*/
#define MAX_USER_RT_PRIO 100#define MAX_RT_PRIO MAX_USER_RT_PRIO
#define MAX_PRIO (MAX_RT_PRIO + 40)#define DEFAULT_PRIO (MAX_RT_PRIO + 20)
Przydział procesora 109
Planista O(1): dostrajanie (cd)
Fragment pliku kernel/sched.c (do wersji 2.6.22 włącznie)
/** These are the ’tuning knobs’ of the scheduler:** Minimum timeslice is 5 msecs (or 1 jiffy, whichever is larger),* default timeslice is 100 msecs, maximum timeslice is 800 msecs.* Timeslices get refilled after they expire.*/#define MIN_TIMESLICE max(5 * HZ / 1000, 1)#define DEF_TIMESLICE (100 * HZ / 1000)#define ON_RUNQUEUE_WEIGHT 30#define CHILD_PENALTY 95#define PARENT_PENALTY 100#define EXIT_WEIGHT 3#define PRIO_BONUS_RATIO 25#define MAX_BONUS (MAX_USER_PRIO * PRIO_BONUS_RATIO / 100)#define INTERACTIVE_DELTA 2#define MAX_SLEEP_AVG (DEF_TIMESLICE * MAX_BONUS)#define STARVATION_LIMIT (MAX_SLEEP_AVG)#define NS_MAX_SLEEP_AVG (JIFFIES_TO_NS(MAX_SLEEP_AVG))
Przydział procesora 110
/* If a task is ’interactive’ then we reinsert it in the active* array after it has expired its current timeslice. (it will not* continue to run immediately, it will still roundrobin with* other interactive tasks.)* This part scales the interactivity limit depending on niceness.* We scale it linearly, offset by the INTERACTIVE_DELTA delta.* Here are a few examples of different nice levels:** TASK_INTERACTIVE(-20): [1,1,1,1,1,1,1,1,1,0,0]* TASK_INTERACTIVE(-10): [1,1,1,1,1,1,1,0,0,0,0]* TASK_INTERACTIVE( 0): [1,1,1,1,0,0,0,0,0,0,0]* TASK_INTERACTIVE( 10): [1,1,0,0,0,0,0,0,0,0,0]* TASK_INTERACTIVE( 19): [0,0,0,0,0,0,0,0,0,0,0]** (the X axis represents the possible -5 ... 0 ... +5 dynamic* priority range a task can explore, a value of ’1’ means the* task is rated interactive.)** Ie. nice +19 tasks can never get ’interactive’ enough to be* reinserted into the active array. And only heavily CPU-hog nice -20* tasks will be expired. Default nice 0 tasks are somewhere between,* it takes some effort for them to get interactive, but it’s not* too hard.*/
Przydział procesora 111
Planista CFS22
Cechy nowego planisty
• modułowość – moduły obejmują klasy zadań objętych wspólną politykąprzydziału CPU
– CFS (kernel/sched fair.c): SCHED NORMAL, SCHED BATCH,SCHED IDLE
– RT (kernel/sched rt.c): SCHED RR, SCHED FIFO
• całkowicie sprawiedliwy planista: zmiennej długości kwant czasu jestprzydzielany zadaniu, które go najbardziej potrzebuje
• szeregowanie według grup zadań
22http://www.ibm.com/developerworks/linux/library/l-cfs/index.html, http://kerneltrap.org/node/8059,http://immike.net/blog/2007/08/01/what-is-the-completely-fair-scheduler/, Documentation/-scheduler/sched-design-CFS.txt
Przydział procesora 112
Planista CFS (cd)
Algorytm CFS jest oparty na planiście RSDL/SD (Rotating Staircase De-adLine Scheduler) opracowanym przez C.Kolivasa. Planista stara się spra-wiedliwie przydzielać procesom równe porcje czasu CPU nie zważając nacharakter tych procesów (zależne od CPU czy od I/O); nie potrzebnaskomplikowana heurystyka oceny stopnia interaktywności procesów.
CSF zapewnia, że każdy z bieżących procesów otrzyma w określonym prze-dziale czasu swoją sprawiedliwą cząstkę zależną od liczby procesów goto-wych do wykonania.
W chwili kiedy zadanie trafia do kolejki zadań gotowych do wykonania(runqueue) rejestrowany jest bieżacy czas, a wartość zmiennej wait_-runtime jest zwiększana podczas oczekiwania procesu na przydział CPU(przyrost jest zależny od liczby zadań w kolejce i priorytetu zadania). Kiedyzadanie otrzyma CPU, to wartość wait_runtime ulega pomniejszaniu domomentu, kiedy wśród zadań oczekujących na przydział CPU będzie inneo większej wartości runtime.
Przydział procesora 113
Planista CFS (cd)
runtime jest liczony względem zegara, którego chód jest dostosowanydo liczby zadań w kolejce. Planista tak wybiera zadania i przydziela imtakie kwanty czasu, żeby żadne z zadań nie opóźniało się wględem fair_-clock. Prorytety są realizowane poprzez wiązanie z zadaniem określonejwagi, która modyfikuje tyknięcia zegara, względem którego liczone jesttempo wykonywania się zadania.
Moduł równoważący obciążenie (load balancer) jest odpowiedzialnyza przeglądanie zadań gotowych do wykonania.
Przydział procesora 114
Planista CFS: dostrajanie
Parametry sysctl związane z planistą CFS:
kernel.sched_min_granularity_ns = 2000000kernel.sched_latency_ns = 20000000kernel.sched_wakeup_granularity_ns = 1000000kernel.sched_batch_wakeup_granularity_ns = 25000000kernel.sched_stat_granularity_ns = 0kernel.sched_runtime_limit_ns = 20000000kernel.sched_child_runs_first = 1kernel.sched_features = 21kernel.sched_compat_yield = 0
Zależność między ziarnistością i opóźnieniem:
granularity = latency/nr - latency/nr/nr
nr = liczba zadań w run_queue
Przydział procesora 115
Planista CFS: dostrajanie/proc/PID/sched udostępnia niektóre parametry związane z pracą planisty:
se.wait_runtime : -19908167se.wait_start_fair : 0se.exec_start : 0se.sleep_start_fair : 52727039678758se.sum_exec_runtime : 132926886se.wait_start : 0se.sleep_start : 24334269578246se.block_start : 0se.sleep_max : 2974254940se.block_max : 0se.exec_max : 999849se.wait_max : 21694904se.wait_runtime_overruns : 1se.wait_runtime_underruns: 124se.sum_wait_runtime : -74963939nr_switches : 82se.load.weight : 1024policy : 0prio : 120clock-delta : 104
Przydział procesora 116
Priorytety wg top/htop oraz ps
Zależność wartości PRI i NI od priorytetu dynamicznego
PRI NItop/htop priorytet dynamiczny - 100 PRI-20ps -ely priorytet dynamiczny - 40 PRI-80ps -eo pri,ni 139 - priorytet dynamiczny PRI-20
Przerwania/wywołania systemowwe 117
Przerwania i wywołania systemowe
Źródła przerwań:
• przerwania sprzętowe (device interrupts)
• błędy emulacji instrukcji
• błędy pamięci wirtualnej
• błędy programowe (wyjątki)
• błędy sprzętowe (machine checks)
Wywołania systemowe mogą być traktowane jako specyficzny rodzaj prze-rwań, gdyż z każdym z nich związana jest lista argumentów, które określająrodzaj działań podejmowanych przez jądro.
Przerwania/wywołania systemowwe 118
Przerwania i wywołania systemowe (cd)
Przerwania (zdarzenia) dzieli się na:
• asynchroniczne (przerwania) – generowane przez inne urządzenia sprzę-towe w dowolnym czasie, niezależnie od sygnałów zegarowych proce-sora.
• synchroniczne (wyjątki) – tworzone przez jednostkę sterowania proce-sora podczas wykonywania instrukcji (są synchroniczne, bo generowanesą po zakończeniu wykonywania instrukcji)
Przerwania/wywołania systemowwe 119
Rodzaje przerwań:
• programowe
• maskowalne – wszystkie IRQ (Interrupt ReQuests) generowane przezurządzenia I/O powodują powstanie przerwań maskowalnych (pin INTRprocesora)
• niemaskowalne – tylko kilka krytycznych zdarzeń, np. awaria sprzętu,powoduje wygenerowanie przerwań niemaskowalnych (pin NMI, Non-Maskable Interrupts)
• międzyprocesorowe (IPI, InterProcessor Interrupts)
• niepożądane (spurious interrupt) – niechciane przerwania sprzętowewywołane np. zakłóceniami elektromagnetycznymi
Przerwania/wywołania systemowwe 120
Podział przerwań i wyjątków wg dokumentacji Intela
Wyjątki:
• wyjątki wykrywane przez procesor – generowane, gdy proces wykry-je nieprawidłowości przy wykonywaniu instrukcji (IEEE 754: niedomiar(underflow), nadmiar (overflow), dzielenie, niepoprawna operacja, nie-dokładna operacja, dzielenie przez zero.
• błędy (faults) – instrukcja, która spowodowała błąd może być wzno-wiona
• pułapki (traps) – licznik instrukcji jest ustawiany na adres kolejnejinstrukcji (śledzenie programu)
• załamania (aborts) – wystąpił poważny błąd i jednostka sterowania niemoże zachować adresu instrukcji; zwykle oznacza zakończenie procesu,który spowodował załamanie
• wyjątki programowe (przerwania programowe) – występują na żądanieprogramisty
Przerwania/wywołania systemowwe 121
Przerwania/wywołania systemowwe 122
Wywołania systemowe
Z punktu widzenia programisty wywołania systemowe nie istnieją. Progra-mista korzysta jedynie z programowego interfejsu aplikacji (API ApplicationProgramming Interface) dostarczanego przez system.23
Interfejs wywołań systemowych w Linuksie (większości Uniksów) stanowiczęściowo biblioteka C.
Aplikacja: wywołanie funkcji printf()Biblioteka C: printf() −→ write()Jądro: wywołanie systemowe write()
Wywołania systemowe są niezbędne, gdyż aplikacje działające w przestrze-ni użytkownika nie mogą wykonać kodu jądra. Aplikacja nie może bezpo-średnio zainicjować wywołania funkcji operacji jądra, ponieważ jądro jestumieszczone i działa w chronionym obszarze pamięci operacyjnej.23API Linuksa jest zgodny ze standardem POSIX (Portable Operating System In-terface).
Przerwania/wywołania systemowwe 123
Wywołania systemowe (cd)
Dokładny ciąg działań związany z obsługą wywołania systemowego jestzależny od platformy, ale zwykle obejmuje następujące kroki:
1. program umieszcza numer wywołania i argumenty w ustalonym miejscu(rejestry procesora, stos)
2. program wykonuje specjalną instrukcję (software interrupt, trap, bre-ak, syscall), która powoduje wstrzymanie przetwarzania w przestrzeniużytkownika i przkazanie sterowania do jądra
3. jądro pobiera numer wywołania systemowego i używa go jako indeksupozwalającego odszukać w tablicy wywołań systemowych odpowied-niej procedury obsługi (system call handler). Linux stosuje konwencję,wg której wywołaniu systemowemu o nazwie x odpowiada proceduraobsługi sys x.
Przerwania/wywołania systemowwe 124
4. jądro pobiera argumenty wywołania systemowego i wykorzystuje je przywywołaniu odpowiedniej procedury obsługi. Po jej zakończeniu jądrozapewnia, że wartości zwracane przez procedurę obsługi oraz statuszakończenia są zapisywane w uzgodnionym obszarze (zwykle rejestry)skąd mogą być pobrane przez program z poziomu użytkownika
5. jądro wykonuje specjalną instrukcję (return from interruption), aby ste-rowanie wróciło do trybu użytkownika i mógł wznowić działanie prze-rwany program
6. program pobiera status zakończenia oraz wyniki działania proceduryobsługi przerwania. Jeśli status zakończenia wskazuje, że odwołaniedo systemu zakończyło się błędem, to uruchamiana jest przez programodpowiednia procedura obsługi błędu; w przeciwnym razie kontynu-owane jest przetwarzanie
Przerwania/wywołania systemowwe 125
Wywołania systemowe (cd)
Przerwanie programowe implementuje w procesorach rodziny x86 instruk-cja int $0x80. Powoduje ona przełączenie systemu do trybu jądra i roz-poczęcie wykonywania wektora przerwania 128, który wskazuje na adresprocedury obsługi wywołań systemowych system call() (zdefiniowanaw pliku entry.S).
Numer identyfikujący wywołanie systemowe jest umieszczany w rejestrzeeax. Rejestry (ebx, ecx, edx, esi, edi) są (zwykle) używane doprzekazywania argumentów wywołania systemowego. Przed użyciem do-konywana jest dokładna weryfikacja przekazanych argumentów.
Z punktu widzenia jądra wywołanie systemowe niczym nie różni się od in-nych rodzajów przerwań. Problemem może być efektywne przekazywanieargumentów przerwania i jego wyników pomiędzy poziomem użytkownikai poziomem jądra (przerwania sprzętowe zachodzą w tempie rzędu 103/s,wywołania systemowe – 105/s)
Przerwania/wywołania systemowwe 126
Wywołania systemowe (cd)
Fragment pliku /usr/include/asm/unistd_32.h (jądro 2.6.26.6-79.fc9.i686), który określa powiązanie pomiędzy numerami wywołańsystemowych i ich nazwami:#define __NR_restart_syscall 0#define __NR_exit 1#define __NR_fork 2#define __NR_read 3#define __NR_write 4#define __NR_open 5#define __NR_close 6#define __NR_waitpid 7...#define __NR_execve 11#define __NR_chdir 12#define __NR_time 13#define __NR_mknod 14...#define __NR_eventfd 323#define __NR_fallocate 324#define __NR_timerfd_settime 325#define __NR_timerfd_gettime 326
Przerwania/wywołania systemowwe 127
Wywołania systemowe (cd)
Fragment pliku /usr/include/asm/unistd_64.h (jądro 2.6.26.6-79.fc9.i686):#define __NR_read 0__SYSCALL(__NR_read, sys_read)#define __NR_write 1__SYSCALL(__NR_write, sys_write)#define __NR_open 2__SYSCALL(__NR_open, sys_open)#define __NR_close 3__SYSCALL(__NR_close, sys_close)#define __NR_stat 4__SYSCALL(__NR_stat, sys_newstat)#define __NR_fstat 5__SYSCALL(__NR_fstat, sys_newfstat)#define __NR_lstat 6__SYSCALL(__NR_lstat, sys_newlstat)#define __NR_poll 7__SYSCALL(__NR_poll, sys_poll)...#define __NR_timerfd_create 283__SYSCALL(__NR_timerfd_create, sys_timerfd_create)#define __NR_eventfd 284__SYSCALL(__NR_eventfd, sys_eventfd)#define __NR_fallocate 285__SYSCALL(__NR_fallocate, sys_fallocate)#define __NR_timerfd_settime 286__SYSCALL(__NR_timerfd_settime, sys_timerfd_settime)#define __NR_timerfd_gettime 287__SYSCALL(__NR_timerfd_gettime, sys_timerfd_gettime)
Diagnostyka: przerwania/wywołania systemowe 128
Diagnostyka wykorzystania CPU: przerwania sprzętowe24
Przyporządkowanie przerwań do urządzeń można sprawdzić przy pomocykomend: dmesg, lspci [-v] [-vv]:
# dmesg...ACPI: PCI Interrupt 0000:00:1c.0[A] -> GSI 16 (level, low) -> IRQ 16...ACPI: PCI Interrupt 0000:03:01.0[A] -> GSI 19 (level, low) -> IRQ 19
# lspci0:1c.0 PCI bridge: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) \
PCI Express Port 1 (rev 03)...03:01.0 CardBus bridge: Texas Instruments PCI6515 Cardbus Controller
Powiązanie pomiędzy identyfikatorami urządzeń PCI, a ich pełnymi nazwa-mi znajdują się w pliku /usr/share/hwdata/pci.ids.
24http://www.fizyka.umk.pl/˜jkob/diagopt/interrupts
Diagnostyka: przerwania/wywołania systemowe 129
Diagnostyka wykorzystania CPU: przerwania sprzętowe
Monitorowanie przerwań sprzętowych:
• mpstat, top/htop• vmstat, vmstat -s• /proc/interrupts• sar -I irq, sar -I [X]ALL• procinfo (?)
Diagnostyka: przerwania/wywołania systemowe 130
Diagnostyka wykorzystania CPU: przerwania sprzętowe (cd)25
# cat /proc/interruptsCPU0
0: 21735309 IO-APIC-edge timer1: 214181 IO-APIC-edge i80424: 8 IO-APIC-edge7: 2721766 IO-APIC-edge parport08: 77 IO-APIC-edge rtc09: 63 IO-APIC-fasteoi acpi12: 368975 IO-APIC-edge i804214: 814494 IO-APIC-edge ata_piix15: 1377381 IO-APIC-edge ata_piix16: 7655223 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb2, Intel ICH6, eth0,i915@pci:0000:00:02.017: 1743467 IO-APIC-fasteoi uhci_hcd:usb3, ipw220018: 739188 IO-APIC-fasteoi uhci_hcd:usb419: 147327 IO-APIC-fasteoi uhci_hcd:usb5, yentaNMI: 1473600 Non-maskable interruptsLOC: 43827840 Local timer interruptsRES: 0 Rescheduling interruptsCAL: 0 function call interrupts SPU: 0 Spurious interruptsTLB: 0 TLB shootdowns ERR: 0TRM: 0 Thermal event interrupts MIS: 0
25patrz: Documentation/filesystems/proc.txt
Diagnostyka: przerwania/wywołania systemowe 131
APIC dla procesorów Intel Xeon w systemach SMP26
26Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 3A: System Program-ming Guide, Part 1
Diagnostyka: przerwania/wywołania systemowe 132
Diagnostyka wykorzystania CPU: przerwania sprzętowe (cd)27
Na wieloprocesorach przerwania są (domyslnie) przekazywane do obsługina wszystkie jednostki centralne (algorytm karuzelowy). Można to zmienićmodyfikując maskę przechowywaną w zmiennej smp affinity.
# ls -la /proc/irq/16/razem 0dr-xr-xr-x 7 root root 0 lis 8 19:34 .dr-xr-xr-x 22 root root 0 lis 8 19:34 ..dr-xr-xr-x 2 root root 0 lis 8 19:36 ehci_hcd:usb1dr-xr-xr-x 2 root root 0 lis 8 19:36 eth0dr-xr-xr-x 2 root root 0 lis 8 19:36 i915@pci:0000:00:02.0dr-xr-xr-x 2 root root 0 lis 8 19:36 Intel ICH6-rw------- 1 root root 0 lis 8 19:36 smp_affinity-r--r--r-- 1 root root 0 lis 8 19:36 spuriousdr-xr-xr-x 2 root root 0 lis 8 19:36 uhci_hcd:usb2# cat smp_affinityffffffff# echo 1 > /proc/irq/16/smp_affinity
27patrz: Documentation/filesystems/proc.txt
Diagnostyka: przerwania/wywołania systemowe 133
Diagnostyka wykorzystania CPU: przerwania sprzętowe (cd)28
Obsługa przerwania sprzętowego:
• górna połówka (top half) – procedura obsługi przerwania (interrupthandler, interrupt service routine), która ma bezpośredni kontakt zurządzeniem, inne przerwania (na tej samej linii) wyłączone; proceduraobsługi przerwania nie może być wywłaszczona
• dolne połówki (obsługa przerwań włączona)
28http://tavi.debian.org.tw/index.php?page=Bottom+Halves
Diagnostyka: przerwania/wywołania systemowe 134
Diagnostyka wykorzystania CPU: przerwania sprzętowe (cd)
• dolne połówki (obsługa przerwań włączona)
– przerwania programowe (softirq) – stosowane do obsługi urządzeńdużym znaczeniu dla wydajności systemu (warstwa sieciow/SCSI,czasomierze jądra); oddzielne softirq mogą się wykonywać na róż-nych procesorach (wielowejściowość); nie mogą być wywłaszczane
– tasklety (tasklets) – zbudowane w oparciu o przerwania programo-we, łatwiejsze w użyciu, niewielowejściowe, nie mogą być wywłasz-czane
– kolejki robót (work queues) – wykonują się w kontekscie procesui dlatego mogą być usypiane
Wątki jądra ksoftirqd/n (dla każdego procesora jeden) są wykorzystywanedo przetwarzania dolnych połówek w kontekście procesu; uaktywniane sąjeśli jednostki centralne nie nadążają z obsługą dolnych połówek.29
29http://www.digipedia.pl/man/ksoftirqd.9.html
Diagnostyka: przerwania/wywołania systemowe 135
Diagnostyka wykorzystania CPU: strace30
NAMEstrace - trace system calls and signals
SYNOPSISstrace [-c] [ -ppid ] [ -eexpr ] [-Ssortby ] [ -ofile ]
[ command [ arg ... ] ]
DESCRIPTIONIn the simplest case strace runs the specified command until itexits. It intercepts and records the system calls which arecalled by a process and the signals which are received by aprocess. The name of each system call, its arguments and itsreturn value are printed on standard error or to the filespecified with the -o option.
30http://www.fizyka.umk.pl/˜jkob/diagopt/strace
Diagnostyka: biblioteki 136
Diagnostyka wykorzystania CPU: ltrace31
NAMEltrace - A library call tracer
SYNOPSISltrace [-cS] [-a column] [-e expr] [-l filename] [-n nr][-o filename] [-p pid] [command [arg ...]]
DESCRIPTIONltrace is a program that simply runs the specified commanduntil it exits. It intercepts and records the dynamiclibrary calls which are called by the executed process and thesignals which are received by that process. It can alsointercept and print the system calls executed by the program.
31http://www.fizyka.umk.pl/˜jkob/diagopt/ltrace
Diagnostyka: biblioteki 137
Diagnostyka wykorzystania CPU: ldd
NAMEldd - print shared library dependencies
SYNOPSISldd [OPTION]... FILE...
DESCRIPTIONldd prints the shared libraries required by each program orshared library speci- fied on the command line.
Diagnostyka: biblioteki 138
Diagnostyka wykorzystania CPU: objdump, nm
NAMEobjdump - display information from object files.
SYNOPSISobjdump [-T|--dynamic-syms] objfile...
-T --dynamic-symsPrint the dynamic symbol table entries of the file. Thisis only meaningful for dynamic objects, such as certaintypes of shared libraries. This is similar to theinformation provided by the nm program when given the -D(--dynamic) option.
NAMEnm - list symbols from object files
SYNOPSISnm [-D|--dynamic] [objfile...]
Diagnostyka: CPU 139
Diagnostyka wykorzystania CPU: gprof32
NAMEgprof - display call graph profile data
SYNOPSISgprof [ -[abcDhilLrsTvwxyz] ] ... [ image-file ] [ profile-file ... ]
DESCRIPTION "gprof" produces an execution profile of C, Pascal, orFortran77 programs. The effect of called routines isincorporated in the profile of each caller. The profile data istaken from the call graph profile file (gmon.out default) whichis created by programs that are compiled with the -pg option of"cc", "pc", and "f77". [...] "Gprof" reads the given objectfile (the default is "a.out") and establishes the relationbetween its symbol table and the call graph profile fromgmon.out.
"Gprof" calculates the amount of time spent in each routine.32http://www.fizyka.umk.pl/˜jkob/diagopt/oprofile
Diagnostyka: CPU 140
Diagnostyka wykorzystania CPU: oprofile33
NAMEoprofile - a system-wide profiler
SYNOPSISopcontrol [ options ]opreport [ options ] [ profile specification ]opannotate [ options ] [ profile specification ]opgprof [ options ] [ profile specification ]
DESCRIPTIONOProfile is a profiling system for systems running Linux 2.2,2.4, and 2.6. Profiling runs transparently in the backgroundand profile data can be collected at any time. OProfile makesuse of the hardware performance counters provided on Intel,AMD, and other processors, and uses a timer-interrupt basedmechanism on CPUs without counters. OProfile can profile thewhole system in high detail.
33http://oprofile.sourceforge.net/
Diagnostyka: CPU 141
Diagnostyka: CPU 142
Pentium II and Pentium III Processors Architecture34
34http://dynopt.dtc.umn.edu/documents/IA-OPTIMIZATION-Ref-Manual.pdf
Diagnostyka: CPU 143
Pentium II and Pentium III Processors Architecture35
35http://dynopt.dtc.umn.edu/documents/IA-OPTIMIZATION-Ref-Manual.pdf
Diagnostyka: CPU 144
Diagnostyka wykorzystania CPU: oprofile (cd)36
Działanie narzędzi oprofile ilustrują skrypty:
• oprofile.sh test-1 [ eventCount ]• oprofile.sh test-2 [ eventCount ]• oprofile.sh test-3 [ eventCount ]• mcsor/oprofile.sh mcsor.sh [ eventCount ]
36http://www.fizyka.umk.pl/˜jkob/diagopt/oprofile
Diagnostyka: CPU 145
Diagnostyka wykorzystania CPU: oprofile (cd)37
Przykładowe events dla ”PIII”:DATA_MEM_REFS: (counter: all)
all memory references, cachable and non (min count: 500)DCU_LINES_IN: (counter: all)
total lines allocated in the DCU (min count: 500)DCU_M_LINES_OUT: (counter: all)
number of M lines evicted from the DCU (min count: 500)DCU_MISS_OUTSTANDING: (counter: all)
number of cycles while DCU miss outstanding (min count: 500)IFU_IFETCH_MISS: (counter: all)
number of instruction fetch misses (min count: 500)FLOPS: (counter: 0)
number of computational FP operations executed (min count: 3000)FP_ASSIST: (counter: 1)
number of FP exceptions handled by microcode (min count: 500)MUL: (counter: 1)
number of multiplies (min count: 1000)DIV: (counter: 1)
number of divides (min count: 500)
37Intel Architecture Developers Manual Volume 3, Appendix A, Intel Architecture OptimizationReference Manual (730795-001)
Diagnostyka: CPU 146
Wydajność algorytmu (MC)SOR. 2. i 4. kolumna – czas w sec., 3. i 5. kolumna – szybkość w MFLOPS/s
system SOR MCSORCray YMP 19.1 (25.7) 3.3 (149)DEC 8400 5.3 (93.0) 12.1 (40.5)IBM SP2a 7.3 (67.2) 8.5 (57.7)SGI Power Challengeb 6.2 (79.1) 12.1 (40.5)Sun Enterprise 6000c 7.7 (63.7) 15.3 (32.1)Compaq Proliant 5500d 4.3 (114) 9.5 (51.6)PC Pentium IIIe 4.6 (107) 8.2 (59.8)ADAX-Omegaf 1.0 (491) 1.6 (307)Dell Power Edge 1750g 0.68 (722) 1.30 (377)PC Pentium IVh 0.51 (963) 1.09 (450)Intel Tigeri 0.98 (501) 1.04 (472)Sun Fire VZ20j 0.46 (1067) 1.29 (381)PC E8400k 0.24 (2047) 0.27 (1819)
a RS6000/590, 66 MHz wide node b R8000, 90 MHz, 4MB cache c UltraSparc 167 MHz, 0.5 MB cached 550 MHz, Linux Red Hat 8.0, g77 e 550 MHz, Linux Red Hat 8.0, g77 f Xeon 1.8 GHz, Linux Red Hat 8.0, g77g Xeon 3.06 GHz, Linux Red Hat 8.0, g77 h Prescott 3.0 GHz, Linux, g77 i Itanium 2 1.4 GHz, Linux, ifortj Opteron 250 2.4 GHz, Linux (FC3), g77 k Intel E8400 3.00GHz (6 MB cache), Linux (Fedora9), gfortran
Diagnostyka: CPU 147
Diagnostyka wykorzystania CPU: Performance Inspector38
The Performance InspectorTM packages contain suites of performance ana-lysis tools for Linux R©, Windows R©, AIX R©, and ZOS R© platforms. Thesetools will help you gain a better understanding of the performance of yourapplications and the resources they consume. The tools can be used tohelp identify performance problems in your application, as well as howyour application interacts with the operating system.[ ... ] Performance Inspector uses the performance counters provided bythe CPUs, if available, to measure system events at the process level. Thepackage may also include a device driver, and may use a pinned buffer perCPU along with kernel hooks, to capture performance related information.You can find tools with similar capabilities to some of our tools in theLinux Trace Toolkit, Oprofile, and dProbes.
38http://perfinsp.sourceforge.net/
Diagnostyka: CPU 148
Konfiguracja jądra: modele wywłaszczania39
# make menuconfigProcessor type and features --->Preemption Model (Voluntary Kernel Preemption (Desktop)) --->
( ) No Forced Preemption (Server)(X) Voluntary Kernel Preemption (Desktop)( ) Preemptible Kernel (Low-Latency Desktop)
• No Forced Preemption (CONFIG PREEMPT NONE): kernel code(system call) is not preempted (kernel 2.4 model)
– best for systems making intensive computations (maximize overallthroughput),– best to reduce task switching to maximize CPU and cache usage
(by reducing context switching)– can benefit from a lower timer frequency (100 Hz instead of 250 or
1000)39Embedded Linux optimizations: http://free-electrons.com/doc/embedded linux optimiza-
tions.pdf
Diagnostyka: CPU 149
Konfiguracja jądra: modele wywłaszczania (cd)
• Voluntary Kernel Preemption (CONFIG PREEMPT VOLUNTARY):kernel code can preempt itself (kernel thread can explicitly decide toyield the CPU to another thread)
– adds explicite rescheduling points throughout the kernel;– improves reaction of (desktop) applications to user input– minor impact on throughput
• Preemptible Kernel: most kernel code can be involuntarily preemptedat any time
– exception: kernel critical sections (holding spinlocks)– typically for desktop or embedded systems with latency requirements
in the milisecond range– the system is in an immediately preemptible state more than 50%
of the time (even during kernel-intense workloads).– minor impact on throughput
Diagnostyka: CPU 150
Konfiguracja jądra: łata RealTime40
W jądrze 2.6 wywłaszczenie może nastąpić, jeśli
• jednostka centralna wykonuje kod w trybie użytkownika
• kod jądra powraca do przestrzeni użytkownika z wywołania systemo-wego lub z procedury obsługi przerwania
• kod jądra wstrzymywany jest przez mutex lub explicite oddaje stero-wanie innemu procesowi
Jeśli wykonuje się kod jądra i zachodzi jakieś zdarzenie, które wymagauruchomienia wysokopriorytetowego wątku, to ten wątek nie może wy-właszczyć jądra. Wywłaszczenie może jednak nastąpić, jeśli jądro samoodda sterowanie, ale może to powodować opóźnienia w obsłudze wątkuo wysokim priorytecie sięgające kilkuset milisekund.
40http://rt.wiki.kernel.org/index.php/Frequently Asked Questions
Diagnostyka: CPU 151
Konfiguracja jądra: łata RealTime (cd)
Zastosowanie opcji konfiguracyjnej CONFIG PREEMPT pozwala zredu-kować opóźnienia do poziomu pojedynczych milisekund. Jeśli zastosowa-nia wymagają zapewnienia krótszych opóźnień, to trzeba zastosować łatęCONFIG PREEMPT RT41, która sprawia, że jądro staje się w pełni wy-właszczalne. Osiągnięto to
• zastępując w jądrze blokady wirujące (spinlock) przez rtmuteksy
• implementując dziedziczenie priorytetów przez blokady wirujące i se-mafory
• zamieniając przerwania programowe (softirq) w (przełączalne) wątkijądra
• zastępując API czasomierza przez nową POSIX-ą infrastrukturę czaso-wą (w przestrzeni użytkownika) o dużej rozdzielczości
41http://www.kernel.org/pub/linux/kernel/projects/rt/
Diagnostyka: CPU 152
Ograniczenie wykorzystania zasobów: powłoka tcsh
limit [-h] [resource [maximum-use]]
cputime - the maximum number of cpu-seconds to be used by each processfilesize - the largest single file which can be createddatasize - the maximum growth of the data+stack region via sbrk(2)
beyond the end of the program textstacksize - the maximum size of the automatically-extended stack region
coredumpsize the size of the largest core dump that will be createdmemoryuse - the maximum amount of physical memory a process may have
allocated to it at a given timeheapsize - the maximum amount of memory a process may allocate per brk()
system calldescriptors or openfiles
- the maximum number of open files for this processconcurrency the maximum number of threads for this process
memorylocked - the maximum size which a process may lock into memory usingmlock(2)
maxproc - the maximum number of simultaneous processes for this user idsbsize - the maximum size of socket buffer usage for this user
Diagnostyka: CPU 153
Ograniczenie wykorzystania zasobów: powłoka bash
ulimit [-SHacdefilmnpqrstuvx [limit]]
-a All current limits are reported-c The maximum size of core files created-d The maximum size of a processas data segment-e The maximum scheduling priority (nice)-f The maximum size of files created by the shell-i The maximum number of pending signals-l The maximum size that may be locked into memory-m The maximum resident set size-n The maximum number of open file descriptors (most systems do not allow
this value to be set)-p The pipe size in 512-byte blocks (this may not be set)-q The maximum number of bytes in POSIX message queues-r The maximum rt priority-s The maximum stack size-t The maximum amount of cpu time in seconds-u The maximum number of processes available to a single user-v The maximum amount of virtual memory available to the shell-x The maximum number of file locks
Diagnostyka: CPU 154
Domyślne wartości parametrów są określone w/etc/security/limits.conf.
Wykorzystanie pamięci 155
Wykorzystanie pamięci operacyjnej: system pamięci wirtualnej
1. Adresowanie pamięci: segmentacja i stronicowanie
2. Translacja adresów wirtualnych na fizyczne
3. Stronicowanie i segmentacja w Linuksie
4. Stronicowanie na żądanie
5. Wiązanie adresów (pmap, prelink)
6. Pamięci podręczne stron, buforów i wymiany
7. Wykorzystanie pamięci (pmap, vmstat, meminfo, ps)
8. Przestrzeń adresowa procesu, strefy pamięci
9. Zastępowanie stron i równoważenie pamięci (pdflush, kswapd)
Wykorzystanie pamięci 156
Architektura procesorów Intela: adresowanie42
• 8086 (1978): Real-Address Mode (Real Mode)
adres 20-bitowy (segment:offset) pozwalał na zaadresowanie 220 =1048576 B złożonych z 64 K ciągłych obszarów (16-bitowe rejestryadresowe i segmentowe; kolejne adresy segementów różnią się o 16 B)
• 80286 (1982): Protected Virtual Address Mode (Protected Mode)
rejestr segmentowy NIE zawiera adresu fizycznego segmentu, ale indeksdo tablicy deskryptorów (descriptor table, 8192 pozycje), gdzie znajdujesię 24-bitowy fizyczny adres bazowy (kolejne adresy różnią się o 64 K),co w powiązaniu z 16-bitowym adresem liniowym pozwala zaadresować224=16 MB RAM-u
42http://www.awprofessional.com/articles/article.asp?p=167857&rl=1
Wykorzystanie pamięci 157
Segmentacja pamięci w i386
Wykorzystanie pamięci 158
Architektura procesorów Intela: adresowanie (cd)
• 80386 (1985):
– 32-bitowe rejestry adresowe, liniowa przestrzeń adresowa 232=4 GB(znika konieczność stosowania odrębnych segmentów dla kodu i da-nych)
– sprzętowe wsparcie dla stronicowania (strony 4 KB, dla procesorówPentium także 4 MB); zarządzanie stronami poprzez hierarchicznąstrukturę drzewa stronZalety:
1. znika bezpośredni związek pomiędzy adresem logicznym (linio-wym) używanym w programie, a adresem fizycznym używanymprzy dostępie do kodu i danych
2. ciągłe obszary przestrzeni adresowej programu nie muszą być od-wzorowywane w ciągłe obszary pamięci fizycznej
Wykorzystanie pamięci 159
Segmentacja płaska pamięci w i386
Wykorzystanie pamięci 160
Adresowanie pamięci w procesorach 80386 i nowszych
• adres logiczny (XXXX:YYYYYYYY) używany w instrukcjach językamaszynowego do określenia adresów argumentów lub instrukcji; każ-dy adres składa się z 16-bitowego selektora segmentu i 32-bitowegoprzesunięcia (offsetu), który oznacza odległość od początku segmentudo aktualnego adresu
• adres liniowy (=przesunięcie adresu wirtualnego) – pojedyncza 32-bitowa liczba całkowita bez znaku, która pozwala adresować do 4 GBpamięci
• adres sprzętowy używany do adresowania komórek pamięci znajdują-cych się w układach pamięci (32-bitowa liczba całkowita bez znaku)
Sprzętowy obwód o nazwie jednostka segmentacji tłumaczy adres logicznyna adres liniowy. Inny obwód sprzętowy, zwany jednostką stronicowania,tłumaczy adres liniowy na fizyczny.
Wykorzystanie pamięci 161
Segmentacja w Linuksie
Segmentacja została dołączona do procesorów Intela w celu zachęceniaprogramistów do dzielenie swoich aplikacji na logicznie połączone jednost-ki, takie jak podprogramy oraz globalne i lokalne obszary danych.Linux używa segmentacji w ograniczonym zakresie, gdyż stosowanie seg-mentacji i stronicowania jest nadmiarowe:
• zarządzanie pamięcią jest prostsze, gdy wszystkie procesy używają tychsamych wartości rejestrów segmentacji, czyli współdzielą ten sam ze-staw adresów liniowych
• Linux ma być przenośnym systemem operacyjnym, a np. część proce-sorów RISC ma bardzo ograniczone możliwości segmentacji
Wykorzystanie pamięci 162
Segmentacja w Linuksie (cd)
Linux używa następujących segmentów:
• segment kodu jądra (BASE=0x00000000, LIMIT=0xffffffff)
• segment danych jądra (BASE=0x00000000, LIMIT=0xffffffff)
• segment kodu użytkownika (BASE=0x00000000, LIMIT=0xffffffff)
• segment danych użytkownika (BASE=0x00000000, LIMIT=0xffffffff)
• segment statusu zadania (TSS) dla każdego procesu; deskryptory tychsegmentów są przechowywane w GDT (Global Descriptor Table)
• domyślny segment LDT (Local Descriptor Table), który jest współdzie-lony przez wszystkie procesy
Lokalne tablice deskryptorów nie są przez jądro używane, jednak istnie-je funkcja systemowa, która pozwala procesom na tworzenie własnychLDT. Przydaje się to aplikacjom w rodzaju Wine, które wykonują zo-rientowane segmentowo aplikacje Microsoft Windows.
Wykorzystanie pamięci 163
Stronicowanie w procesorach Intela
Dla stron 4 KB 32-bitowy adres jest dzielony na trzy pola:
• Directory (Katalog) najbardziej znaczące 10 bitów
• Table (Tablica) środkowe 10 bitów
• Offset (przesunięcie) najmniej znaczące 12 bitów
Dla stron 4 MB 32-bitowy adres jest dzielony na dwa pola:
• Directory najbardziej znaczące 12 bitów
• Offset najmniej znaczące 20 bitów
Poczynając od procesorów Intel Pentium wprowadzono możliwość stosowania adresów
36-bitowych, dzięki zastosowanie jednostki PAE (Physical Address Extension). Pozwala
to na adresowanie do 64 GB pamięci fizycznej. Ponieważ adresy są nadal 32-bitowe, więc
tylko 4 GB pamięci mogą być „stale odwzorowane” i dostępne w danej chwili.
Wykorzystanie pamięci 164
Stronicowanie w procesorach Intela (cd)
Tłumaczenie adresów liniowych jest oparte na dwóch tablicach: KataloguStron i Tablicy Stron:
• adres fizyczny aktualnego Katalogu Stron jest przechowywany w reje-strze cr3 procesora
• pole Directory w adresie liniowym określa pozycję w Katalogu Stron,która wskazuje na odpowiednią Tablicę Stron
• pole Table w adresie liniowym określa pozycję w Tablicy Stron, którazawiera adres bloku stronicowego zawierającego daną stronę
• przesunięcie określa pozycję względem bloku stronicowego
• 1024 pozycje Katalogu Stron i 1024 pozycje tablicy Stron pozwalajązaadresować 1024× 1024× 4096 = 232 bajtów (katalog i tablice stronzajmują 4 KB+1024×4 KB)
Wykorzystanie pamięci 165
Stronicowanie dwupoziomowe: strony 4 KB
Wykorzystanie pamięci 166
Stronicowanie jednopoziomowe: strony 4 MB
Wykorzystanie pamięci 167
Stronicowanie w Linuksie
Linux używa stronicowania trzypoziomowego, co umożliwia działanie ar-chitekturom 64-bitowym.
Linux wykorzystuje trzy tablice stronicowania:
• Globalny Katalog Stron (Global Directory Table)
• Pośredni Katalog Stron (Middle Directory Table)
• Tablica Stron (Page Table)
• Przesunięcie (Offset) 12 najmniej znaczących bitów
Procesory 32-bitowe używają tylko dwóch rodzajów tablic stron, więc po-średni katalog stron jest eliminowany (zawiera zero bitów). Dzięki przecho-wywaniu pozycji tego katalogu w sekwencji wskaźników ten sam kod możedziałać na architekturach 32- i 64-bitowych.
Wykorzystanie pamięci 168
Wykorzystanie pamięci 169
Wykorzystanie pamięci 170
Pamięć wirtualna
Wykorzystanie pamięci 171
Wykorzystanie pamięci 172
Wykorzystanie pamięci 173
Stronicowanie w Linuksie
Linux jako standardową jednostkę alokacji pamięci przyjmuje bloki stroni-cowe 4 KB.
Upraszcza to działanie systemu:
• układ stronicowania automatycznie sprawdza, czy zaadresowana stronaznajduje się w pewnym bloku stronicowym
• każdy blok stronicowy może być chroniony na poziomie sprzętu za po-mocą flagi w pozycji tablicy stron, która na niego wskazuje
• wielkość 4 KB jest wielokrotnością rozmiaru bloku większości dysków,dzięki czemu transfer danych między pamięcią główną a dyskami jestefektywniejszy
Wielkość strony zależy od procesora. IA-64 dopuszcza stosowanie stron 4, 8, 16 i 64 KB.
Wykorzystanie pamięci 174
Pamięć wirtualna: stronicowanie na żądanie
• na początku wykonywania programu przestrzeń wirtualna procesu jestpusta (wszystkie strony są oznaczone w tablicy stron jako ’nieobecne’)
• w trakcie wykonywania programu pojawia się adres do strony, którejnie ma w pamięci fizycznej, co powoduje wygenerowanie przez CPUodpowiedniego sygnału, tzw. błędu strony (page fault)
• jądro uruchamia procedurę obsługi błędu strony, tzn. przydziela nowąrakę strony, określa charakter strony, ładuje ją, uaktualnia tablicę stron
• sterowanie wraca do procesu, który wygenerował błąd
Wykorzystanie pamięci 175
Funkcja mmap pozwala na mapowanie pliku do pamięci w trybie MAP_SHARED,
MAP_PRIVATE, MAP_LOCKED.
Wykorzystanie pamięci 176
Pamięć wirtualna: pmap
Z procesem związana jest określona wirtualna przestrzeńadresowa, segment programu, danych, stosu.
# size /home/jkob/bin/x2dhftext data bss dec hex filename
429718 1075076 88841828 90346622 562947e /home/jkob/bin/x2dhf
Wykorzystanie pamięci 177
Pamięć wirtualna: pmap (cd)
# pmap 2810400110000 1204K r-x-- /lib/libc-2.4.so0023d000 8K r-x-- /lib/libc-2.4.so0023f000 4K rwx-- /lib/libc-2.4.so00240000 12K rwx-- [ anon ]...007d1000 12K rwx-- [ anon ]00988000 100K r-x-- /lib/ld-2.4.so009a1000 4K r-x-- /lib/ld-2.4.so009a2000 4K rwx-- /lib/ld-2.4.so...00d34000 44K r-x-- /lib/libgcc_s-4.1.1-20070108.so.100d3f000 4K rwx-- /lib/libgcc_s-4.1.1-20070108.so.108048000 420K r-x-- /home/jkob/bin/x2dhf080b1000 1052K rw--- /home/jkob/bin/x2dhf081b8000 86760K rw--- [ anon ]0f24f000 132K rw--- [ anon ]b7eec000 8K rw--- [ anon ]b7f05000 12K rw--- [ anon ]bf8ca000 84K rw--- [ stack ]
Wykorzystanie pamięci 178
Pamięć wirtualna: pmap (cd)
# pmap.pl -u m 281041.0625 M 1204K r-x-- /lib/libc-2.4.so2.2383 M 8K r-x-- /lib/libc-2.4.so2.2461 M 4K rwx-- /lib/libc-2.4.so2.2500 M 12K rwx-- [ anon ]...7.8164 M 12K rwx-- [ anon ]9.5312 M 100K r-x-- /lib/ld-2.4.so9.6289 M 4K r-x-- /lib/ld-2.4.so9.6328 M 4K rwx-- /lib/ld-2.4.so...13.2031 M 44K r-x-- /lib/libgcc_s-4.1.1-20070108.so.113.2461 M 4K rwx-- /lib/libgcc_s-4.1.1-20070108.so.1128.2812 M 420K r-x-- /home/jkob/projects/2dhf-06/bin/x2dhf128.6914 M 1052K rw--- /home/jkob/projects/2dhf-06/bin/x2dhf129.7188 M 86760K rw--- [ anon ]242.3086 M 132K rw--- [ anon ]2942.9219 M 8K rw--- [ anon ]2943.0195 M 12K rw--- [ anon ]3064.7891 M 84K rw--- [ stack ]
Wykorzystanie pamięci 179
Pamięć wirtualna: wiązanie adresów
• Kompilator wiąże adresy symboliczne z adresami bezwzględnymi lubwzględnymi (przenaszalnymi, relokowalnymi), tj. adresami liczonymiwzględem początku danego bloku (modułu) programu.
Kompilator może tworzyć kod wynikowy z adresami bezwględnymi(np. pliki .COM w systemie MS-DOS).
• Program łączący/ładujący wiąże adresy względne z adresami bez-względnymi.
• Ładowanie dynamiczne – podprogram jest wprowadzany do pamięcidopiero wówczas, kiedy jest potrzebny (został wywołany).
Wykorzystanie pamięci 180
Pamięć wirtualna: wiązanie adresów (cd)
• Łączenie dynamiczne (dotyczy głównie) bibliotek systemowych powo-duje odroczenie łączenia do czasu konieczności odwołania się do danejfunkcji bibliotecznej (w odpowiednim miejscu kodu programu umiesz-cza się zakładkę do tej funkcji).
Wiele programów może korzystać z jednej kopii podprogramu biblio-tecznego.
Łączenie dynamiczne ułatwia poprawianie błędów systemowych; wa-dliwe podprogramy biblioteczne można zastępować nowymi wersjami(ldconfig -p, ldconfig -v).
System z bibliotekami dzielonymi umożliwia programom korzystanie z wie-lu wersji bibliotek (nowe programy mogą korzystać z nowszych, zmienio-nych bibliotek).
Optymalizacja procesu łączenia poprzez użycie programu prelink.
Wykorzystanie pamięci 181
Pamięć wirtualna: wiązanie adresów (cd)
NAMEprelink - prelink ELF shared libraries and binaries to speed upstartup time
SYNOPSISprelink [OPTION...] [FILES]
DESCRIPTIONprelink is a program which modifies ELF shared libraries andELF dynamically linked binaries, so that the time which dynamiclinker needs for their relocation at startup significantlydecreases and also due to fewer relocations the run-time memoryconsumption decreases too (especially number of unshareablepages). Such prelinking information is only used if all itsdependant libraries have not changed since prelinking,otherwise programs are relocated normally.
Wykorzystanie pamięci 182
Pamięć wirtualna: wiązanie adresów (cd)
NAMEld.so, ld-linux.so* - dynamic linker/loader
DESCRIPTIONThe programs ld.so and ld-linux.so* find and load the sharedlibraries needed by a program, prepare the program to run, andthen run it.
Linux binaries require dynamic linking (linking at run time)unless the -static option was given to ld during compilation.
Szczegółowe informacje o pracy programu łączącego można uzyskać po-przez ustawienie odpowiednich wartości zmiennych środowiskowych, np.
setenv LD_DEBUG all|statistics|helpsetenv LD_DEBUG_OUTPUT plik
Wykorzystanie pamięci 183
Pamięć wirtualna: struktura plików ELF43
NAMEreadelf - Displays information about ELF files.
SYNOPSISreadelf [-a|--all]
[-h|--file-header][-l|--program-headers|--segments][-S|--section-headers|--sections]...elffile...
DESCRIPTIONreadelf displays information about one or more ELF formatobject files. The options control what particular informationto display. elffile... are the object files to be examined.32-bit and 64-bit ELF files are supported, as are archivescontaining ELF files. This program performs a similar functionto objdump but it goes into more detail and it exists
43patrz także: pakiet elfutils (eu-size, eu-nm, eu-ojdump, eu-readelf, itp.)
Wykorzystanie pamięci 184
independently of the BFD library, so if there is a bug in BFDthen readelf will not be affected.
Wykorzystanie pamięci 185
Pamięć wirtualna: zalety
• jednocześnie może być wykonywanych wiele programów
• przestrzenie adresowe poszczególnych procesów są od siebie izolowane(proces może czytać i zapisywać tylko swoje dane)
• możliwe jest wykonywanie programów większych niż dostępna pamięćfizyczna
• procesy mogą wykonywać programy, których kod jest ładowany do pa-mięci tylko częściowo
• każdy proces może uzyskać dostęp do części dostępnej pamięci fizycznej
• procesy mogą współdzielić w pamięci pojedynczy obraz biblioteki, pro-gramu
• programy są relokowalne
• można tworzyć kod niezależny od urządzenia
Wykorzystanie pamięci 186
Pamięć wirtualna: efektywność systemu
W celu przyspieszenia działania systemu stosuje się:
• pamięć podręczną stron (page cache), która zawiera strony pro-gramów pobierane z urządzenia blokowego wskutek działania stroni-cowania na żądanie oraz bloki dyskowe powiązane z pobieranymi lubzapisywanymi na dysku danymi (przyspieszenie dostępu do obrazu pro-gramu i danych)
• pamięć podręczna buforów (buffer cache), która zawiera metadanezwiązane z pobieranymi lub zapisywanymi blokami dyskowymi (przy-spieszenie operacji dyskowych)
• pamięć podręczna wymiany (swap cache), która służy do zapisy-wania brudnych stron, które muszą być usunięte z pamięci
Od wersji 2.4 jądro Linuksa zawiera ujednoliconą pamięć podręczną stron, tj. pamięć
podręczna buforów jest implementowana poprzez pamięć podręczną stron. Bufory opisują
odwzorowanie bloku na stronę pamięci, która znajduje się w pamięci podręcznej stron.
Wykorzystanie pamięci 187
Wykorzystanie pamięci 188
Pamięć wirtualna: vmstat -s[root@scobie ~/bin]# vmstat -s
507192 total memory495424 used memory269980 active memory133140 inactive memory11768 free memory13968 buffer memory175724 swap cache594396 total swap286172 used swap308224 free swap.....................17086859 pages paged in16780572 pages paged out461317 pages swapped in406129 pages swapped out
Active memory, to pamięć używana przez procesy. Inactive memory, to pa-mięć przypisana procesom, ale przez jakiś czas nieużywana; jądro dokonujeprzeglądu stron i strony nieużywane są przenoszone z listy stron aktywnychi dodawane do listy stron nieaktywnych.
Wykorzystanie pamięci 189
Pamięć wirtualna: /proc/meminfo (x86)44
# cat /proc/meminfoMemTotal: 507192 kB Slab: 22892 kBMemFree: 10824 kB SReclaimable: 13320 kBBuffers: 15528 kB SUnreclaim: 9572 kBCached: 174036 kB PageTables: 5544 kBSwapCached: 134040 kB NFS_Unstable: 0 kBActive: 271940 kB Bounce: 0 kBInactive: 132236 kB CommitLimit: 847992 kBHighTotal: 0 kB Committed_AS: 778188 kBHighFree: 0 kB VmallocTotal: 516088 kBLowTotal: 507192 kB VmallocUsed: 5712 kBLowFree: 10824 kB VmallocChunk: 510128 kBSwapTotal: 594396 kB HugePages_Total: 0SwapFree: 308228 kB HugePages_Free: 0Dirty: 112 kB HugePages_Rsvd: 0Writeback: 0 kB Hugepagesize: 4096 kBAnonPages: 209812 kBMapped: 46212 kB----------------------------------------------------------
CommitLimit=OverCommitLimit Committed_AS=Amount of memory committed
44patrz: linux/Documentation/filesystems/proc.txt
Wykorzystanie pamięci 190
Pamięć wirtualna: /proc/meminfo (x86 64)
# cat /proc/meminfoMemTotal: 3091896 kB Slab: 525924 kBMemFree: 138804 kB CommitLimit: 5738872 kBBuffers: 650780 kB Committed_AS: 1329012 kBCached: 1260800 kB PageTables: 12220 kBSwapCached: 0 kB VmallocTotal: 34359738367 kBActive: 1267168 kB VmallocUsed: 3292 kBInactive: 1128444 kB VmallocChunk: 34359735031 kBHighTotal: 0 kB HugePages_Total: 0HighFree: 0 kB HugePages_Free: 0LowTotal: 3091896 kB HugePages_Rsvd: 0LowFree: 138804 kB Hugepagesize: 2048 kBSwapTotal: 4192924 kBSwapFree: 4192824 kBDirty: 2096 kBWriteback: 0 kBMapped: 523592 kB
Wykorzystanie pamięci 191
Pamięć wirtualna: /proc/meminfo (cd)45
Poziom zobowiązania systemu spełniania żądań przydziału pamięci (viamalloc()) jest regulowany przez dwie zmienne jądra:overcommit_memory-----------------Controls overcommit of system memory, possibly allowing processesto allocate (but not use) more memory than is actually available.
0 - Kernel attempts to estimate the amount of free memory leftwhen userspace requests more memory.Heuristic overcommit handling. Obvious overcommits of addressspace are refused. Used for a typical system. It ensures aseriously wild allocation fails while allowing overcommit toreduce swap usage. root is allowed to allocate slightly morememory in this mode. This is the default.
1 - Kernel pretends there is always enough memory until itactually runs out.Always overcommit. Appropriate for some scientific applications.
45Patrz pliki filesystem/proc.txt, sysctl/vm.txt oraz vm/overcommit-accounting z kata-logu linux/Documentation/
Wykorzystanie pamięci 192
Pamięć wirtualna: /proc/meminfo (cd)
2 - Kernel uses a "never overcommit" policy that attempts to preventany overcommit of memory.
The total address space commit for the system is not permitted toexceed swap plus a configurable percentage (default is 50) ofphysical RAM. Depending on the percentage you use, in mostsituations this means a process will not be killed whileattempting to use already-allocated memory but will receive errorson memory allocation as appropriate.
overcommit_ratio----------------Percentage of physical memory size to include in overcommit calculations.
Memory allocation limit = swapspace + physmem * (overcommit_ratio / 100)
Zmiana parametrów:sysctl -w vm.overcommit_memory=2sysctl -w vm.overcommit_ratio=50
Wykorzystanie pamięci 193
Pamięć wirtualna: HugePages46
W przypadku aplikacji, które korzystają z dużych ilości pamięci zastosowa-nie stron wielkości np. 4 KB nie jest efektywne. Potrzeba 262 144 pozycjiw tablicy stron, żeby proces mógł korzystać z 1 GB pamięci w 4 KB stro-nach. Jeśli adresy są 8-bajtowe, to trzeba 2 MB do odwzorowania każdegoGB pamięci procesu.
Współczesne procesory umożliwiają stosowanie stron o różnej wielkości(dla x84: 4 KB, 2 MB, 4 MB). Zastosowanie stron 4 MB redukuje zużyciepamięci na tablice stron do 2 KB.
Zastosowanie dużych stron poprawia wydajność systemu zmniejszając zna-cząco liczbę chybień generowanych przez TLB.
Obsługę dużych stron można włączyć w czasie kompilacji jądra:File systems --->
Pseudo filesystems --->[*] HugeTLB file system support
46Patrz linux/Documentation/vm/hugetlbpage.txt
Wykorzystanie pamięci 194
Pamięć wirtualna: przestrzeń adresowa procesu
• Przestrzeń wirtualna każdego procesu w Linuksie jest podzielonana przestrzeń jądra oraz przestrzeń użytkownika.
• Rozmiar przestrzeni adresowej użytkownika jest określony przez zmien-ną TASK_SIZE (include/asm/processor.h), która domyślnie wynosi3 GB.
• Przestrzeń użytkownika jest związana z procesem (każdy procesma prywatną przestrzeń adresową), tzn. jest mapowana przez osob-ną tablicę stron.
• Przestrzeń jądra jest dzielona przez wszystkie procesy poprzez odwzo-rowywanie jej na górną część przestrzeni adresowej każdego procesu.
• W czasie wykonywania procesu w trybie użytkownika tylko przestrzeńużytkownika jest dostępna.
• W trybie jądra dostępna jest przestrzeń jądra i użytkownika.
Wykorzystanie pamięci 195
Pamięć wirtualna: przestrzeń adresowa procesu (cd)
Wykorzystanie pamięci 196
Pamięć wirtualna: pamięć wysoka
Processor type and features --->High Memory Support (off) --->
(X) off( ) 4GB( ) 64GB
Wykorzystanie pamięci 197
Pamięć wirtualna: struktura adresowa Linuksa/IA-64
Wykorzystanie pamięci 198
Pamięć wirtualna: struktura systemu47
47http://www.redhat.com/magazine/001nov04/features/vm/
Wykorzystanie pamięci 199
Pamięć wirtualna: strefy pamięci w architekturze x86
Strefa Opis Pamięć fizycznaZONE DMA strony nadające się do przesyłu DMA < 16 MBZONE NORMAL strony normalnie adresowane 16 – 896 MBZONE DMA32 strony nadające się do przesyłu DMA 896 – 4 GBZONE HIGHMEM strony odwzorowywane dynamicznie > 896 MB
Przestrzeń adresowa jądra wynosi 1 GB. Z tego obszaru 128 MB jest prze-znaczonych na struktury danych służące do obsługi pamięci wysokiej (seg-ment wykorzystywany przez funkcję kmap). Dlatego przestrzeń adresowajądra wynosi 896 MB (1024-128=896 MB).
Nowsze urządzenia wej/wyj (PCI) stosują adresację 32-bitową i dlategona potrzeby DMA można wykorzystać większy obszar pamięci.48
Część procesów jądra nie korzysta z przestrzeni wirtualnej (można to spraw-dzić przy pomocy komendy top).48Kernel http://lwn.net/2001/0607/kernel.php3
Wykorzystanie pamięci 200
Pamięć wirtualna: system biźniaków49
49A.Tanenbaum, Operating Systems, Prentice-Hall 1992, str. 86
Wykorzystanie pamięci 201
Pamięć wirtualna: system biźniaków50
Przydział/odzyskiwanie fizycznie ciągłych obszarów pamięci w ramach róż-nych stref odbywa się wg (leniwego) algorytmu bliźniaków.
Zawartość pliku /proc/buddyinfo
• system x86: 0.5 GB
2^0 2^1 2^2 2^3 2^4 2^5 2^6 2^7 2^8 2^9 2^10Node 0, zone DMA 225 27 8 2 1 1 1 1 1 0 0Node 0, zone Normal 396 1001 87 6 3 1 1 1 0 1 0
• system x86: 2 GB
2^0 2^1 2^2 2^3 2^4 2^5 2^6 2^7 2^8 2^9 2^10Node 0, zone DMA 79 27 105 37 15 3 1 1 1 1 0Node 0, zone Normal 4959 511 211 458 22 1 0 0 0 0 1Node 0, zone HighMem 1386 278 730 8 15 1 1 0 0 0 0
50Patrz linux/Documentation/filesystems/proc.txt
Wykorzystanie pamięci 202
Pamięć wirtualna: system biźniaków (cd)
Zawartość pliku /proc/buddyinfo
• system x86 64: 3 GB
2^0 2^1 2^2 2^3 2^4 2^5 2^6 2^7 2^8 2^9 2^10Node 0, zone DMA 2 4 2 1 2 1 1 0 1 1 2Node 0, zone DMA32 9899 6614 365 26 5 1 0 1 0 1 1
• system x86 64: 8 GB
2^0 2^1 2^2 2^3 2^4 2^5 2^6 2^7 2^8 2^9 2^10Node 0, zone DMA 4 4 2 3 3 2 1 0 1 0 0Node 0, zone DMA32 21 4 2 1365 4350 3104 48 8 0 2 1Node 1, zone Normal 73 12 3 1274 1490 292 144 97 16 1 1
Wykorzystanie pamięci 203
Pamięć wirtualna: alokator płytowy
Alokator płytowy pojawił się po raz pierwszy w systemie operacyjnym So-laris 2.451
Własności:
• obszary pamięci są traktowane jak obiekty
• obiekty alokowane, a następnie zwalnione nie są usuwane, ale przechowywane w pa-mięci w celu późniejszego wykorzystania przez jądro, gdyż jądro często potrzebujeobszarów pamięci tego samego typu (tworzenie i usuwanie obiektu są często bardziejkosztowne niż przydział pamięci)
• obiekty tego samego typu przechowywane są w odpowiednich pamięciach podręcz-nych (płytach)
• maleje fragmentacja wewnętrzna i zewnętrzna
Alokator płytowy jest odpowiedzialny za przydział pamięci, inicjowanie obiektów/struktur
danych, ich wykorzystanie, usuwanie i zwalnianie pamięci.
51http://citeseer.ist.psu.edu/bonwick94slab.html
Wykorzystanie pamięci 204
Pamięć wirtualna: alokator płytowy (cd)
Zawartość pliku /proc/slabinfoslabinfo - version: 2.1# name <active_objs> <num_objs> <objsize> <objperslab> <pagesperslab> : tunables ...cifs_small_rq 30 36 448 9 1 : tunables ...cifs_request 4 4 16512 1 8 : tunables ...cifs_oplock_structs 0 0 32 113 1 : tunables ...cifs_mpx_ids 3 59 64 59 1 : tunables ...cifs_inode_cache 0 0 452 8 1 : tunables ...fib6_nodes 7 113 32 113 1 : tunables ...ip6_dst_cache 7 15 256 15 1 : tunables ...ndisc_cache 1 20 192 20 1 : tunables ...RAWv6 4 5 768 5 1 : tunables ...UDPv6 1 11 704 11 2 : tunables ...tw_sock_TCPv6 0 0 128 30 1 : tunables ...request_sock_TCPv6 0 0 128 30 1 : tunables ...TCPv6 3 5 1408 5 2 : tunables ...ip_fib_alias 13 113 32 113 1 : tunables ...ip_fib_hash 13 113 32 113 1 : tunables ......
Pracę alokatora płytowego można śledzić przy pomocy programu slabtop.
Wykorzystanie pamięci 205
Pamięć wirtualna: /proc/PID/status
# cat /proc/28104/status...VmPeak: 90124 kBVmSize: 90124 kBVmLck: 0 kBVmHWM: 740 kBVmRSS: 8 kBVmData: 86940 kBVmStk: 84 kBVmExe: 420 kBVmLib: 1592 kBVmPTE: 48 kBStaBrk: 0d672000 kBBrk: 0f270000 kBStaStk: bf8dde90 kBExecLim: 080b1000
root@scobie ~/bin]# size ~jkob/2dhf/bin/x2dhftext data bss dec hex filename429718 1075076 88841828 90346622 562947e /home/jkob/2dhf/bin/x2dhf
Wykorzystanie pamięci 206
Pamięć wirtualna: ps
# ps -eo pid,vsz,rss,size,sz,stackp,maj_flt,min_flt,comm | grep x2dhf
PID VSZ RSS SZ SZ STACKP MAJFL MINFL COMMAND28104 90124 8 87024 22531 bf8dde90 7 251 x2dhf
size SZ approximate amount of swap space that would be required if theprocess were to dirty all writable pages and then beswapped out. This number is very rough!
sz SZ size in physical pages of the core image of the process. Thisincludes text, data, and stack space. Device mappingsare currently excluded; this is subject to change. Seevsz and rss.
stackp STACKP address of the bottom (start) of stack for the process.
Wykorzystanie pamięci 207
Pamięć wirtualna: sarNAME
sar - Collect, report, or save system activity information.SYNOPSIS
sar -B [ interval [ count ] ]
-B Report paging statistics. The following values are displayed:
pgpgin/sTotal number of kilobytes the system paged in fromdisk per second.
pgpgout/sTotal number of kilobytes the system paged out todisk per second.
fault/sNumber of page faults (major + minor) made by thesystem per second (post 2.5 kernels only). Thisis not a count of page faults that generate I/O,because some page faults can be resolved without I/O.
majflt/sNumber of major faults the system has made persecond, those which have required loading amemory page from disk (post 2.5 kernels only).
Wykorzystanie pamięci 208
Pamięć wirtualna: zastępowanie stron
Co robi jądro, kiedy zaczyna brakować wolnych ramek pamięci, a procesygenerują kolejne błędy stron?
Jądro wyszukuje stronę procesu, która nie była ostatnio używana, zapisujeją w pamięci wymiany (osobna partycja, specjalny plik wymiany) i zwol-nioną ramkę wykorzystuje do obsługi błędu strony.
Proces pożyczania strony od procesu i zapisywania jej na dysk jest określa-ny jako stronicowanie. Proces wykorzystywania do tego wszystkich stronprocesu jest zwany wymianą.
Którą strona powinna zostać wybrana do zapisania na dysku? Kiedy nale-ży zacząć pozyskiwać wolne ramki? Procedurę, która jest odpowiedzialnaza pozyskiwanie wolnych ramek określa się jako politykę zastępowania (re-placement policy). Linux stosuje algorytm LRU (Least Recently Used);wybierana jest strona, która nie była używana przez najdłuższy czas. Innesystemy stosują algorytm NRU (Not Recently Used).
Wykorzystanie pamięci 209
Pamięć wirtualna: równoważenie pamięci
Pozyskiwanie wolnych ramek jest komplikowane przez fakt, że wolne ramkijądro może pobierać z pamięci, która nie podlega wymianie, np. z pamięcipodręcznej stron lub buforów.
Jądro musi dysponować polityką równoważenia pamięci, która określa ja-ka część pamięci jest przeznaczana do przechowywanie stron programów,a jaka część na pamięć podręczną stron.
Linux wymaga, aby każda pozycja w tablicy stron miała dwa dodatkowebity zwane bitami dostępu i zabrudzenia (access and dirty bits).
Bit dostępu wskazuje, czy dana strona była używana od czasu ostatniegoczyszczenia bitu. Bit zabrudzenia określa, czy strona była modyfikowanaod czasu ostatniego wczytania.
Wykorzystanie pamięci 210
Pamięć wirtualna: stany strony pamięci52
52http://www.redhat.com/magazine/001nov04/features/vm/
Wykorzystanie pamięci 211
Pamięć wirtualna: równoważenie pamięci – kswapd
Wątek jądra kswapd regularnie sprawdza bit dostępu i bit zabrudzeniaczyszcząc przy okazji ten ostatni.
Jeśli kswapd stwierdza, że systemowi zaczyna brakować pamięci, to roz-poczyna usuwanie z pamięci stron, które nie były ostatnio używane. Jeślistrona ma ustawiony bit zabrudzenia, to zanim zostanie uwolniona jej za-wartość jest zapisywana w pamięci wymiany (ze względu na wydajnośćkswapd rozpoczyna od usuwania stron, które mają oba bity wyczyszczo-ne).
Parametr jądra vm.page-cluster (domyślna wartość 3) określa (jakopotęgę 2) liczbę stron, które są zapisywane/czytane w trakcie operacjiwymiany.
Aktualna wartość parametu: sysctl vm.page-clusterZmiana parametru: sysctl -w vm.page-cluster=4
Wykorzystanie pamięci 212
Pamięć wirtualna: równoważenie pamięci – swappiness53
Swappiness, which is exported to /proc/sys/vm/swappiness, is a pa-rameter which sets the kernel’s balance between reclaiming pages from thepage cache and swapping out process memory. The reclaim code works (ina very simplified way) by calculating a few numbers:
The distress value is a measure of how much trouble the kernel is ha-ving freeing memory. The first time the kernel decides it needs to startreclaiming pages, distress will be zero; if more attempts are required, thatvalue goes up, approaching a high value of 100.
mapped_ratio is an approximate percentage of how much of the system’stotal memory is mapped (i.e. is part of a process’s address space) withina given memory zone.
vm_swappiness is the swappiness parameter, which is set to 60 by default.
53LWN: corbet 2.6 swapping behavior
Wykorzystanie pamięci 213
Pamięć wirtualna: równoważenie pamięci – swappiness (cd)
With those numbers in hand, the kernel calculates its ”swap tendency”:
swap_tendency = mapped_ratio/2 + distress + vm_swappiness
If swap_tendency is below 100, the kernel will only reclaim page cachepages. Once it goes above that value, however, pages which are part of so-me process’s address space will also be considered for reclaim. So, if lifeis easy, swappiness is set to 60, and distress is zero, the system will notswap process memory until it reaches 80% of the total. Users who wo-uld like to never see application memory swapped out can set swappinessto zero; that setting will cause the kernel to ignore process memory untilthe distress value gets quite high.
Wykorzystanie pamięci 214
Pamięć wirtualna: równoważenie pamięci – swappiness (cd)Fragment pliku mm/vmscan.c:/** ‘distress’ is a measure of how much trouble we’re having reclaiming pages.* 0 -> no problems. 100 -> great trouble.*/distress = 100 >> min(zone->prev_priority, priority);/** The point of this algorithm is to decide when to start reclaiming mapped* memory instead of just pagecache. Work out how much memory is mapped.*/mapped_ratio = ((global_page_state(NR_FILE_MAPPED) +
global_page_state(NR_ANON_PAGES)) * 100) /vm_total_pages;
/** Now decide how much we really want to unmap some pages. The mapped ratio* is downgraded - just because there’s a lot of mapped memory doesn’t* necessarily mean that page reclaim isn’t succeeding.* The distress ratio is important - we don’t want to start going oom.* A 100% value of vm_swappiness overrides this algorithm altogether.*/swap_tendency = mapped_ratio / 2 + distress + sc->swappiness;if (swap_tendency >= 100) reclaim_mapped = 1;
Wykorzystanie pamięci 215
Pamięć wirtualna: równoważenie pamięci – pdflush
W ramach równoważenia pamięci wątek pdflush dokonuje okresowej in-spekcji stron znajdujących się w pamięci podręcznej stron
• kiedy liczba brudnych stron osiąga określoną wartość progową na dys-ku zapisywane są strony, które zawierają najstarsze zmiany (funkcjawb kupdate()). Jednorazowo zapisywanych jest MAX WRITEBACK -PAGES stron (domyślnie 1024).
• kiedy zmniejsza się ilość dostępnej wolnej pamięci operacyjnej odpo-wiednia liczba stron jest zapisywana na dysku i zwalniana (funkcjawakeup bdflush())
W jądrach <2.6 funkcje wątku pdflush pełniły demony bdflush orazkupdated.
Wykorzystanie pamięci 216
Pamięć wirtualna: równoważenie pamięci – pdflush (cd)
Pracę wątku pdflush regulują następujące parametry:54
• dirty background ratio – udział procentowy pamięci wolnejw łącznej pamięci, poniżej którego pdflush przeprowadza zapis stronzawierających nieutrwalone uaktualnienia
• dirty ratio – udział procentowy pamięci wolnej w łącznej pamięci,poniżej którego proces (sam piszący na dysku) rozpoczyna zapisywaniena dysku brudnych stron (wartość nie mniejsza niż 5)
• dirty expire centisecs – czas jaki upływa od momentu modyfi-kacji strony do czasu jej utrwalenia na dysku
• dirty writeback centisecs – czas pomiędzy kolejnymi pobudze-niami wątku pdflush, w celu utrwalania zmian; zaleca się, żeby
dirty expire centisecs
dirty writeback centisecs≈ 6
54 /usr/src/linux/Documentation/filesystems/proc.txt
Wykorzystanie pamięci 217
Pamięć wirtualna: równoważenie pamięci – pdflush (cd)
• nr pdflush threads – bieżąca liczba wątków pdflush pozostającado dyspozycji podsystemu pamięci wirtualnej; podsystem ten dyna-micznie zmienia liczbę wątków pdflush (MIN PDFLUSH THREADS=2,MAX PDFLUSH THREADS=8)
Komenda sysctl pozwala zmieniać parametry pracy jądra, w tym doty-czące pracy wątku pdflush.
Aktualne wartości parametrów: sysctl -a
vm.nr_pdflush_threads = 2vm.dirty_expire_centisecs = 3000vm.dirty_writeback_centisecs = 500vm.dirty_ratio = 40vm.dirty_background_ratio = 10
Zmiana parametru: sysctl -w vm.dirty_background_ratio=20
Wykorzystanie pamięci 218
Pamięć wirtualna: oom killer()55
Domyślnie jądro używa następujących wartości parametrów związanychz obsługą sytuacji out-of-memory (oom)
$ sysctl -a | grep oomvm.panic_on_oom = 0vm.oom_kill_allocating_task = 0vm.oom_dump_tasks = 0vm.would_have_oomkilled = 0
55patrz: linux/Documentation/filesystems/proc.txt, linux/Documentation/sysctl/vm.txt
Wykorzystanie pamięci 219
Pamięć wirtualna: oom killer() (cd)
• panic_on_oom – This enables or disables panic on out-of-memoryfeature.
If this is set to 0, the kernel will kill some rogue process by callingoom killer. Usually, oom killer can kill rogue processes and system willsurvive.
If this is set to 1, the kernel panics when out-of-memory happens.However, if a process limits using nodes by mempolicy/cpusets, andthose nodes become memory exhaustion status, one process may bekilled by oom-killer. No panic occurs in this case. Because other nodes’memory may be free. This means system total status may be not fatalyet.
If this is set to 2, the kernel panics compulsorily even on the above-mentioned.
The default value is 0. 1 and 2 are for failover of clustering. Pleaseselect either according to your policy of failover.
Wykorzystanie pamięci 220
• oom_dump_tasks – Enables a system-wide task dump (excluding ker-nel threads) to be produced when the kernel performs an OOM-killingand includes such information as pid, uid, tgid, vm size, rss, cpu,oom adj score, and name. This is helpful to determine why the OOMkiller was invoked and to identify the rogue task that caused it.
If this is set to zero, this information is suppressed. On very largesystems with thousands of tasks it may not be feasible to dump thememory state information for each one. Such systems should not beforced to incur a performance penalty in OOM conditions when theinformation may not be desired.
If this is set to non-zero, this information is shown whenever the OOMkiller actually kills a memory-hogging task.
Wykorzystanie pamięci 221
Pamięć wirtualna: oom killer() (cd)
• oom_kill_allocating_task – This enables or disables killing theOOM-triggering task in out-of-memory situations.
If this is set to zero, the OOM killer will scan through the entire tasklistand select a task based on heuristics to kill. This normally selects arogue memory-hogging task that frees up a large amount of memorywhen killed.
If this is set to non-zero, the OOM killer simply kills the task that trig-gered the out-of-memory condition. This avoids the expensive tasklistscan.
If panic on oom is selected, it takes precedence over whatever value isused in oom kill allocating task.
Wykorzystanie pamięci 222
Pamięć wirtualna: oom killer() (cd)
• /proc/<pid>/oom_score – Display current oom-killer score. Thisfile can be used to check the current score used by the oom-killer isfor any given <pid>. Use it together with /proc/<pid>/oom_adj totune which process should be killed in an out-of-memory situation.
• /proc/<pid>/oom_adj - Adjust the oom-killer score. This file can beused to adjust the score used to select which processes should be killedin an out-of-memory situation. Giving it a high score will increase thelikelihood of this process being killed by the oom-killer. Valid valuesare in the range -16 to +15, plus the special value -17, which disablesoom-killing altogether for this process.
Wykorzystanie pamięci 223
Pamięć wirtualna: SysV IPC56
NAMEipcs - report XSI interprocess communication facilities status
SYNOPSISipcs [-asmq] [-tclup]
DESCRIPTIONThe ipcs utility shall write information about activeinterprocess communication facilities.
Without options, information shall be written in short formatfor message queues, shared memory segments, and semaphore setsthat are currently active in the system. Otherwise, theinformation that is displayed is controlled by the optionsspecified.
XSI – X/Open System Interface, part of the X/Open Common Applications Environment56System V InterProcess Communication
Wykorzystanie pamięci 224
Pamięć wirtualna: SysV IPC (cd)
# ipcs
------ Shared Memory Segments --------key shmid owner perms bytes nattch status0x25f387d1 229376 jkob 600 384 30x4ee6bfba 262145 jkob 600 131072 20x3eeacf91 294914 jkob 600 384 20x580e96c7 98307 jkob 600 1 00x00000000 58556421 root 644 110592 2 dest0x00000000 58589190 root 644 110592 2 dest
------ Semaphore Arrays --------key semid owner perms nsems0x3db16471 0 jkob 600 10x39747761 32769 jkob 600 1
------ Message Queues --------key msqid owner perms used-bytes messages
Wykorzystanie pamięci 225
Pamięć wirtualna: SysV IPC (cd)
# ipcs -u------ Shared Memory Status --------segments allocated 63pages allocated 787pages resident 629pages swapped 0Swap performance: 0 attempts 0 successes
------ Semaphore Status --------used arrays = 2allocated semaphores = 2
------ Messages: Status --------allocated queues = 0used headers = 0used space = 0 bytes
Wykorzystanie pamięci 226
Pamięć wirtualna: SysV IPC (cd)
Wynik działania komendy ipcs -l dla architektury 32- i 64-bitowej
86# ipcs -l 86_64# ipcs -l------ Shared Memory Limits -------- ----- Shared Memory Limits --------max number of segments = 4096 max number of segments = 4096max seg size (kbytes) = 32768 max seg size (kbytes) = 7812500max total shared memory (kbytes) = 8388608 max total shared memory (kbytes) = 8388608min seg size (bytes) = 1 min seg size (bytes) = 1
------ Semaphore Limits -------- ------ Semaphore Limits --------max number of arrays = 128 max number of arrays = 128max semaphores per array = 250 max semaphores per array = 250max semaphores system wide = 32000 max semaphores system wide = 32000max ops per semop call = 32 max ops per semop call = 32semaphore max value = 32767 semaphore max value = 32767
------ Messages: Limits -------- ------ Messages: Limits --------max queues system wide = 16 max queues system wide = 16max size of message (bytes) = 8192 max size of message (bytes) = 8192default max size of queue (bytes) = 16384 default max size of queue (bytes) = 16384
Wykorzystanie pamięci 227
Pamięć wirtualna: SysV IPC (cd)
Przykład działania komendy ipcs -m
# ipcs -m -c------ Shared Memory Segment Creators/Owners --------shmid perms cuid cgid uid gid229376 600 jkob jkob jkob jkob262145 600 jkob jkob jkob jkob...
# ipcs -m -p----- Shared Memory Creator/Last-op --------shmid owner cpid lpid229376 jkob 2470 6968262145 jkob 2470 6968...
----- Shared Memory Attach/Detach/Change Times --------shmid owner attached detached changed229376 jkob May 4 22:09:00 May 4 22:09:00 May 4 21:23:54262145 jkob May 4 22:09:00 May 4 22:09:00 May 4 21:23:54...
Wykorzystanie pamięci 228
Pamięć wirtualna: SysV IPC (cd)
Konfigurowalne parametry jądra (i ich domyślne wartości dla jądra 2.6.19-1.2288.fc5) określające działanie systemu IPC:
kernel.sem = 250 32000 32 128kernel.msgmnb = 16384kernel.msgmni = 16kernel.msgmax = 8192kernel.shmmni = 4096kernel.shmall = 2097152kernel.shmmax = 33554432
semmni określa maksymalną liczbę zbiorów semaforów, które system możewykorzystywać. Przy inicjacji jądro tworzy semmni wskaźników do strukturidentyfikujących semafory (wskaźnik jest długości 44 B, a struktura - 66).
msgmni określa maksymalną liczbę kolejek wiadomości, które system możewykorzystywać. Przy inicjacji jądro tworzy msgmni wskaźników do strukturidentyfikujących kolejki (wskaźnik jest długości 44 B, a struktura - 96). Dla
Wykorzystanie pamięci 229
systemów obsługujących bazy danych ta wartość powinna być co najmniejrówna 128.aa
Wykorzystanie blokowych urządzeń I/O 230
Wykorzystanie dysków
• Wirtualny system plików (VFS)
• Blokowy system wejścia/wyjścia: planiści
• Systemy plików (z kroniką); porównanie
Obsługa blokowych urządzeń wejścia/wyjścia ma zasadniczy wpływna funkcjonowanie systemu operacyjnego.
Wykorzystanie blokowych urządzeń I/O 231
Wirtualny system plików57
57Jonathan Corbet, Alessandro Rubini and Greg Kroah-Hartman, Linux Device Drivers
Wykorzystanie blokowych urządzeń I/O 232
Wirtualny system plików (cd)58
VFS pozwala aplikacjom klienckim na jednolity dostęp do wielu różnych systemów plików.
58http://sunsite.nus.sg/LDP/LDP/tlk/node102.html
Wykorzystanie blokowych urządzeń I/O 233
Wirtualny system plików (cd)59
59http://www.gelato.org/pdf/apr2006/gelato ICE06apr blktrace brunelle hp.pdf
Wykorzystanie blokowych urządzeń I/O 234
Obsługa urządzenia blokowego
• sektor (sektor sprzętowy, blok sprzętowy) – najmniejsza adresowwalnajednostka urządzenia sprzętowego
• blok (blok systemu plików) – najmniejsza adresowalna jednostka syste-mu plików
• bufor – obszar pamięci operacyjnej służący do przechowywania bloków
Bufor reprezentuje blok dyskowy w pamięci (i nie jest większy od stronypamięci). Z każdym buforem jest związany deskryptor zwany nagłów-kiem bufora (buffer head), który odwzorowuje blok dyskowy na buforpamięciowy.
W wersjach jądra wcześniejszych niż 2.6 nagłówek bufora był dla jądratakże jednostką operacji wejścia-wyjścia (przechowywał dane przesyła-ne z/na dysk).
Wykorzystanie blokowych urządzeń I/O 235
Obsługa urządzenia blokowego (cd)
Wady nagłówków buforów:
1. duża, nieporęczna i nieefektywna struktura danych
2. opisują pojedyncze bufory; jeśli dane obejmują wiele bloków, to musząbyć dzielone na wiele struktur odpowiadających poszczególnym bufo-rom
Od wersji jądra 2.5 podstawowym nośnikiem operacji wejścia-wyjścia w ra-mach kodu jądra jest struktura bio.
Struktura bio zawiera wskaźnik na tablicę struktur (bio vec), której po-szczególne elementy zawierają dane dotyczące poszczególnych segmentówdanej operacji wejścia-wyjścia (określone przez page, offset, len).
Takie podejście pozwala łatwo śledzić stan operacji wejścia-wyjścia oraz ła-two dzielić strukturę bio w przypadku obsługi takich urządzeń jak macierzedyskowe.
Wykorzystanie blokowych urządzeń I/O 236
Struktura bio60
60R.Love, Linux kernel. Przewodnik programisty, Helion 2004
Wykorzystanie blokowych urządzeń I/O 237
Struktura bio (cd)61
Zalety stosowania struktury bio w stosunku do buffer head :
• struktura bio operuje stronami fizycznymi (a nie wskaźnikami logicz-nymi), więc dobrze nadaje się do reprezentowania pamięci wysokiej
• struktura bio nadaje się do obsługi operacji wejścia-wyjścia w trybiebezpośrednim, tj. bez wykorzystywania pamięci podręcznej stron
• struktura bio ułatwia realizację blokowych operacji wejścia-wyjściaz rozproszonym źródłem (dane pochodzą z wielu różnych stron fizycz-nych pamięci)
• obsługa struktury bio jest mniej skomplikowana, niż struktury bufferhead
Nagłówki buforów są nadal niezbędne do odwzorowywania bloków dysko-wych na fizyczne strony pamięci.61patrz: Documentation/block/biodoc.txt
Wykorzystanie blokowych urządzeń I/O 238
Kolejki zleceń
Urządzenia blokowe utrzymują kolejki zleceń, w których umieszczane sązlecenia blokowych operacji wejścia-wyjścia oczekujących na realizację. Takdługo jak kolejka nie jest pusta urządzenie blokowe pobiera z jej czołakolejne zlecenia.
Każde zlecenie może składać się z jednej lub wielu struktur bio, ponieważjedno zlecenie może obejmować operacje angażujące wiele sąsiadującychbloków dyskowych (wymaganie ciągłości dotyczy bloków dyskowych, a nieciągłości odpowiadających im ramek pamięci).
Pozycjonowanie głowicy dysku czyni operacje dyskowe wolnymi, więc zle-cenia nie są obsługiwane w trybie FIFO.
Wykorzystanie blokowych urządzeń I/O 239
Planista wejścia-wyjścia
Planista operacji wejścia-wyjścia (I/O scheduler), to podsystem jądra za-wiadujący operacjami przyspieszającymi wykonywanie operacji na urządze-niach blokowych poprzez ich scalanie i sortowanie.
Planista operacji I/O rozdziela zasoby w postaci dyskowych operacji I/Opomiędzy oczekujące na realizację zlecenia.
Scalanie zleceń polega na łączeniu zleceń, które obejmują pobieranie (za-pis) danych z tych samych bądź sąsiadujących ze sobą sektorów.
Sortowanie zleceń polega na takim ich uporządkowania, aby kolejne zlece-nia dotyczyły blisko siebie położonych sektorów. Celem planisty I/O jestnie tylko minimalizacja przesunięć głowicy, ale także minimalizacją łącznejdługości przesunięć głowicy.
Wykorzystanie blokowych urządzeń I/O 240
Rodzaje planistów wejścia-wyjścia
• winda Linusa (Linus Elevator); domyślny planista do wersji 2.4Działanie:
1. (jeśli to możliwe) scalanie zlecenia nowego z którymś ze zleceń z ko-lejki (scalanie frontowe i tylne)
2. jeśli w kolejce znajduje się dostatecznie stare zlecenie, to nowe zle-cenie jest umieszczane na końcu kolejki
3. przy braku przeterminowanych zleceń następuję próba umieszcze-nia zlecenia w takim miejscu kolejki, żeby sektory nowego zleceniaznalazły się na trasie głowicy pomiędzy sektorami zleceń: poprze-dzającego i następnego w kolejce
4. przy braku odpowiedniego miejsca nowe zlecenie jest umieszczanena końcu kolejki
Problemy: głodzenie zleceń oraz problem zdominowania zapisu przezodczyt (operacje zapisu są asynchroniczne, a odczytu synchronicznewzględem inicjującego operację procesu).
Wykorzystanie blokowych urządzeń I/O 241
Rodzaje planistów wejścia-wyjścia62
• noop (No Operation I/O Scheduler)
dostępie swobodnym (pamięci flash).63 Nadchodzące żądania odczy-tu/zapisu są przechowywane w porządku FIFO (tylko bieżące żądaniedodawane na koniec kolejki jest sprawdzane pod kątem możliwości sca-lenia). Dla proces, który wykonuje operację sekwencyjnego odczytu,dostęp do urządzenia blokowego wygląda na “przypadkowy”.
62http://donami.com/118, http://www.redhat.com/magazine/008jun05/features/schedulers/63Wg Coly Li, File System Performance Tuning for Gdium (http://seminar.oss.org.tw/-fhec/download/File%20System%20Performance%20Tuning%20for%20Gdium Coly%20Li.pdf)sprawa nie wygląda tak prosto.
Wykorzystanie blokowych urządzeń I/O 242
Rodzaje planistów wejścia-wyjścia (cd)
• przewidujący (Anticipatory I/O Scheduler)
Planista wykorzystujący fakt, że proces często pobiera dane znajdują-ce się na sąsiednich sektorach (systemy plików są tak konstruowane,żeby sektory należące do jednego pliku leżały blisko siebie). Procesużytkownika często śpi przez chwilę między kolejnymi odczytami.
Planista przewiduje kolejne żądania odczytu następujące po okresieuśpienia i dlatego wydłuża czas (o kilka ms) pozostawania głowicyw miejscu ostatniego odczytu (zanim przejdzie do realizowania żądańzapisu). Dzięki temu zmniejszeniu ulegają ruchy głowicy.
Czas oczekiwania zależy od rodzaju kolejnego zlecenia oczekującegow kolejce lub od analizy danych statystycznych.
Planista przewidujący nie nadaje się do obsługi zadań, które silnie za-leżą od terminowego wykonywania operacji odczytu/zapisu.
Wykorzystanie blokowych urządzeń I/O 243
Rodzaje planistów wejścia-wyjścia (cd)
• terminowy (Deadline I/O Scheduler)
Planista zapewniający realizację zleceń odczytu/zapisu w ściśle okre-ślonej ilości czasu, przy faworyzowaniu zleceń odczytu nad zleceniamizapisu (minimalizacja opóźnień jest ważniejsza od maksymalizowaniaprzepustowości).
Planista nie dopuszcza do głodzenia zleceń zapisu.
Wykorzystuje trzy kolejki: posortowaną, FIFO zleceń zapisu, FIFO zle-ceń odczytu.
Nadaje się dla mocno obciążonych serwerów plików i wydajnych urzą-dzeń wejścia/wyjścia (jego zastosowanie negatywnie wpływa na inte-raktywność systemu)
Wykorzystanie blokowych urządzeń I/O 244
Rodzaje planistów wejścia-wyjścia (cd)
• CFQ (Completely Fair Queueing I/O Scheduler)
Planista próbujący zagwarantować równomierną przepustowość w do-stępie do danego urządzenia blokowego różnym korzystającym z niegoprocesom.
Zlecenia odczytu/zapisu pochodzące od różnych procesów są dzielonena klasy, przypisywane są im priorytety oraz przydzielane kwanty czasu.
Planista CFQ faworyzuje zlecenia synchroniczne (w stosunku do asyn-chronicznych) przydzielając na ich realizację więcej czasu i wyższy prio-rytet.
Domyślny planista dla najnowszych jąder.
Wykorzystanie blokowych urządzeń I/O 245
Wybór planisty wejścia-wyjścia64
Block layer --->--- Enable the block layer
IO Schedulers ---><*> Anticipatory I/O scheduler<*> Deadline I/O scheduler<*> CFQ I/O schedulerDefault I/O scheduler (CFQ) --->( ) Anticipatory( ) Deadline(X) CFQ( ) No-op
64patrz: Documentation/block/switching-sched.txt
Wykorzystanie blokowych urządzeń I/O 246
Wybór planisty wejścia-wyjścia (cd)
Wyboru planisty można dokonać w czasie uruchamiania systemu przezużycie parametruelevator=[noop|deadline|anticipatory|cfq]
W czasie działania systemu można uzyskać listę planistów wspieranychprzez jądro, a także możliwa jest zmiana planisty dla konkretnego urzą-dzenia blokowego.
# cat /sys/block/sda/queue/schedulernoop anticipatory deadline [cfq]
# echo anticipatory > /sys/block/sda/queue/scheduler
# cat /sys/block/sda/queue/schedulernoop [anticipatory] deadline cfq
Wykorzystanie blokowych urządzeń I/O 247
Dostrajanie planistów wejścia-wyjścia
Działanie planistów operacji wejścia-wyjścia jest określane przez parametry,których bieżące wartości można znaleźć w katalogu /sys.
Dla planisty cfq mamy:/sys/block/sda/queue/iosched/quantum/sys/block/sda/queue/iosched/fifo_expire_sync/sys/block/sda/queue/iosched/fifo_expire_async/sys/block/sda/queue/iosched/back_seek_max/sys/block/sda/queue/iosched/back_seek_penalty/sys/block/sda/queue/iosched/slice_sync/sys/block/sda/queue/iosched/slice_async/sys/block/sda/queue/iosched/slice_async_rq/sys/block/sda/queue/iosched/slice_idle
Wykorzystanie blokowych urządzeń I/O 248
Dostrajanie planisty przewidującego65
• antic_expire – czas (domyślnie 6 ms) oczekiwania przez planistę na nadej-
ście kolejnego zlecenia odczytu z pobliskich sektorów dysku (wartość zero oznacza,
że planista przewidujący zamienia się w terminowego)
• read_expire – maksymalny czas przetrzymywania zlecenia czytania w kolejce
(domyślnie 125 ms); po przekroczeniu tego czasu zlecenie jest przenoszone do kolejki
zleceń przedawnionych i jest niezwłocznie kierowane do realizacji
• write_expire – maksymalny czas przetrzymywania zlecenia pisania w kolejce
(domyślnie 250 ms)
• read_batch_expire – czas obsługi zleceń czytania (domyślnie 500 ms); po
upływie tego czasu obsługiwane są zlecenia pisania
• write_batch_expire – czas obsługi zleceń pisania (domyślnie 125 ms); po
upływie tego czasu obsługiwane są zlecenia pisania
65patrz: Documentation/block/as-iosched.txt
Wykorzystanie blokowych urządzeń I/O 249
Dostrajanie planisty przewidującego (cd)
• est_time – zmienna tylko do odczytu, która zwraca cztery wartości:
– exit probability
– the probability of a task exiting without a cooperating task submit-ting an anticipated IO
– the current mean think time
– the seek distance used to determine if an incoming IO is better
# cat iosched/est_time0 % exit probability0 % probability of exiting without a cooperating process submitting IO2 ms new thinktime3944492 sectors new seek distance
Wykorzystanie blokowych urządzeń I/O 250
Dostrajanie planisty terminowego66
• read_expire – maksymalny czas przetrzymywania zlecenia czytania w kolejce
(domyślnie 500 ms)
• write_expire – maksymalny czas przetrzymywania zlecenia pisania w kolejce
(domyślnie 5000 ms)
• fifo_batch – liczba przedawnionych zleceń czytania, które kierowane są do ko-
lejki urządzenia blokowego (domyślnie 16)
• writes_starved – liczba zleceń czytania (kierowanych do kolejki urządzenia
blokowego) poprzedzających jedno zlecenie zapisu (domyślnie 2)
• front_merges – parametr włączający/wyłączający wykonywanie scalania po-
przedzającego (domyślnie 1)
66patrz: Documentation/block/deadline-iosched.txt
Wykorzystanie blokowych urządzeń I/O 251
Dostrajanie planisty CFQ
• back_seek_max – zasadniczo planista CFQ próbuje spełniać zlecenia w jednym
kierunku, nie zapominając o zleceniach dotyczących kierunku odwrotnego; parametr
określa (w KB) jak daleko w kierunku odwrotnym planista ma szukać zleceń do ob-
służenia (domyślnie 16384)
• back_seek_penalty – parametr określa jaką karą jest obłożona obsługa zleceń
z kierunku odwrotnego (domyślnie 2)
• fifo_expire_sync – czas (w ms) przedawniania się zleceń synchronicznych,
tj. po upływie tego czasu zlecenie jest kierowne do kolejki urządzenia blokowego
(domyślnie 125)
• fifo_expire_async – czas (w ms) przedawniania się zleceń asynchronicznych
(domyślnie 250)
• quantum – maksymalna liczba zleceń, które planista jednorazowo przekazuje do ko-
lejki urządzenia blokowego (domyślnie 4)
Wykorzystanie blokowych urządzeń I/O 252
Dostrajanie planisty CFQ (cd)
• slice_sync – maksymalny czas (w ms), w którym planista przesyła zlecenia
synchroniczne do kolejki urządzenia (domyślnie 100)
• slice_async – maksymalny czas (w ms), w którym planista przesyła zlecenia
asynchroniczne do kolejki urządzenia (domyślnie 40)
• slice_async_rq – liczba zleceń asynchronicznych przekazywanych do kolejki
urządzenia po przekroczeniu czasu przedawnienia (domyślnie 2); faktyczna liczba
zleceń jest określana w oparciu ten parametr i priorytet operacji wejścia/wyjścia
• slice_idle – CFQ wspiera zadania klasy idle; parametr określa czas (w ms)
przeznaczony na obsługę zadań o takim priorytecie (domyślnie 8)
CFQ wspiera trzy klasy zadań wejścia/wyjścia: real time (1), best effort (2)i idle (3).67 Dla klas 1 i 2 zadania mogą mieć priorytety od 0 (najwyższy)do 7 (najniższy). Domyślnie stosowana jest klasa best effort.
67patrz man ionice
Wykorzystanie blokowych urządzeń I/O 253
Wydajność operacji wejścia-wyjścia
Planowanie operacji I/O jest utrudnione przez fakt, że w nowoczesnychdyskach kontroler dysku jest odpowiedzialny za powiązanie cylinder/głowi-ca/sektor z numerem logicznego bloku. W konsekwencji sąsiednie logicznebloki n i n+1 nie muszą być fizycznie położone obok siebie.
Dodatkowe komplikacje wpowadza stosowanie przez dyski ATA i SCSI sys-temu TCQ (Tag Command Queuing), a dyski SATA systemu NCQ (NativeCommand Queing), czyli własnych sposobów szeregowania zleceń zapi-su/odczytu. Odnosi się to także do obsługi macierzy dyskowych RAID.
Wydajność operacji I/O zależy także od typu i szybkości szyny danych orazdostępności DMA.
Wykorzystanie blokowych urządzeń I/O 254
btrace, blktrace, ...
NAMEbtrace - verifies an output file produced by blkparse
SYNOPSISUsage: btrace [-s] [-t] [-w N] [-n N] [-b N] [-a <trace>...] <dev>...
DESCRIPTIONThe btrace script provides a quick and easy way to to livetracing of block devices. All it does is calling blktrace onthe specified devices and piping its output through blkparsefor formatting. See blktrace (8) for more in-depth informa-tion about how blktrace works.
Użycie komendy btrace wymaga zamontowania systemu plików debugfs:mount -t debugfs none /sys/kernel/debug
Wykorzystanie blokowych urządzeń I/O 255
Zapis żądań I/O
Zmiana wartości zmiennej vm.block dump z 0 na 1 powoduje wyprowa-dzanie do pliku dziennika kern.log informacji o wszystkich żądaniachwejścia-wyjścia68.
May 28 09:19:30 scobie kernel: kjournald(414): WRITE block 15120096 on sda1May 28 09:19:30 scobie kernel: syslogd(1781): dirtied inode 1793491 (kern.log) on sda1...May 28 09:20:22 scobie kernel: pickup(6040): dirtied inode 1826077 (pickup) on sda1May 28 09:20:22 scobie kernel: pickup(6040): dirtied inode 1826109 (maildrop) on sda1May 28 09:20:23 scobie kernel: tcsh(6347): dirtied inode 1094806 (tail) on sda1May 28 09:20:23 scobie kernel: tail(6347): dirtied inode 1080761 (locale-archive) on sda1May 28 09:20:25 scobie kernel: pdflush(204): WRITE block 14419464 on sda1May 28 09:20:25 scobie kernel: pdflush(204): WRITE block 14419504 on sda1May 28 09:20:25 scobie kernel: pdflush(204): WRITE block 14646752 on sda1May 28 09:20:26 scobie kernel: kded(2428): WRITE block 367840 on sda5May 28 09:20:26 scobie kernel: kjournald(1478): WRITE block 114593320 on sda5
68Demon syslogd powinien dokonywać wpisów do kern.log w trybie asynchronicznym.
Wykorzystanie blokowych urządzeń I/O 256
Diagnostyka: vmstat 69
# vmstat 1 100procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------r b swpd free buff cache si so bi bo in cs us sy id wa st4 0 140 6096 16800 134872 0 0 148 54 1185 1646 6 2 84 8 01 0 140 6100 16812 134872 0 0 4 84 1194 1265 4 3 77 16 01 0 140 6100 16812 134872 0 0 0 0 1398 1506 5 2 93 0 00 2 140 5556 16840 134992 0 0 132 0 1155 1255 3 1 58 38 01 0 140 5480 17728 133576 0 0 1368 16 1710 2239 8 6 0 86 0...
# vmstat -d 1 1disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur secram0 0 0 0 0 0 0 0 0 0 0...ram15 0 0 0 0 0 0 0 0 0 0sda 139044 48693 3013740 2068511 41161 97243 1100709 4897687 0 1125hdc 0 0 0 0 0 0 0 0 0 0md0 0 0 0 0 0 0 0 0 0 0sdb 8747 534 71883 16427 313 1459 14176 29007 0 16
69http://www.fizyka.umk.pl/˜jkob/diagopt/vmstat
Wykorzystanie blokowych urządzeń I/O 257
Diagnostyka: sarNAME
sar - Collect, report, or save system activity information.SYNOPSIS
sar -b [ interval [ count ] ]
-b Report I/O and transfer rate statistics. The following values are displayed:tpsTotal number of transfers per second that were issued to physicaldevices. A transfer is an I/O request to a physical device. Multiplelogical requests can be combined into a single I/O request to the device.A transfer is of indeterminate size.rtpsTotal number of read requests per second issued to physical devices.wtpsTotal number of write requests per second issued to physical devices.bread/sTotal amount of data read from the devices in blocks per second.Blocks are equivalent to sectors with 2.4 kernels and newer andtherefore have a size of 512 bytes. With older kernels, a block is ofindeterminate size.bwrtn/sTotal amount of data written to devices in blocks per second.
Wykorzystanie blokowych urządzeń I/O 258
Diagnostyka: sar
# sar -b 1 100Linux 2.6.19-1.2288.fc5 (scobie) 2007-05-2109:23:30 tps rtps wtps bread/s bwrtn/s09:23:31 0,00 0,00 0,00 0,00 0,0009:23:32 0,00 0,00 0,00 0,00 0,0009:23:33 0,00 0,00 0,00 0,00 0,0009:23:34 2,94 0,00 2,94 0,00 109,8009:23:35 1,98 0,00 1,98 0,00 79,2109:23:36 0,00 0,00 0,00 0,00 0,0009:23:37 169,70 0,00 169,70 0,00 19474,75...
Wykorzystanie blokowych urządzeń I/O 259
Diagnostyka: iostat70
# iostat -d -k 1 1Linux 2.6.27.9-73.fc9.i686 (scobie) 03.01.2009Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtnsda 8,09 77,13 126,86 21499857 35363357sda1 0,00 0,03 0,00 8115 213sda2 8,09 77,10 126,86 21491622 35363144dm-0 33,43 69,29 111,69 19314385 31135676dm-1 4,15 7,73 14,60 2154317 4070444dm-2 0,16 0,08 0,56 22620 157024
# iostat -d -kx 1 1Linux 2.6.27.9-73.fc9.i686 (scobie) 03.01.2009
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %utilsda 0,00 2502,97 0,99 83,17 3,96 10344,55 245,93 19,79 235,16 6,78 57,03sda1 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00sda2 0,00 2502,97 0,99 83,17 3,96 10344,55 245,93 19,79 235,16 6,78 57,03dm-0 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00dm-1 0,00 0,00 0,99 0,00 3,96 0,00 8,00 0,15 150,00 150,00 14,85dm-2 0,00 0,00 0,00 2586,14 0,00 10344,55 8,00 613,90 237,38 0,22 57,03
70http://www.fizyka.umk.pl/˜jkob/diagopt/iostat
Wykorzystanie blokowych urządzeń I/O 260
Porównanie planistów71
# echo 3 > /proc/sys/vm/drop_caches# echo $sched > /sys/block/$dev/queue/scheduler# make clean# /usr/bin/time make -j4 gfortran# sync; sync; sync
rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
1 87.51 456.98 584.77 231.19 15424.77 2752.74 791.81 9.82 351.46 223.63 490.53
2 84.30 448.71 593.26 211.31 15527.74 2644.11 827.98 10.15 368.78 222.28 492.94
3 94.32 430.71 590.71 212.93 15696.52 2578.66 795.79 10.04 358.01 197.99 480.12
4 74.79 458.54 593.66 242.67 15535.82 2804.87 821.85 10.95 335.52 201.47 478.86
1 -- noop, 2 -- anticipatory, 3 -- deadline, 4 -- cfq
71http://www.fizyka.umk.pl/˜jkob/diagopt/iosched
Wykorzystanie blokowych urządzeń I/O 261
Porównanie planistów (cd)
The results of running an Oracle 10G OLTP workload running on a 2-CPU/2-HT Xeon
with 4 GB of memory across 8 LUNs on an LSIlogic megraraid controller. The OLTP load
ran mostly 4k random I/O with a 50% read/write ratio. The DSS workload consists of
100% sequential read queries using large 32k-256k byte transfer sizes.72
72http://www.redhat.com/magazine/008jun05/features/schedulers/
Wykorzystanie blokowych urządzeń I/O 262
Systemy plików
Systemy operacyjne wykorzystują przestrzeń udostępnianą przez urządze-nia blokowe via różne systemy plików:
• Windows: FAT (MSDOS), VFAT (W98), NTFS (WNT)
• SunOS, FreeBSD, NetBSD, OpenBSD: BSD
• Solaris: UFS
• Linux: EXT2, EXT3, EXT4, JFS, XFS, ReiserFS
• inne: HPFS (IBM OS/2), HFS (Apple Macintosh), ISO9660, dawniejHigh Sierra File System (CD-ROM)
Wykorzystanie blokowych urządzeń I/O 263
Systemy plików – rozkład
Dobrze zaplanowany system obsługi wejścia-wyjścia zapewnia:
• możliwie równomierny rozkład obciążenia na wszystkie dostępne dyski
• stosunkowo niewielką liczbę systemów plików na pojedynczym dys-ku (wszystkie używane przez Linux systemy plików lepiej sobie radząz fragmentacją, kiedy partycja jest duża
• jeśli znaczący zbiór plików (pod względem rozmiaru lub liczby) wyraźnieróżni się od plików typowych, to należy utworzyć dla nich osobny systemplików o parametrach lepiej dostosowanych do ich specyfiki
Wykorzystanie blokowych urządzeń I/O 264
System plików EXT2-3
Pliki w systemie Linux
• każdy plik jest elementem jakiegoś katalogu
• katalog jest specjalnym rodzajem pliku, który zawiera listę nazw plikówwraz z odpowiadającymi im numerami i-węzłów (i-nodes)
• i-węzeł jest strukturą danych zawierającą wszystkie dane o pliku (ka-talogu): numer bloku na dysku, nazwę właściciela pliku, prawa dostępui czas ostatniego dostępu oraz wskaźniki na bloki (ekstenty) zawierającedane
Wykorzystanie blokowych urządzeń I/O 265
System plików EXT2-3 (cd)
Elementy systemu plików EXT2-3:
• blok startowy
• grupy bloków
– superblok– deskryptory grupy– mapa bitowa bloków danych– mapa bitowa i-węzłów– tablica i-węzłów– tablica wolnych bloków– bloki danych
Superblok to struktura danych opisująca globalne parametry systemu plików. Przy mon-
towaniu jądro wczytuje superblok związany z danym systemem plików do pamięci opera-
cyjnej, a zapisuje go na dysku po każdym wywołaniu funkcji systemowej sync oraz przy
demontowaniu systemu plików.
Wykorzystanie blokowych urządzeń I/O 266
System plików EXT2-3: i-węzły
Niektóre pola i-węzła zwykłego pliku dyskowego ext2/ext3 (128 B):
• typ pliku i prawa dostępu
• identyfikator właściciela
• długość pliku w bajtach (32 bity, rozmiar ¬ 2GB)
• czas ostatniego dostępu do pliku
• czas ostatniej zmiany i-węzła
• czas ostatniej modyfikacji pliku
• licznik sztywnych dowiązań
• liczba bloków danych pliku
• wskaźnik do bloku danych
Wykorzystanie blokowych urządzeń I/O 267
Systemy plików EXT2-3: i-węzły (cd)
Katalog jest specjalnym rodzajem pliku, który zawiera listę nazw plikówwraz z odpowiadającymi im numerami i-węzłów.
• Pola pozycji katalogu ext2/ext3:
– numer i-węzła
– długość pozycji katalogu
– długość nazwy pliku
– typ pliku
– nazwa pliku
• dowiązania symboliczne – jeśli ścieżka dowiązania symbolicznego manie więcej niż 60 znaków, to całą informację o tym dowiązaniu możnazmieścić w i-węźle
• pliki urządzeń, potoki i gniazda – nie wymagają bloków danych
Wykorzystanie blokowych urządzeń I/O 268
System plików EXT2-3: i-węzy (cd)
Każdy i-węzeł zawiera
• 12 numerów bloków bezpośrednich
• 3 numery bloków pośrednich
Blok 1KB = 256 4-bajtowych numerów bloków
Maksymalna wielkość pliku (12 numerów bloków bezpośrednich):
• plus blok pojedynczo pośredni: pliki ¬ 268KB (12KB+256KB)
• plus blok podwójnie pośredni: pliki ¬ 64MB+12KB(256×256KB+12KB)
• plus blok pośredni: pliki ¬ 16GB (256×256×256KB)
Wskaźnik pozycji w pliku (w systemach 32 bitowych) jest 32-bitową liczbąze znakiem, więc rozmiar plików jest ograniczony do 231=2GB.
Wykorzystanie blokowych urządzeń I/O 269
System plików EXT2-3: algorytm alokacji
Reguły alokowania nowych i-węzłów:
• i-węzeł nowego pliku jest przydzielany w tej samej grupie, w którejznajduje się i-węzeł katalogu nadrzędnego
• i-węzły są przydzielane równomiernie we wszystkich grupach
Reguły alokowania nowych bloków:
• nowy blok jest przydzielany w tej samej grupie co jego i-węzeł
• przydziela się ciągłe sekwencje bloków
Wykorzystanie blokowych urządzeń I/O 270
System plików: alokacja via ekstenty73
73Performance Tuning for Linux Servers, p.237
Wykorzystanie blokowych urządzeń I/O 271
System plików: rodzaje plików
Pliki: zwykłe/dowiązania twarde, dowiązania symboliczne
• informacja o pliku: stat /etc/passwd
File: ‘/etc/passwd’Size: 1839 Blocks: 8 IO Block: 4096 regular fileDevice: 302h/770d Inode: 245051 Links: 1Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)Access: 2004-12-20 21:16:10.736631440 +0100Modify: 2004-11-24 14:10:30.000000000 +0100Change: 2004-12-15 22:43:15.000000000 +0100
• dowiązanie twarde: ln plik-stary plik-nowy
• dowiązanie symboliczne: ln -s plik-stary plik-nowy
Wykorzystanie blokowych urządzeń I/O 272
Tworzenie systemu plików
NAMEmkfs - build a Linux file system
SYNOPSISmkfs [ -V ] [ -t fstype ] [ fs-options ] filesys [ blocks ]
DESCRIPTIONmkfs is used to build a Linux file system on a device, usuallya hard disk partition.
Dostępne są m.in. systemy plików: EXT2, EXT3, JFS, MSDOS, NTFS,REISERFS, UFS, VFAT, XFS (pełną listę można znaleźć w katalogu fs).
Zmiana parametrów systemu plików EXT2-3: tune2fs
Pod adresem Carlo Wood, HOWTO recover deleted files on an ext3 file system moż-
na znaleźć opis zastosowania programu ext3grep służącego do badania poszczególnych
bloków systemu systemu plików EXT3. W szczególności program może zostać użyty do
odtwarzania utracownych danych.
Wykorzystanie blokowych urządzeń I/O 273
Niespójność systemu plików
Utworzenie nowego pliku przez aplikację wymaga od jądra systemu:
1. modyfikacji bloku zawierającego tablicę i-węzłów (liczba wolnych i-węzłów maleje o jeden)
2. modyfikacji bloku zawierającego i-węzł pliku (inicjacja i-węzła pliku)
3. modyfikacji bloku zawierającego i-węzł katalogu zawierającego plik
Ponieważ operacje 1-3 nie są wykonywane w sposób atomowy, więc w razieawarii system plików przestaje być spójny. Przywracanie spójności wymagaużycia programu fsck (filesystem consistency check); dla dużych systemówplików ta operacja jest bardzo czasochłonna.
Wykorzystanie blokowych urządzeń I/O 274
System plików z kroniką
System plików z kroniką (dziennikowy system plików) zapewnia zwiększoną
• dostępność
• integralność danych
• szybkość (pomimo pisania niektórych danych dwa razy można zwięk-szyć przepustowość poprzez optymalizację ruchu głowic)
W dziennikowym systemie plików metadane (czasami także dane) są za-pisywane w specjalnym pliku (kronika, dziennik) zanim zostaną zapisanew docelowej lokalizacji (plik kroniki może znajdować się na tym samym lubinnym urządzeniu).
W razie awarii systemu pliku przywrócenie jego spójności wymaga jedynieodtworzenia zapisów z dziennika.
Wykorzystanie blokowych urządzeń I/O 275
System plików z kroniką: działanie74
74Kedar Sovani, Linux: The Journaling Block Device, KernelTrap
Wykorzystanie blokowych urządzeń I/O 276
System plików z kroniką: działanie (cd)
Transakcja – grupa atomowych operacji uaktualniania danych na dysku;JBD (Journaling Block Device) gwarantuje, że transakcja jest także ope-racją atomową.
Stany transakcji:
• running – transakacja oczekuje na nowe atomowe operacje (handles)
• locked – transakacja nie przyjmuje nowych atomowych operacji
• flush – transakcja jest zupełna i jej zawartość jest zapisywana do pliku kroniki
• commit – zawartość transakcji została zapisana do pliku kroniki, trwa zapisywaniebloku ’commit’ oznaczającego, że w pliku kroniki została zapisana cała zawartośćtransakcji
• finished – transakcja w całosci została zapisana w pliku kroniki; pozostanie tam doczasu naniesienia zmian na dysku
Wykorzystanie blokowych urządzeń I/O 277
System plików z kroniką: działanie (cd)
Z każdym używanym urządzeniem blokowym z kroniką związany jest wą-tek jądra kjournald, który jest odpowiedzialny za zapisanie zakończonychtransakcji z pliku kroniki na dysk (checkpointing). Po zapisaniu wszystkichdanych (związanych z daną transakcją) na dysku są one usuwane z plikukroniki.
Przy uruchamianiu systemu (montowaniu systemu plików) sprawdzanajest zawartość pliku kroniki. Jeśli kronika nie jest pusta, to podejmowa-ne są czynności naprawcze. System odnajduje koniec kroniki i tworzy listęodwołanych (revoked) bloków. Następnie zapisywane są na dysku nieutr-walone z powodu awarii bloki (bloki odwołane są pomijane, żeby uniknąćnadpisania świeższych danych przez starsze).
Wykorzystanie blokowych urządzeń I/O 278
System plików z kroniką: działanie (cd)
Wykorzystanie blokowych urządzeń I/O 279
System plików EXT3
System ext3 może obsługiwać trzy tryby pracy z kroniką.
mount -o data=journal|ordered|writeback dev|dir
journalAll data and metadata are committed into the journal prior to beingwritten into the main file system.
ordered (default mode)All data is forced directly out to the main file system prior to itsmetadata being committed to the journal (consistancy of data ispreserved).
writebackData ordering is not preserved - data may be written into the mainfile system after its metadata has been committed to the journal.This is rumoured to be the highest-throughput option (in cases ofheavy synchronous writes or when creating and deleting large numbersof small files). It guarantees internal file system integrity,however it can allow old data to appear in files after a crash andjournal recovery.
Wykorzystanie blokowych urządzeń I/O 280
System plików EXT475
EXT4 jest częścią jądra w wersji 2.6.28. Najważniejsze cechy:
• zgodność z EXT3, współistnienie EXT3 i EXT4
• większe rozmiary systemu plików i samych plików, nieograniczona liczba podkatalogów
• i-węzły zawierają wskaźniki na ekstenty zamiast (pośrednie) bloki
• alokacja wieloblokowa (alokator EXT3 alokuje przy pojedynczym wywołaniu tylko jeden blok 4 KB)
• alokacja opóźniona
• szybki fsck
• sumy kontrolne dla kroniki
• defragmentacja online (e4defrag)
• i-węzły: konfigurowalna wielkość, rezerwacja, nanosekundowe znaczniki czasu
• ciągła prealokacja
• włączona bariera
75http://kernelnewbies.org/Ext4
Wykorzystanie blokowych urządzeń I/O 281
Alokacja bloków w EXT3 i EXT476
76http://ols.fedoraproject.org/OLS/Reprints-2008/kumar-reprint.pdf
Wykorzystanie blokowych urządzeń I/O 282
Alokacja bloków w EXT477
Patrz także: http://www.fizyka.umk.pl/˜jkob/diagopt/compilebench
77http://ext4.wiki.kernel.org/index.php/Performance results, http://oss.oracle.com/˜mason/compilebench/
Wykorzystanie blokowych urządzeń I/O 283
Dziennikowe systemy plików – porównanie78
Features Ext3 Ext4 ReiserFS XFS JFSLargest block size supported on IA32 4 KB 4 KB 4 KB 4 KB 4 KBFile system size maximum 16 TB 1 EB 17 TB 17.5 EB 4 PBFile size maximum 2048 GB 16 TB 1 EB 8.8 EB 4 PBGrowing the file system size Patch Yes Yes Yes YesOnline snapshot Yes Yes Yes Yes YesAccess control lists Yes Yes Yes Yes YesExtended attributes Yes Yes Yes Yes YesDynamic disk inode allocation No Yes Yes Yes YesData logging Yes Yes Patch No NoPlace log on an external device Yes Yes Yes Yes Yes
78S.Best, Journaling File Systems, http://kernelnewbies.org/Ext4, http://ols.fedoraproject.org/-OLS/Reprints-2008/kumar-reprint.pdf, Performance Tuning for Linux Servers, p.274
Wykorzystanie blokowych urządzeń I/O 284
PIII-500, 768MB RAM, 400GB EIDE-133 HDD (seconds elapsed)79
2.6 kernel 2.4 kernelTask EXT3 JFS RFS XFS EXT3 JFS RFS XFSTouch 10,000 Files 48.25 34.59 34.08 37.47 40.98 24.50 23.03 27.13Find 10,000 Files 0.03 0.03 0.07 0.04 0.02 0.02 0.02 0.04Remove 10,000 Files 0.16 1.64 2.98 2.51 0.36 1.37 1.76 2.52Make 10,000 Directories 49.87 34.32 34.68 37.17 148.46 24.11 23.42 29.19Find 10,000 Directories 0.65 0.63 1.46 0.72 0.66 0.41 0.87 0.59Remove 10,000 Directories 1.67 3.58 119.42 5.39 56.31 4.05 5.37 6.70Copy Tarball from Other to Current Disk 5.15 5.74 7.34 4.26 5.70 4.62 6.08 4.12Copy Tarball from Current to Other Disk 7.00 6.97 8.21 6.69 3.45 3.49 3.53 3.45UnTAR Kernel 2.6.14.4 Tarball 15.19 27.64 21.45 40.81 31.73 34.64 12.36 23.79TAR Kernel 2.6.14.4 Source Tree 14.08 13.05 25.82 36.19 23.40 27.06 22.81 24.85Remove Kernel 2.6.14.4 Source Tree 2.64 6.17 10.15 9.10 7.26 10.86 3.18 4.48Copy 2.6.14.4 Tarball 10 Times 38.29 39.13 62.16 46.34 46.68 38.17 49.16 26.22Create a 1GB File 15.02 15.12 25.40 15.87 22.35 28.87 25.80 20.49Copy a 1GB File 36.51 38.54 50.63 41.25 62.48 54.46 71.06 55.89Split 10M File into 1000 Byte Pieces 57.77 2.99 2.95 4.87 62.70 8.11 4.15 4.34Split 10M File into 2048 Byte Pieces 6.98 1.39 1.55 1.95 7.94 2.83 2.22 1.95Split 10M File into 4096 Byte Pieces 1.83 0.67 0.99 0.98 2.10 0.50 0.65 0.97Copy 2.6.14.4 Kernel Source Tree 10.06 35.76 20.17 43.42 30.65 25.68 22.19 26.53CAT 1GB File to /dev/null 18.59 18.00 21.37 18.70 23.52 20.40 23.28 21.1379http://linuxgazette.net/122/TWDT.html#piszcz
Wykorzystanie blokowych urządzeń I/O 285
Dziennikowe systemy plików – porównanie (cd)80
System: Intel Celeron 533, 512MB RAM, PC100, Hard drive 160GB (EIDE100, 7200 RPM, 8MB Cache)
• Partition capacity: choose ReiserFS, JFS or XFS.
• File system creation, mounting and unmounting: choose JFS or XFS.
• Operations on a large file (ISO image, 700MB, copy ISO from a seconddisk to the test disk, recopy ISO in another location on the test disk,remove both copies of ISO): for quick operations on large files, chooseJFS or XFS; to minimize CPU usage, choose JFS
80Filesystems (ext3, reiser, xfs, jfs) comparison on Debian Etch
Wykorzystanie blokowych urządzeń I/O 286
Dziennikowe systemy plików – porównanie (cd)
• Operations on a file tree (7500 files, 900 directories, 1.9GB, copy filetree from a second disk to the test disk, recopy file tree in anotherlocation on the test disk, remove both copies of file tree): for quickoperations on large file tree, choose Ext3 or XFS.Benchmarks from other authors have supported the use of ReiserFS for operations on large number
of small files. However, the present results on a tree comprising thousands of files of various size
(10KB to 5MB) suggest than Ext3 or XFS may be more appropriate for real-world file server ope-
rations. Even if JFS minimize CPU usage, it should be noted that this FS comes with significantly
higher latency for large file tree operations.
• Directory listing and file search into the previous file tree:
– quick and more CPU-intensive, choose ReiserFS and XFS– slower but less CPU-intensive, choose ext3 and JFS
XFS appears as a good compromise, with relatively quick results, mo-derate usage of CPU and acceptable rate of page faults.
Wykorzystanie blokowych urządzeń I/O 287
Diagnostyka: bonnie++81
NAMEbonnie++ - program to test hard drive performance.
SYNOPSISbonnie++ [-d dir] [-s size(Mb)[:chunk-size(b)]][-n number-to-stat(*1024)[:max-size[:min-size][:num-directories]]][-m machine-name] [-r ram-size-in-Mb] [-x number-of-tests][-u uid-to-use:gid-to-use] [-g gid-to-use] [-q] [-f] [-b] [-p processes | -y]
DESCRIPTION
Bonnie++ is a program to test hard drives and file systems forperformance or the lack thereof. There are a many differenttypes of file system operations which different applicationsuse to different degrees. Bonnie++ tests some of them and foreach test gives a result of the amount of work done per secondand the percentage of CPU time this took. For performanceresults higher numbers are better, for CPU usage lower arebetter.
81http://www.fizyka.umk.pl/˜jkob/diagopt/bonie++
Wykorzystanie blokowych urządzeń I/O 288
Diagnostyka: iozone82
Usage: iozone [-s filesize_Kb] [-r record_size_Kb] [-f [path]filename] [-h][-i test] [-E] [-p] [-a] [-A] [-z] [-Z] [-m] [-M] [-t children][-l min_number_procs] [-u max_number_procs] [-v] [-R] [-x] [-o][-d microseconds] [-F path1 path2...] [-V pattern] [-j stride][-T] [-C] [-B] [-D] [-G] [-I] [-H depth] [-k depth] [-U mount_point][-S cache_size] [-O] [-L cacheline_size] [-K] [-g maxfilesize_Kb][-n minfilesize_Kb] [-N] [-Q] [-P start_cpu] [-e] [-c] [-b Excel.xls][-J milliseconds] [-X write_telemetry_filename] [-w] [-W][-Y read_telemetry_filename] [-y minrecsize_Kb] [-q maxrecsize_Kb][-+u] [-+m cluster_filename] [-+d] [-+x multiplier] [-+p # ][-+r] [-+t] [-+X] [-+Z]
-a Auto mode-E Run extension tests-f filename to use-g # Set maximum file size (in Kbytes) for auto mode (or #m or #g)-i # Test to run (0=write/rewrite, 1=read/re-read, 2=random-read/write
3=Read-backwards, 4=Re-write-record, 5=stride-read, 6=fwrite/re-fwrite7=fread/Re-fread, 8=random_mix, 9=pwrite/Re-pwrite, 10=pread/Re-pread11=pwritev/Re-pwritev, 12=preadv/Re-preadv)
82http://www.fizyka.umk.pl/˜jkob/diagopt/iozone
Wykorzystanie blokowych urządzeń I/O 289
Diagnostyka: iozone (cd)
-n # Set minimum file size (in Kbytes) for auto mode (or #m or #g)-o Writes are synch (O_SYNC)-O Give results in ops/sec.-q # Set maximum record size (in Kbytes) for auto mode (or #m or #g)-r # record size in Kbor -r #k .. size in Kbor -r #m .. size in Mbor -r #g .. size in Gb
-R Generate Excel report-s # file size in Kbor -s #k .. size in Kbor -s #m .. size in Mbor -s #g .. size in Gb
-t # Number of threads or processes to use in throughput test-T Use POSIX pthreads for throughput tests-u # Upper limit on number of processes to run-y # Set minimum record size (in Kbytes) for auto mode (or #m or #g)-+r Enable O_RSYNC|O_SYNC for all testing.
Wykorzystanie blokowych urządzeń I/O 290
Dziennikowe systemy plików – porównanie (cd)
Zgodnie z zapowiedzią programistów jądra Linuksa system plików EXT4jest oznaczony jako The Extended 4 (ext4) filesystem (NEW)w konfiguratorze wersji 2.6.28 (z 24/12/2008).
Na początku grudnia 2008 M. Larabel zamieścił na stronach serwisu Pho-ronix porównanie EXT4 z EXT3, XFS oraz ReiserFS (Real World Benchmarks
Of The EXT4 File-System).
Wykorzystanie blokowych urządzeń I/O 291
Diagnostyka: dbench/tbenchNAME
dbench - Measure disk throughput for simulated netbench runSYNOPSIS
dbench [options]numclientstbench [options]numclients servertbench_srv [options]
DESCRIPTIONNetbench is a terrible benchmark, but it’s an "industry standard" and it’s whatis used in the press to rate windows fileservers like Samba and WindowsNT.Given the requirements of running netbench (60 and 150 Windows PCs all onswitched fast ethernet and a really grunty server, and a to open up netbench tothe masses. Both dbench and tbench read a load description file calledclient.txt that was derived from a capture of a real netbench run. client.txt isabout 25MB and describes the 500 thousand operations that a netbench client doesin a typical netbench run. They parse client.txt and use it to produce the sameload without having to buy a huge lab.dbench produces only the filesystem load. It does all the same IO calls that thesmbd server in Samba would produce when confronted with a net- bench run. Itdoes no networking calls. tbench produces only the TCP and process load. Itdoes the same socket calls that smbd would do under a netbench load. It does nofilesystem calls. The idea behind tbench is to eliminate smbd from the netbenchtest, as though the smbd code could be made infinately fast.
Wykorzystanie blokowych urządzeń I/O 292
Diagnostyka: NT versus Linux83
Samba beats Windows (Roger Howorth, IT Week, 12 Oct 2003).
Samba 3 runs rings around Windows Server 2003 in file serving performance. Tests by
IT Week Labs show the latest version of the open-source Samba file and print server
software is 2.5 times faster than Windows Server 2003 in the same role.
83http://www.kegel.com/nt-linux-benchmarks.html
Wykorzystanie blokowych urządzeń I/O 293
NT kontra Linux
Uwagi menadżerów firmy Microsoft nt. Linuksa:
I think you have to rate competitors that threaten your core higherthan you rate competitors where you’re trying to take from them. Itputs the Linux phenomenon and the Unix phenomenon at the topof the list. I’d put the Linux phenomenon really as threat No. 1.(Steve Ballmer)
There’s very little value in free. Linux is an immature product.(Doug Miller)
(Linux is) intellectual property destroyer... the worst thing to hap-pen to the software industry ... the thing that kills innovation. (Ja-mes Allchin)
Wykorzystanie blokowych urządzeń I/O 294
NT kontra Linux (cd)Z listu Allchina do kolegów (2002):84
My conclusion: We are not on a path to win against Linux. We mustchange some things and we must do it immediately. The currentwhite papers, etc. are too high level and they are not going to cut it.
We need to understand exactly the risk a customer is under ifa patent lawsuit happens and Linux is challenged....There MUST berisks to customers that are being passed on. I want this understoodprecisely. We need to get the license from IBM given to customersand investigate.
Bill/Brian: I need to ask you to take ownership of driving this aheadWhat I want to see is a package including ALL of these itemsthat we can provide to the field within 2 months (MAX). I amscared....Please remember NO marketing. Facts. No anger towardLinux. Just facts.
84Matt Asay, Facts behind Microsoft’s anti-Linux campaign
Wykorzystanie blokowych urządzeń I/O 295
Diagnostyka: lsof85
NAMElsof - list open files
SYNOPSISlsof [ -?abChlnNOPRstUvVX ] [ -A A ] [ -c c ] [ +c c ] [ +|-d d ] [ +|-D D ][ +|-f [cfgGn] ] [ -F [f] ] [ -g [s] ] [ -i [i] ] [ -k k ] [ +|-L [l] ][ +|-m m ] [ +|-M ] [ -o [o] ] [ -p s ] [ +|-r [t] ] [ -S [t] ] [ -T [t] ][ -u s ] [ +|-w ] [ -x [fl] ] [ -z [z] ] [ -- ] [names]
DESCRIPTIONLsof revision 4.77 lists information about files opened by processes for thefollowing UNIX dialects: AIX 5.[123], Apple Darwin 7.x and 8.x etc. An open filemay be a regular file, a directory, a block special file, a character specialfile, an executing text reference, a library, a stream or a network file(Internet socket, NFS file or UNIX domain socket.) A specific file or all thefiles in a file system may be selected by path.
# lsof +d /var/COMMAND PID USER FD TYPE DEVICE SIZE NODE NAMEcrond 2342 root cwd DIR 253,0 4096 836800 /var/spoolgdm-binar 2414 root cwd DIR 253,0 4096 837662 /var/gdmgdm-simpl 23162 root cwd DIR 253,0 4096 837662 /var/gdmXorg 23163 root cwd DIR 253,0 4096 837662 /var/gdm
85http://www.fizyka.umk.pl/˜jkob/diagopt/lsof
Wykorzystanie sieciowych urządzeń I/O 296
Wykorzystanie urządzeń sieciowych
1. Warstwowy model komunikacji; gniazda
2. Gniazda TCP/IP – strojenie
3. Poprawa wydajności:
• SendFile/Zerocopy
• TCP Segmentation Offloading (TSO)
• Network Device Driver API (NAPI)
• Process and IRQ Affinity
• TCP Offload Engine (TOE)
4. Diagnostyka: ethtool, arping, ifconfig/route/ip, ping, tracero-ute/tracepath, netstat/lsof, sar, netperf, ntop, ttcp, iptraf, tcpdump,wireshark
Wykorzystanie sieciowych urządzeń I/O 297
Model OSI versus TCP/IP
model OSI model TCP/IPwarstwa aplikacji (7)
warstwa prezentacji (6)warstwa sesji (5)
(4) warstwa aplikacji
warstwa transportowa (4) (3) warstwa transportowawarstwa sieciowa (3) (2) warstwa Internet
warstwa łącza danych (2)warstwa fizyczna (1)
(1) warstwa dostępu do sieci
ISO (International Organization for Standardization, Międzynarodowa Organizacja Nor-
malizacyjna) ogłasza w 1984 specyfikację modelu odniesienia OSI (Open System Inter-
connection, model połączonych systemów otwartych).
Wykorzystanie sieciowych urządzeń I/O 298
Podsystem sieciowy jądra Linuksa86
86 Chen Chen and David Griego, Improving Server Performance
Wykorzystanie sieciowych urządzeń I/O 299
Gniazda
Interfejs gniazd (socket interface) – mechanizm umożliwiający komuniko-wanie się procesów w tym samym systemie lub procesów wykonywanychna różnych hostach w sieci.
Systemy Uniksowe/Linuksowe wspierają szereg klas gniazd łączonychw dziedziny (rodziny) gniazd. /usr/include/linux/socket.h zawieralistę rodzin adresowych wspieranych przez jądro systemu (ta list pokrywasię z listą rodzin protokołów), m.in.:
#define AF_UNSPEC 0#define AF_UNIX 1 /* Unix domain sockets */#define AF_LOCAL 1 /* POSIX name for AF_UNIX */#define AF_INET 2 /* Internet IP Protocol */#define AF_AX25 3 /* Amateur Radio AX.25 */#define AF_IPX 4 /* Novell IPX */#define AF_APPLETALK 5 /* AppleTalk DDP */#define AF_NETROM 6 /* Amateur Radio NET/ROM */#define AF_BRIDGE 7 /* Multiprotocol bridge */#define AF_ATMPVC 8 /* ATM PVCs */#define AF_X25 9 /* Reserved for X.25 project */
Wykorzystanie sieciowych urządzeń I/O 300
#define AF_INET6 10 /* IP version 6 */#define AF_ROSE 11 /* Amateur Radio X.25 PLP */#define AF_DECnet 12 /* Reserved for DECnet project */#define AF_NETBEUI 13 /* Reserved for 802.2LLC project*/#define AF_SECURITY 14 /* Security callback pseudo AF */#define AF_KEY 15 /* PF_KEY key management API */#define AF_NETLINK 16#define AF_ROUTE AF_NETLINK /* Alias to emulate 4.4BSD */#define AF_PACKET 17 /* Packet family */#define AF_ASH 18 /* Ash */#define AF_ECONET 19 /* Acorn Econet */#define AF_ATMSVC 20 /* ATM SVCs */#define AF_SNA 22 /* Linux SNA Project (nutters!) */#define AF_IRDA 23 /* IRDA sockets */#define AF_PPPOX 24 /* PPPoX sockets */#define AF_WANPIPE 25 /* Wanpipe API Sockets */#define AF_LLC 26 /* Linux LLC */#define AF_TIPC 30 /* TIPC sockets */#define AF_BLUETOOTH 31 /* Bluetooth sockets */#define AF_MAX 32 /* For now.. */
Wykorzystanie sieciowych urządzeń I/O 301
Gniazda AF INET: strojenie
Aplikacja używa wywołania systemowego socket() do utworzenia jednegoz końców kanału transmisyjnego. Z każdym gniazdem są związane buforyodbiorczy i nadawczy.
Jeśli bufor odbiorczy jest pełen, to dalsze napływające dane są porzuca-ne. Zapełnienie się bufora nadawczego oznacza, że wywołanie systemowewrite() jest blokowane do momentu zwolnienia miejsca w buforze. Przywyborze nieblokującego wysyłania danych zapełnienie się bufora nadaw-czego powoduje wygenerowanie przez jądro odpowiedniego błędu.
Wykorzystanie sieciowych urządzeń I/O 302
Gniazda AF INET: strojenie (cd)
Parametry jądra
• net.core.wmem default (/proc/sys/net/core/wmem default)
• net.core.rmem default (/proc/sys/net/core/rmem default)
określają domyślne wielkości buforów (nadawczego i odbiorczego) związa-nych z gniazdem dowolnego typu.
Wywołanie systemowe setsockopt() pozwala aplikacjom na zmianę do-myślych wartości.
Maksymalne wielkości buforów jakie mogą być stosowane określają para-metry
• net.core.wmem max (/proc/sys/net/core/wmem max)
• net.core.rmem max (/proc/sys/net/core/rmem max)
Przy dużym ruch sieciowym zwiększenie wartości tych parametrów popra-wia wydajność sieciowego podsystemu wejścia-wyjścia.
Wykorzystanie sieciowych urządzeń I/O 303
Gniazda AF INET: strojenie (cd)
Maksymalną liczba pakietów, która zostają umieszczone w kolejce wejścio-wej określa parametr
• net.core.netdev max backlog
Domyślna wartość (1000) jest zwykle zbyt mała dla dużego ruchu sieciowe-go i jej zwiększenie prowadzi do zmniejszenia liczby porzucanych pakietów.Dla sieci charakteryzujących się dużymi opóźnieniami porzucanie pakietówmoże to prowadzić do wyraźnego zmniejszenia przepustowości.
Maksymalną liczbę oczekujących połączeń określa parametr
• net.core.somaxconn
który można określić przy pomocy wywołania systemowego listen().Po osiągnięciu tej wartości kolejne żądania połączenia są odrzucane.
Maksymalną początkową wielkość bufora gniazda sieciowego określa para-metr
• net.core.optmem max
Wykorzystanie sieciowych urządzeń I/O 304
Gniazda AF INET: strojenie (cd)
Zależność domyślnych parametrów od wielkości pamięci operacyjnej
pamięć (GB) 1/2 3 16net.core.somaxconn 128 128 128net.core.optmem max 10240 20480 20480net.core.netdev max backlog 1000 1000 1000net.core.rmem default 109568 122880 256960net.core.wmem default 109568 122880 256960net.core.rmem max 109568 131071 256960net.core.wmem max 109568 131071 256960
Wykorzystanie sieciowych urządzeń I/O 305
Gniazda AF INET: strojenie (cd)
Przy tworzeniu gniazd typu AF INET obowiązują domyślne wartości okre-ślane przez parametry:
• net.ipv4.tcp rmem[0] – minimalna wielkość bufora
• net.ipv4.tcp rmem[1] – domyślna wielkość bufora
• net.ipv4.tcp rmem[2] – maksymalna wielkość bufora
Podobnie jest dla parametrów net.ipv4.tcp wmem.
Wartości nadawane parametrom net.ipv4.tcp rmem[2] nie mogą prze-kroczyć wartości określonej przez net.core.rmax max (podobnie dla bu-forów nadawczych).
Wykorzystanie sieciowych urządzeń I/O 306
Gniazda AF INET: strojenie (cd)
Jądro systemu Linux kontroluje liczbę stron przeznaczonych (w danymmomencie) na obsługę gniazd:• net.ipv4.tcp mem[0] – liczba stron, poniżej której TCP nie działa
pod presją braku wolnych stron pamięci
• net.ipv4.tcp mem[1] – liczba stron, od której TCP pracuje podpresją braku pamięci
• net.ipv4.tcp mem[2] – liczba stron, od której TCP przestaje two-rzyć nowe gniazda (z pewnymi wyjątkami)
Zwiększenie wartości tych parametrów może korzystnie wpłynąć na wydaj-ność podsystemu sieciowego. System TCP może zgłaszać trudności w two-rzeniu nowych gniazd pomimo dostępnej wolnej pamięci w systemie!# sysctl -a | grep tcp| grep memnet.ipv4.tcp_rmem = 4096 87380 207520net.ipv4.tcp_wmem = 4096 16384 207520net.ipv4.tcp_mem = 4864 6485 9728
Wykorzystanie sieciowych urządzeń I/O 307
Gniazda AF INET: strojenie (cd)
Opcje TCP kontrolujące przepływ pakietów:
• net.ipv4.tcp window scaling – parametr (domyślnie włączo-ny) pozwalający na wykorzystywanie okien większych niż 64 KB(RFC1379), co jest szczególnie korzystne przy połączeniach charak-teryzujących się dużymi opóźnieniami (RTT)
• net.ipv4.tcp sack, net.ipv4.tcp dsack – parametr (domyślniewłączony) pozwalający na wykorzystanie tzw. własności TCP SACK(TCP Selective Acknowledgments) oraz TCP D-SACK, czyli metody(i jej rozszerzenia) przesyłania danych o brakujących numerach sekwen-cyjnych w strumieniu danych
• net.ipv4.tcp fack – parametr (domyślnie włączony) odpowiedzial-ny za tzw. własność TCP FACK (TCP Forward Acknowledgment)
Wykorzystanie sieciowych urządzeń I/O 308
Gniazda AF INET: strojenie (cd)
Opcje TCP kontrolujące zarządzaniem połączeniami:
• net.ipv4.tcp max syn backlog – parametr (domyślna wartość1024) kontrolujący długość kolejki TCP Syn Queue dla każdego portu;jeśli klienci nie mogą się połączyć, to wartość tej zmiennej powinna byćzwiększona
• net.ipv4.tcp syn retries, net.ipv4.tcp synack retries –parametr (domyślna wartość 5) określający liczbę prób odpowiedzina pakiet SYN i SYN/ACK; zmniejszenie tej liczby prowadzi do wcze-śniejszego wykrycia problemów z nawiązaniem połączenia
• net.ipv4.tcp retries2 – parametr (domyślna wartość 15) określa-jący liczbę prób przesłania danych do hosta, z którym zostało nawią-zane połączenie
Wykorzystanie sieciowych urządzeń I/O 309
Gniazda AF INET: strojenie (cd)
Opcje TCP kontrolujące istniejące połączenie:
• net.ipv4.tcp keepalive time – jeśli połączenie pozostaje nie-aktywne przez liczbę sekund określoną przez tę zmienna (domyślnie7200), to jądro podejmuje próby sprawdzające połączenie
• net.ipv4.tcp keepalive inivl – zmienna określająca przerwę(w sekundach) pomiędzy dwiema kolejnymi sprawdzeniami (domyślnawartość 75)
• net.ipv4.tcp keepalive probes – zmienna określająca maksy-malną liczbę prób ustalających, czy odległy host żyje (domyślna war-tość 9)
Zakres dostępnych do wykorzystania przez jądro portów określa parametr
• net.ipv4.tcp ip local port range
Wykorzystanie sieciowych urządzeń I/O 310
Wydajność stosu TCP/IP
Czynniki wpływające na wydajność stosu TCP/IP:
• sprzęt (szybkość magistrali, opóźnienia w dostępie do pamięci)
• implementacja
• oddziaływanie z innymi częściami systemu operacyjnego
Wykorzystanie sieciowych urządzeń I/O 311
Wydajność stosu TCP/IP: SendFile/Zerocopy87
Wysłanie pliku przez aplikację sieciowę wymaga następujących kroków:
1. zaalokowanie bufora
2. kopiowanie danych pliku do bufora (via pamięć podręczną buforów)
3. wykonanie operacji send, która kopiuje dane do bufora gniazda
4. kopiowanie danych (via DMA) z pamięci RAM do pamięci karty sieciowej (NIC)
Od wersji 2.4 Linux wspiera SendFile API, czyli umożliwia aplikacjom nabezpośrednie kopiowanie danych z pamięci podręcznej buforów do buforakarty sieciowej via DMA. Aplikacje mogą korzystać z tego API, jeśli stosoraz NIC wspierają tzw. Zerocopy.
Zastosowanie SendFile/Zerocopy pozwala na ograniczenie kosztownychoperacji kopiowania danych i związanego z tym przełączania kontekstu.Dane interaktywne lub generowane dynamiczne są przekazywane do kartysieciowej w zwykły sposób.87Performance Tuning for Linux Servers, p.458
Wykorzystanie sieciowych urządzeń I/O 312
Stos TCP/IP w jądrze Linuksa: SendFile/Zerocopy (cd)
Wykorzystanie sieciowych urządzeń I/O 313
Stos TCP/IP w jądrze Linuksa: TSO88
Dla każdego wysyłanego/odbieranego pakietu wykonywanych jest szeregoperacji przesyłania danych między buforami stosu TCP/IP i NIC. Jeślipakiet jest większy niż wielkość dozwolona przez MTU (Maximum Trans-mission Unit, 1500 bajtów dla sieci Ethernet), to musi on zostać podzielonyna mniejsze fragmenty (segmentacja).
Zastosowanie TCP Segmentation Offloading umożliwia jednorazowe prze-słanie do karty sieciowej (via DMA) całej zawartości bufora (np. 64 KB)wraz z pseudonagłówkiem. Na podstawie przekazanych danych NIC do-konuje podziału danych na pakiety, opatruje je stosownymi nagłówkamii wysyła.
Prowadzi to do zmniejszenie obciążenia jednostki centralnej, zmniejszenieruch na magistrali systemowej i w konsekwencji zwiększenia przepustowo-ści.
88Performance Tuning for Linux Servers, p.460
Wykorzystanie sieciowych urządzeń I/O 314
Stos TCP/IP w jądrze Linuksa: TSO (cd)
Wykorzystanie sieciowych urządzeń I/O 315
Stos TCP/IP w jądrze Linuksa: TSO (cd)
Wykorzystanie sieciowych urządzeń I/O 316
Stos TCP/IP w jądrze Linuksa: NAPI89
NAPI (”New API”) is a modification to the device driver packet processing framework,which is designed to improve the performance of high-speed networking. NAPI worksthrough:
• Interrupt mitigation – High-speed networking can create thousands of interrupts persecond, all of which tell the system something it already knew: it has lots of packetsto process. NAPI allows drivers to run with (some) interrupts disabled during timesof high traffic, with a corresponding decrease in system load.
• Packet throttling – When the system is overwhelmed and must drop packets, it’sbetter if those packets are disposed of before much effort goes into processing them.NAPI-compliant drivers can often cause packets to be dropped in the network adaptoritself, before the kernel sees them at all.
NAPI was first incorporated in the 2.5/2.6 kernel but was also backported to the 2.4.20
kernel. Note that use of NAPI is entirely optional, drivers will work just fine (though
perhaps a little more slowly) without it.
89http://www.linuxfoundation.org/en/Net:NAPI,
Wykorzystanie sieciowych urządzeń I/O 317
Stos TCP/IP w jądrze Linuksa: NAPI (cd)
NAPI dodano do Linuksa żeby poprawić jego wydajność przy dużym sieciowym ruchu
wejścia/wyjścia. Obciążenie systemu decyduje o tym, czy obsługa interfejsu sieciowego
odbywa się poprzez przerwania generowane przez sprzęt, czy poprzez odpytywanie urzą-
dzenia. Przy małym obciążeniu odpytywanie prowadzi do marnowania cykli. Przy dużym
obciążeniu (tzw. Maximum Loss Free Forwarding Rate) obsługa poprzez przerwania pro-
wadzi do tzw. live lock, kiedy system zajmuje się wyłącznie obsługą urządzeń sieciowych.
NAPI działa tylko z kartami, które wspierają tzw. pierścień buforów DMA. Odebrany
pakiet jest umieszczany w kolejnym wolnym buforze (przy braku wolnych bufofrów pakiety
są porzucane). Przy wyłączonym NAPI każdy odebrany pakiet generuje przerwanie. Przy
włączonym NAPI pierwszy pakiet generuje przerwanie, a w odpowiedzi NAPI nakazuje NIC
zaprzestania generowania przerwań i przystępuje do odpytywania pierścienia (uaktywnia
się wątek softirq).90
90 J.H.Salim When NAPI Comes to Town, http://www.cyberus.ca/˜hadi/usenix-paper.tgz
Wykorzystanie sieciowych urządzeń I/O 318
Stos TCP/IP w jądrze Linuksa: NAPI (cd)91
NIC e1000, NAPI włączone, wysłano 1M pakietów każdego rodzaju------------------------------------------------------------------------------Psize Ipps Tput Rxint Txint Done Ndone Psize*Ipps------------------------------------------------------------------------------60 890000 409362 17 27622 7 6823 53400400128 758150 464364 21 9301 10 7738 97042200256 445632 774646 42 15507 21 12906 198309376512 232666 994445 241292 19147 241192 1062 1191249921024 119061 1000003 872519 19258 872511 0 1219184641440 85193 1000003 946576 19505 946569 0 122677920------------------------------------------------------------------------------
"Ipps" == input packets per second"Tput" == packets out of total 1M that made it out"txint" == transmit completion interrupts seen"Done" == The number of times that the poll() managed to pull all packets
out of the rx ring. The lower the load the more we could clean up the rxring"Ndone" == converse of "Done". The higher the load the more times we couldn’t clean up the rxring.
91http://www.cookinglinux.org/pub/netdev docs/napi-howto.php3.html, http://linux-net.osdl.-org/index.php/NAPI
Wykorzystanie sieciowych urządzeń I/O 319
Stos TCP/IP w jądrze Linuksa: NAPI (cd)92
Nowoczesne karty gigabitowe dostarczają dodatkowych sposobów zmniej-szania liczby przerwań generowanych przy wysyłaniu/odbiorze pakietów(ramek):
• jumbo frame – ramka ethernetowa, której wielkość może zmieniać sięw zakresie 64-9216 B (typowa wielkość ramki ethernetowej wynosi 64-1518 B); przy maksymalnej wielkości ramek oznacza to zmniejszenieliczby przerwań z 82 do 14× 103/sek
• interrupt delay/interrupt coalescence – przerwanie nie jest generowanepo otrzymaniu każdego pakietu, ale pakiet jest umieszczany w pamięci,a przerwanie jest generowane z opóźnieniem (w jednostkach 1.024 µs)
• transmit/receive descriptors – parametry używane przez kartę do okre-ślania liczby buforów przeznaczonych na obsługę ruchu przychodzące-go/wychodzącego (wielkość buforów zależy od MTU)
92http://www.intel.com/design/network/applnots/ap450.htm, Documentation/networking/e1000.txt
Wykorzystanie sieciowych urządzeń I/O 320
Stos TCP/IP w jądrze Linuksa: NAPI (cd)
Documentation/networking/e1000.txt zawiera opis parametrów,których wartości można określić podczas ładownia modułu sterownika,m.in.
• RxDescriptors – Valid Range: 80-256 for 82542 and 82543-basedadapters, 80-4096 for all other supported adapters; Default Value: 256
• RxIntDelay – Valid Range: 0-65535 (0=off); Default Value: 0; Thisvalue delays the generation of receive interrupts in units of 1.024 mi-croseconds.
• TxDescriptors – Valid Range: 80-256 for 82542 and 82543-basedadapters, 80-4096 for all other supported adapters; Default Value: 256
• TxIntDelay – Valid Range: 0-65535 (0=off); Default Value: 64
Użycie: modprobe e1000 TxDescriptors=80,128 RxIntDelay=10,10
Wykorzystanie sieciowych urządzeń I/O 321
Stos TCP/IP w jądrze Linuksa: Process/IRQ Affinity 93
Planista na maszynie SMP próbuje równomiernie obciążać poszczególneCPU, więc przesuwa procesy pomiędzy różnymi procesorami w zależnościod aktualnego obciążenia systemu. Powoduje to konieczność rozgrzewaniapamięci podręcznej, co pociąga za sobą zwiększone opóźnienia w dostępiedo pamięci. sched_setaffinity() służy do wiązania procesu ze wska-zaną jednostką centralną.
W zależności od ustawień I/O APIC przerwania są kierowane do wskaza-nego procesora lub do procesora wykonującego zadanie o najniższym prio-rytecie. Może to prowadzić do przeciążenia CPU lub nadmiernych chybieńw dostępie do pamięci podręcznej, jeśli obsługa przerwania jest realizowanaprzez różne procesory.
$ cat /proc/interrupts$ cat /proc/irq/16/smp_affinity
93http://software.intel.com/en-us/articles/improved-linux-smp-scaling-user-directed-processor-affinity/
Wykorzystanie sieciowych urządzeń I/O 322
Stos TCP/IP w jądrze Linuksa: Process/IRQ Affinity (cd) 94
The ttcp micro-benchmark is used to exercise bulk data transmits (TX) and receives (RX)
between 2 nodes. This micro-benchmark exercises the fast (common) path of the TCP
stacks.
94http://software.intel.com/en-us/articles/improved-linux-smp-scaling-user-directed-processor-affinity/
Wykorzystanie sieciowych urządzeń I/O 323
Stos TCP/IP w jądrze Linuksa: Process/IRQ Affinity (cd)
Wykorzystanie sieciowych urządzeń I/O 324
Stos TCP/IP w jądrze Linuksa: Process/IRQ Affinity (cd)95
95Performance Tuning for Linux Servers, p.464
Wykorzystanie sieciowych urządzeń I/O 325
Stos TCP/IP w jądrze Linuksa: TCP Offload Engine
• Jeśli aplikacje nie używają specjalnych możliwości oferowanych przezstos TCP/IP (filtrowanie pakietów, QoS), to mogą zyskać dzięki ofe-rowanemu przez niektóre karty mechanizmowi przejmowania obsługiwszystkich funkcji stosu TCP/IP. Na technologię TCP Offload Engineskładają się programowe rozszerzenia stosu TCP/IP, które umożliwia-ją wykorzystanie realizowanej sprzętowo przez kartę sieciową obsługistosu.
• TOE to nie TSO!
• Badania pokazują, że obsługa ruchu sieciowego o wielkości 1 Gb wy-maga 1 GHz mocy procesora.
• Rozwiązania TOE są zależne od producenta i różnią się funkcjonalno-ścią (np. brak wsparcia dla filtrowania ruchu). Mogą być przydatne przyobsłudze sieciowych macierzy dyskowych lub w rozwiązaniach klastro-wych.
Wykorzystanie sieciowych urządzeń I/O 326
Diagnostyka: ethtool
NAMEethtool - Display or change ethernet card settings
SYNOPSISethtool -[a|g|i|k|t|s|S] ethXethtool -p ethX [N]
Wykorzystanie sieciowych urządzeń I/O 327
Diagnostyka: ethtool (cd)96
# ethtool peth0Settings for peth0:
Supported ports: [ TP ]Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full1000baseT/Full
Supports auto-negotiation: YesAdvertised link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full1000baseT/Full
Advertised auto-negotiation: YesSpeed: 1000Mb/sDuplex: FullPort: Twisted PairPHYAD: 0Transceiver: internalAuto-negotiation: onSupports Wake-on: umbgWake-on: dCurrent message level: 0x00000007 (7)Link detected: yes
96http://www.fizyka.umk.pl/˜jkob/diagopt/ethtool
Wykorzystanie sieciowych urządzeń I/O 328
Diagnostyka: ip/ifconfg97
# ip -s link show eth0117: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:14:22:c8:e8:92 brd ff:ff:ff:ff:ff:ffRX: bytes packets errors dropped overrun mcast2294099 11323 0 0 0 38TX: bytes packets errors dropped carrier collsns345128 2318 0 0 0 0
# ip -s -s link show eth0117: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000link/ether 00:14:22:c8:e8:92 brd ff:ff:ff:ff:ff:ffRX: bytes packets errors dropped overrun mcast2337142 11757 0 0 0 40RX errors: length crc frame fifo missed
0 0 0 0 0TX: bytes packets errors dropped carrier collsns348247 2346 0 0 0 0TX errors: aborted fifo window heartbeat
0 0 0 0
97http://www.fizyka.umk.pl/˜jkob/diagopt/net
Wykorzystanie sieciowych urządzeń I/O 329
Diagnostyka: ip/ifconfg (cd)
• bytes – całkowita liczba bajtów otrzymanych/wysłanych przez interfejs
• packets – całkowita liczba pakietów otrzymanych/wysłanych przez interfejs
• errors – całkowita liczba błędów odbiornika/nadajnika
• dropped – całkowita liczba pakietów pominiętych z uwagi na niedostateczą wielkośćbufora odbiorczego/nadawczego
• overrun – całkowita liczba pakietów pominiętych, gdyż jądro nie mogło ich obsłu-żyć (kolejny pakiet pojawia się przed zakończeniem obsługi przerwania związanegoz nadejściem poprzedniego pakietu)
• mcast – całkowita liczba pakietów transmisji grupowej (multicastowej)
• carrier – całkowita liczba usterek medium transmisyjnego (np. utrata dostępu do no-śnika)
• collsns – (w sieciach typu Ethernet) całkowita liczba kolizji
• heartbeat – patrz What is SQE Test, and When to Use It?
Wykorzystanie sieciowych urządzeń I/O 330
Diagnostyka: ip/route98
$ ip route show158.75.4.0/23 dev eth0 proto kernel scope link src 158.75.4.9 metric 1default via 158.75.5.190 dev eth0 proto static
[root@hel ~]# ip route show172.18.0.2 dev tun3 proto kernel scope link src 172.18.0.1172.16.0.2 dev tun1 proto kernel scope link src 172.16.0.1172.22.0.2 dev tun2 proto kernel scope link src 172.22.0.1172.20.0.2 dev tun0 proto kernel scope link src 172.20.0.1158.75.63.0/28 dev eth1 proto kernel scope link src 158.75.63.1192.168.2.0/24 dev eth2 proto kernel scope link src 192.168.2.241192.168.10.0/24 via 158.75.5.113 dev eth1192.168.9.0/24 dev eth3 proto kernel scope link src 192.168.9.241158.75.4.0/23 dev eth1 proto kernel scope link src 158.75.5.90172.18.0.0/16 via 172.18.0.2 dev tun3169.254.0.0/16 dev eth3 scope link172.22.0.0/16 via 172.22.0.2 dev tun210.15.0.0/16 dev eth0 proto kernel scope link src 10.15.0.1172.16.0.0/15 via 172.16.0.2 dev tun1172.20.0.0/15 via 172.20.0.2 dev tun0default via 158.75.5.190 dev eth198http://www.fizyka.umk.pl/˜jkob/diagopt/net
Wykorzystanie sieciowych urządzeń I/O 331
Diagnostyka: netstat99
NAMEnetstat - Print network connections, routing tables, interface
statistics, masquerade connections, and multicastmemberships
SYNOPSISnetstat -snetstat -i [-e]netstat -nrnetstat -n [ltup]
99http://www.fizyka.umk.pl/˜jkob/diagopt/net
Wykorzystanie sieciowych urządzeń I/O 332
Diagnostyka: netstat – statystyki TCP/IP100
# netstat -sIp:21154778 total packets received605 with invalid headers10135 with invalid addresses...
Icmp:123289 ICMP messages received8747 input ICMP message failed....
IcmpMsg:InType0: 27InType3: 114338InType8: 8729...
Tcp:61326 active connections openings1455 passive connection openings3595 failed connection attempts...
100http://www.fizyka.umk.pl/˜jkob/diagopt/net
Wykorzystanie sieciowych urządzeń I/O 333
Diagnostyka: netstat – statystyki TCP/IP (cd)101
Udp:6685199 packets received45811 packets to unknown port received....
UdpLite:TcpExt:1 invalid SYN cookies received64 packets pruned from receive queue because of socket buffer overrun9 ICMP packets dropped because they were out-of-window7425 TCP sockets finished time wait in fast timer...
IpExt:InTruncatedPkts: 1InMcastPkts: 15502OutMcastPkts: 2000InBcastPkts: 1014423OutBcastPkts: 50
101http://www.fizyka.umk.pl/˜jkob/diagopt/net
Wykorzystanie sieciowych urządzeń I/O 334
Diagnostyka: netstat – stan połączeń102
# netstat -nActive Internet connections (w/o servers)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 1 158.75.4.9:52393 209.51.159.66:6969 SYN_SENTtcp 0 1 158.75.4.9:52394 209.51.159.66:6969 SYN_SENTtcp 0 0 158.75.4.9:39139 158.75.5.151:5903 ESTABLISHEDudp 0 0 158.75.4.9:58541 158.75.5.90:53 ESTABLISHEDudp 0 0 158.75.4.9:57791 158.75.5.90:53 ESTABLISHEDudp 0 0 158.75.4.9:55371 158.75.5.90:53 ESTABLISHEDActive UNIX domain sockets (w/o servers)Proto RefCnt Flags Type State I-Node Pathunix 2 [ ] DGRAM 385 @/com/ubuntu/upstartunix 2 [ ] DGRAM 645 @/org/kernel/udev/udevdunix 2 [ ] DGRAM 4929 @/org/freedesktop/hal/udev_eventunix 16 [ ] DGRAM 1313943 /dev/log...
102http://www.fizyka.umk.pl/˜jkob/diagopt/net
Wykorzystanie sieciowych urządzeń I/O 335
Diagnostyka: stany gniazda TCP (man netstat)
ESTABLISHED The socket has an established connection (normalny stantransmisji danych).
SYN_SENT The socket is actively attempting to establisha connection (aplikacja rozpoczyna nawązywanie połączenia).
SYN_RECV A connection request has been received from the network(otrzymano żądanie połączenia; oczekiwanie na ACK).
FIN_WAIT1 The socket is closed, and the connection is shuttingdown (aplikacja sygnalizuje zakończenie wysyłania danych).
FIN_WAIT2 Connection is closed, and the socket is waiting fora shutdown from the remote end (druga strona zgadza się nazwolnienie połączenia).
TIME_WAIT The socket is waiting after close to handle packets stillin the network (oczekiwanie na wygaśnięcie wszystkich pakietów).
Domyślna wartość oczekiwania na zakończenie połączenia wynosi
net.ipv4.tcp_fin_timeout = 60
Wykorzystanie sieciowych urządzeń I/O 336
Diagnostyka: stany gniazda TCP (cd)
CLOSED The socket is not being used (brak aktywnych połączeń inieobsłużonych żądań połączenia).
CLOSE_WAIT The remote end has shut down, waiting for the socketto close (druga strona połączenia zainicjowała jego zwolnienie).
LAST_ACK The remote end has shut down, and the socket is closed.Waiting for acknowledgement (oczekiwanie na potwierdzeniezwolnienia połączenia).
LISTEN The socket is listening for incoming connections (serweroczekuje na żądanie połączenia).
CLOSING Both sockets are shut down but we still don’t have allour data sent (obie strony próbują jednocześnie zamknąć połączenie).
UNKNOWN The state of the socket is unknown (stan gniazda jest nieznany).
Wykorzystanie sieciowych urządzeń I/O 337
TCP: procedura zamykania połączenia103
103C.M.Kozierok, TCP/IP Guide
Wykorzystanie sieciowych urządzeń I/O 338
TCP: procedura równoczesnego zamykania połączenia104
104C.M.Kozierok, TCP/IP Guide
Wykorzystanie sieciowych urządzeń I/O 339
Diagnostyka: lsof[root@scobie /tmp]# lsof -i -nCOMMAND PID USER FD TYPE DEVICE SIZE NODE NAMEopera 1562 jkob 97u IPv4 7505687 TCP 158.75.4.9:45387->158.75.5.90:http (ESTABLISHED)opera 1562 jkob 98u IPv4 7505688 TCP 158.75.4.9:37533->195.189.143.187:http (ESTABLISHED)opera 1562 jkob 99u IPv4 7505690 TCP 158.75.4.9:45390->158.75.5.90:http (ESTABLISHED)opera 1562 jkob 100u IPv4 7505691 TCP 158.75.4.9:45391->158.75.5.90:http (ESTABLISHED)operaplug 1698 jkob 120u IPv4 7023378 UDP 158.75.4.9:58541->158.75.5.90:domainrpcbind 1946 rpc 6u IPv4 4493 UDP *:sunrpcrpcbind 1946 rpc 7u IPv4 4497 UDP *:849rpcbind 1946 rpc 8u IPv4 4498 TCP *:sunrpc (LISTEN)sshd 2275 root 3u IPv4 5647 TCP *:ssh (LISTEN)sshd 2275 root 4u IPv6 5649 TCP *:ssh (LISTEN)avahi-dae 2380 avahi 14u IPv4 6216 UDP *:mdnsavahi-dae 2380 avahi 15u IPv4 6217 UDP *:42899master 6440 root 12u IPv4 3332863 TCP 127.0.0.1:smtp (LISTEN)dhclient 9123 root 6u IPv4 7425542 UDP *:bootpccupsd 18068 root 4u IPv4 1994224 TCP 127.0.0.1:ipp (LISTEN)cupsd 18068 root 6u IPv4 1994227 UDP *:ipprpc.statd 18463 rpcuser 6u IPv4 6184292 UDP *:834rpc.statd 18463 rpcuser 8u IPv4 6184298 UDP *:59024rpc.statd 18463 rpcuser 9u IPv4 6184301 TCP *:41198 (LISTEN)openvpn 27275 root 4u IPv4 7505511 UDP *:60882
Wykorzystanie sieciowych urządzeń I/O 340
Wykorzystanie systemu komunikacji sieciowej: netperf
NAMEnetperf - a network performance benchmark
SYNOPSISnetperf [global options] -- [test specific options]
DESCRIPTIONNetperf is a benchmark that can be used to measure variousaspects of networking performance. Currently, its focus ison bulk data transfer and request/response performance usingeither TCP or UDP, and the Berkeley Sockets interface. Inaddition, tests for DLPI, and Unix Domain Sockets, tests forIPv6 may be conditionally compiled-in.
DLPI (Data Link Provider Interface) – standard definiujący interfejs dowarstwy łącza danych modelu OSI.
Wykorzystanie sieciowych urządzeń I/O 341
Diagnostyka: netperf (cd)105
Bulk data transfer performance
• TCP Stream Performance
• TCP Stream Performance
• UDP Stream Performance
• DLPI Connection Oriented Stream Performance
• DLPI Connectionless Stream
• Unix Domain Stream Sockets
• Unix Domain Datagram Sockets
• Fore ATM API Stream
Valid testnames include, but are not limited to, nor always compiled-in:
TCP_STREAM, TCP_SENDFILE, TCP_MAERTS TCP_RR, TCP_CRR, UDP_STREAM, UDP_RR,
DLCO_STREAM, DLCO_RR, DLCL_STREAM, DLCL_RR, STREAM_STREAM, STREAM_RR,
DG_STREAM, DG_RR, LOC_CPU, REM_CPU.105http://www.openss7.org/netperf manual.html, http://www.netperf.org/netperf/training/Netperf.html
Wykorzystanie sieciowych urządzeń I/O 342
Diagnostyka: netperf (cd)
The intent of the STREAMS performance tests is to test forwardunidirectional bulk data transfer in the direction from client toserver. The basic test sequence is as follows:
server: bind()server: listen()client: bind()client: connect()server: accept()client: send() [repeated]server: recv() [repeated]client: shutdown()client: close()server: close()test complete
The intent of the MAERTS performance tests is to test reverseunidirectional bulk data transfer in the direction from server toclient.
Wykorzystanie sieciowych urządzeń I/O 343
Diagnostyka: netperf (cd)
The intent of the SENDFILE performance tests is to test pagedunidirectional stream bulk data transfer in the direction from clientto server. This is similar to the STREAM tests with the variation thatthe BSD-style sendfile() system call is used to transfer data directlyfrom a mmap’ed file to the connection. The basic test sequence is asfollows:
server: bind()server: listen()client: bind()client: connect()server: accept()client: sendfile()server: recv() [repeated]client: shutdown()client: close()server: close()test complete
Wykorzystanie sieciowych urządzeń I/O 344
Diagnostyka: ttcp
NAMEttcp - test TCP and UDP performance
SYNOPSISttcp -t [-u] [-s] [-p port] [-l buflen] [-b size] [-n numbufs] [-A align] \
[-O offset] [-f format] [-D] [-v] host [<in]ttcp -r [-u] [-s] [-p port] [-l buflen] [-b size] [-A align] [-O offset] \
[-f format] [-B] [-T] [-v] [>out]
DESCRIPTIONTtcp times the transmission and reception of data between two systems using the UDPor TCP protocols. It differs from common ‘‘blast’’ tests, which tend to measure theremote inetd as much as the network performance, and which usually do not allowmeasurements at the remote end of a UDP transmission.
Wykorzystanie systemu komputerowego 345
Diagnostyka: lmbench
NAMElmbench - system benchmarks
DESCRIPTIONlmbench is a series of micro benchmarks intended to measure basic operating systemand hardware system metrics. The benchmarks fall into three general classes:bandwidth, latency, and ’’other’’.
Most of the lmbench benchmarks use a standard timing harness described in timing(8)and have a few standard options: paral- lelism, warmup, and repetitions. Parallelismspecifies the number of benchmark processes to run in parallel. This is primarilyuseful when measuring the performance of SMP or distributed computers and can be usedto evaluate the system’s performance scalability. Warmup is the number of minimumnumber of microseconds the benchmark should execute the benchmarked capability beforeit begins measuring performance. Again this is primarily useful for SMP ordistributed systems and it is intended to give the process scheduler time to "settle"and migrate processes to other processors. By measuring performance over variouswarmup periods, users may evaulate the scheduler’s responsiveness. Repetitions isthe number of measurements that the benchmark should take. This allows lmbench toprovide greater or lesser statistical strength to the results it reports. Thedefault number of repetitions is 11.
Wykorzystanie systemu komputerowego 346
Diagnostyka: lmbench (cd)
BANDWIDTH MEASUREMENTSbw_file_rd reading and summing of a file via the read(2) interface.bw_mem_cp memory copy.bw_mem_rd memory reading and summing.bw_mem_wr memory writing.bw_mmap_rd reading and summing of a file via the memory mapping mmap(2) interface.bw_pipe reading of data via a pipe.bw_tcp reading of data via a TCP/IP socket.bw_unix reading data from a UNIX socket.
Wykorzystanie systemu komputerowego 347
Diagnostyka: lmbench (cd)
LATENCY MEASUREMENTSlat_connect the time it takes to establish a TCP/IP connection.lat_ctx context switching; the number and size of processes is varied.lat_fcntl fcntl file locking.lat_fifo ’’hot potato’’ transaction through a UNIX FIFO.lat_fs creating and deleting small files.lat_pagefault the time it takes to fault in a page from a file.lat_mem_rd memory read latency (accurate to the ~2-5 nanosecond range, reported in nslat_mmap time to set up a memory mapping.lat_ops basic processor operations, such as integer XOR, ADD, SUB, MUL, DIV,
and MOD, and float ADD, MUL, DIV, and double ADD, MUL, DIV.lat_pipe ’’hot potato’’ transaction through a Unix pipe.lat_proc process creation times (various sorts).lat_rpc ’’hot potato’’ transaction through Sun RPC over UDP or TCP.lat_select select latencylat_sig signal installation and catch latencies. Also protection fault signal latency.lat_syscall non trivial entry into the system.lat_tcp ’’hot potato’’ transaction through TCP.lat_udp ’’hot potato’’ transaction through UDP.lat_unix ’’hot potato’’ transaction through UNIX sockets.lat_unix_connect
the time it takes to establish a UNIX socket connection.
Wykorzystanie systemu komputerowego 348
Diagnostyka: lmbench (cd)
OTHER MEASUREMENTSmhz processor cycle timetlb TLB size and TLB miss latencyline cache line size (in bytes)cache cache statistics, such as line size, cache sizes, memory parallelism.stream John McCalpin’s stream benchmarkpar_mem memory subsystem parallelism. How many requests can the memory
subsystem service in parallel, which may depend onthe location of the data in the memory hierarchy.
par_ops basic processor operation parallelism.