348
Program wykladu 1 Zaawansowane elementy systemu GNU/Linux: diagnostyka i optymalizacja Jacek Kobus Instytut Fizyki UMK 2008/9 Program wykladu 1. Wprowadzenie 2. Wykorzystanie CPU

diagopt

  • Upload
    jar

  • View
    1.217

  • Download
    4

Embed Size (px)

Citation preview

Page 1: diagopt

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

Page 2: diagopt

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

Page 3: diagopt

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

Page 4: diagopt

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.

Page 5: diagopt

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.

Page 6: diagopt

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.

Page 7: diagopt

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.

Page 8: diagopt

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)

Page 9: diagopt

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.

Page 10: diagopt

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)

Page 11: diagopt

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.

Page 12: diagopt

Wprowadzenie 12

Historia systemów operacyjnych wg E.S.Raymonda4

4UNIX Sztuka programowania, Wydawnictwo Helion, Gliwice, 2004

Page 13: diagopt

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

Page 14: diagopt

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/

Page 15: diagopt

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),

Page 16: diagopt

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)

Page 17: diagopt

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)

Page 18: diagopt

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)

Page 19: diagopt

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

Page 20: diagopt

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)

Page 21: diagopt

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, . . .

Page 22: diagopt

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

Page 23: diagopt

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).

Page 24: diagopt

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.

Page 25: diagopt

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

Page 26: diagopt

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)

Page 27: diagopt

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

Page 28: diagopt

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/

Page 29: diagopt

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

Page 30: diagopt

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”.

Page 31: diagopt

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

Page 32: diagopt

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.

Page 33: diagopt

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.

Page 34: diagopt

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

Page 35: diagopt

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)

Page 36: diagopt

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

Page 37: diagopt

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)

Page 38: diagopt

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

Page 39: diagopt

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

Page 40: diagopt

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.

Page 41: diagopt

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.

Page 42: diagopt

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.

Page 43: diagopt

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).

Page 44: diagopt

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).

Page 45: diagopt

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

Page 46: diagopt

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

Page 47: diagopt

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]

Page 48: diagopt

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.

Page 49: diagopt

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.

Page 50: diagopt

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

Page 51: diagopt

Diagnostyka wykorzystania CPU 51

Jądro systemu GNU/Linux: proces, zadania i wątki

Page 52: diagopt

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

Page 53: diagopt

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

Page 54: diagopt

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

Page 55: diagopt

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.

Page 56: diagopt

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)

Page 57: diagopt

Diagnostyka wykorzystania CPU 57

Jądro systemu GNU/Linux: stany zadania13

13http://www.ibm.com/developerworks/linux/library/l-task-killable/index.html

Page 58: diagopt

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

Page 59: diagopt

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

Page 60: diagopt

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

Page 61: diagopt

Diagnostyka wykorzystania CPU 61

The Native POSIX Thread Library for Linux http://people.redhat.com/drepper/nptl-design.pdf

Page 62: diagopt

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).

Page 63: diagopt

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.

Page 64: diagopt

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

Page 65: diagopt

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

Page 66: diagopt

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

Page 67: diagopt

Diagnostyka wykorzystania CPU 67

• 4 – used super-user privileges

Page 68: diagopt

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

Page 69: diagopt

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

Page 70: diagopt

Diagnostyka wykorzystania CPU 70

Diagnostyka wykorzystania CPU: sysstat

Pakiet sysstat: iostat, mpstat, sar (sadc, sa1, sa2, sadf)

Pakiet procps: vmstat, ps

Page 71: diagopt

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.

Page 72: diagopt

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

Page 73: diagopt

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.

Page 74: diagopt

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

Page 75: diagopt

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.

Page 76: diagopt

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.

Page 77: diagopt

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.

Page 78: diagopt

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

Page 79: diagopt

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.

Page 80: diagopt

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

Page 81: diagopt

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

Page 82: diagopt

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

Page 83: diagopt

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.

Page 84: diagopt

Diagnostyka wykorzystania CPU 84

Diagnostyka wykorzystania CPU: /proc/17

• /proc/cpuinfo

• /proc/loadavg

• /proc/pid

17http://www.fizyka.umk.pl/˜jkob/diagopt/cpuinfo

Page 85: diagopt

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

Page 86: diagopt

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...

Page 87: diagopt

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

Page 88: diagopt

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

Page 89: diagopt

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!

Page 90: diagopt

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.

Page 91: diagopt

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

Page 92: diagopt

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"

Page 93: diagopt

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

Page 94: diagopt

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.

Page 95: diagopt

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 ]

Page 96: diagopt

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

Page 97: diagopt

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

Page 98: diagopt

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

Page 99: diagopt

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.

Page 100: diagopt

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.

Page 101: diagopt

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

Page 102: diagopt

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

Page 103: diagopt

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).

Page 104: diagopt

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.

Page 105: diagopt

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.

Page 106: diagopt

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).

Page 107: diagopt

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.

Page 108: diagopt

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)

Page 109: diagopt

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))

Page 110: diagopt

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.*/

Page 111: diagopt

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

Page 112: diagopt

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.

Page 113: diagopt

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.

Page 114: diagopt

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

Page 115: diagopt

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

Page 116: diagopt

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

Page 117: diagopt

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.

Page 118: diagopt

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)

Page 119: diagopt

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

Page 120: diagopt

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

Page 121: diagopt

Przerwania/wywołania systemowwe 121

Page 122: diagopt

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).

Page 123: diagopt

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.

Page 124: diagopt

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

Page 125: diagopt

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)

Page 126: diagopt

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

Page 127: diagopt

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)

Page 128: diagopt

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

Page 129: diagopt

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 (?)

Page 130: diagopt

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

Page 131: diagopt

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

Page 132: diagopt

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

Page 133: diagopt

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

Page 134: diagopt

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

Page 135: diagopt

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

Page 136: diagopt

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

Page 137: diagopt

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.

Page 138: diagopt

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...]

Page 139: diagopt

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

Page 140: diagopt

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/

Page 141: diagopt

Diagnostyka: CPU 141

Page 142: diagopt

Diagnostyka: CPU 142

Pentium II and Pentium III Processors Architecture34

34http://dynopt.dtc.umn.edu/documents/IA-OPTIMIZATION-Ref-Manual.pdf

Page 143: diagopt

Diagnostyka: CPU 143

Pentium II and Pentium III Processors Architecture35

35http://dynopt.dtc.umn.edu/documents/IA-OPTIMIZATION-Ref-Manual.pdf

Page 144: diagopt

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

Page 145: diagopt

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)

Page 146: diagopt

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

Page 147: diagopt

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/

Page 148: diagopt

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

Page 149: diagopt

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

Page 150: diagopt

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

Page 151: diagopt

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/

Page 152: diagopt

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

Page 153: diagopt

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

Page 154: diagopt

Diagnostyka: CPU 154

Domyślne wartości parametrów są określone w/etc/security/limits.conf.

Page 155: diagopt

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)

Page 156: diagopt

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

Page 157: diagopt

Wykorzystanie pamięci 157

Segmentacja pamięci w i386

Page 158: diagopt

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

Page 159: diagopt

Wykorzystanie pamięci 159

Segmentacja płaska pamięci w i386

Page 160: diagopt

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.

Page 161: diagopt

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

Page 162: diagopt

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.

Page 163: diagopt

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.

Page 164: diagopt

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)

Page 165: diagopt

Wykorzystanie pamięci 165

Stronicowanie dwupoziomowe: strony 4 KB

Page 166: diagopt

Wykorzystanie pamięci 166

Stronicowanie jednopoziomowe: strony 4 MB

Page 167: diagopt

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.

Page 168: diagopt

Wykorzystanie pamięci 168

Page 169: diagopt

Wykorzystanie pamięci 169

Page 170: diagopt

Wykorzystanie pamięci 170

Pamięć wirtualna

Page 171: diagopt

Wykorzystanie pamięci 171

Page 172: diagopt

Wykorzystanie pamięci 172

Page 173: diagopt

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.

Page 174: diagopt

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

Page 175: diagopt

Wykorzystanie pamięci 175

Funkcja mmap pozwala na mapowanie pliku do pamięci w trybie MAP_SHARED,

MAP_PRIVATE, MAP_LOCKED.

Page 176: diagopt

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

Page 177: diagopt

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 ]

Page 178: diagopt

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 ]

Page 179: diagopt

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).

Page 180: diagopt

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.

Page 181: diagopt

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.

Page 182: diagopt

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

Page 183: diagopt

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.)

Page 184: diagopt

Wykorzystanie pamięci 184

independently of the BFD library, so if there is a bug in BFDthen readelf will not be affected.

Page 185: diagopt

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

Page 186: diagopt

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.

Page 187: diagopt

Wykorzystanie pamięci 187

Page 188: diagopt

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.

Page 189: diagopt

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

Page 190: diagopt

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

Page 191: diagopt

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/

Page 192: diagopt

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

Page 193: diagopt

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

Page 194: diagopt

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.

Page 195: diagopt

Wykorzystanie pamięci 195

Pamięć wirtualna: przestrzeń adresowa procesu (cd)

Page 196: diagopt

Wykorzystanie pamięci 196

Pamięć wirtualna: pamięć wysoka

Processor type and features --->High Memory Support (off) --->

(X) off( ) 4GB( ) 64GB

Page 197: diagopt

Wykorzystanie pamięci 197

Pamięć wirtualna: struktura adresowa Linuksa/IA-64

Page 198: diagopt

Wykorzystanie pamięci 198

Pamięć wirtualna: struktura systemu47

47http://www.redhat.com/magazine/001nov04/features/vm/

Page 199: diagopt

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

Page 200: diagopt

Wykorzystanie pamięci 200

Pamięć wirtualna: system biźniaków49

49A.Tanenbaum, Operating Systems, Prentice-Hall 1992, str. 86

Page 201: diagopt

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

Page 202: diagopt

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

Page 203: diagopt

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

Page 204: diagopt

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.

Page 205: diagopt

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

Page 206: diagopt

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.

Page 207: diagopt

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).

Page 208: diagopt

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).

Page 209: diagopt

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.

Page 210: diagopt

Wykorzystanie pamięci 210

Pamięć wirtualna: stany strony pamięci52

52http://www.redhat.com/magazine/001nov04/features/vm/

Page 211: diagopt

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

Page 212: diagopt

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

Page 213: diagopt

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.

Page 214: diagopt

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;

Page 215: diagopt

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.

Page 216: diagopt

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

Page 217: diagopt

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

Page 218: diagopt

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

Page 219: diagopt

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.

Page 220: diagopt

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.

Page 221: diagopt

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.

Page 222: diagopt

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.

Page 223: diagopt

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

Page 224: diagopt

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

Page 225: diagopt

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

Page 226: diagopt

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

Page 227: diagopt

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...

Page 228: diagopt

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

Page 229: diagopt

Wykorzystanie pamięci 229

systemów obsługujących bazy danych ta wartość powinna być co najmniejrówna 128.aa

Page 230: diagopt

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.

Page 231: diagopt

Wykorzystanie blokowych urządzeń I/O 231

Wirtualny system plików57

57Jonathan Corbet, Alessandro Rubini and Greg Kroah-Hartman, Linux Device Drivers

Page 232: diagopt

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

Page 233: diagopt

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

Page 234: diagopt

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).

Page 235: diagopt

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.

Page 236: diagopt

Wykorzystanie blokowych urządzeń I/O 236

Struktura bio60

60R.Love, Linux kernel. Przewodnik programisty, Helion 2004

Page 237: diagopt

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

Page 238: diagopt

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.

Page 239: diagopt

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.

Page 240: diagopt

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).

Page 241: diagopt

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.

Page 242: diagopt

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.

Page 243: diagopt

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)

Page 244: diagopt

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.

Page 245: diagopt

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

Page 246: diagopt

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

Page 247: diagopt

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

Page 248: diagopt

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

Page 249: diagopt

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

Page 250: diagopt

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

Page 251: diagopt

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)

Page 252: diagopt

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

Page 253: diagopt

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.

Page 254: diagopt

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

Page 255: diagopt

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.

Page 256: diagopt

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

Page 257: diagopt

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.

Page 258: diagopt

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...

Page 259: diagopt

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

Page 260: diagopt

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

Page 261: diagopt

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/

Page 262: diagopt

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)

Page 263: diagopt

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

Page 264: diagopt

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

Page 265: diagopt

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.

Page 266: diagopt

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

Page 267: diagopt

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

Page 268: diagopt

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.

Page 269: diagopt

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

Page 270: diagopt

Wykorzystanie blokowych urządzeń I/O 270

System plików: alokacja via ekstenty73

73Performance Tuning for Linux Servers, p.237

Page 271: diagopt

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

Page 272: diagopt

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.

Page 273: diagopt

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.

Page 274: diagopt

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.

Page 275: diagopt

Wykorzystanie blokowych urządzeń I/O 275

System plików z kroniką: działanie74

74Kedar Sovani, Linux: The Journaling Block Device, KernelTrap

Page 276: diagopt

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

Page 277: diagopt

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).

Page 278: diagopt

Wykorzystanie blokowych urządzeń I/O 278

System plików z kroniką: działanie (cd)

Page 279: diagopt

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.

Page 280: diagopt

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

Page 281: diagopt

Wykorzystanie blokowych urządzeń I/O 281

Alokacja bloków w EXT3 i EXT476

76http://ols.fedoraproject.org/OLS/Reprints-2008/kumar-reprint.pdf

Page 282: diagopt

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/

Page 283: diagopt

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

Page 284: diagopt

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

Page 285: diagopt

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

Page 286: diagopt

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.

Page 287: diagopt

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++

Page 288: diagopt

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

Page 289: diagopt

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.

Page 290: diagopt

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).

Page 291: diagopt

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.

Page 292: diagopt

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

Page 293: diagopt

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)

Page 294: diagopt

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

Page 295: diagopt

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

Page 296: diagopt

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

Page 297: diagopt

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).

Page 298: diagopt

Wykorzystanie sieciowych urządzeń I/O 298

Podsystem sieciowy jądra Linuksa86

86 Chen Chen and David Griego, Improving Server Performance

Page 299: diagopt

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 */

Page 300: diagopt

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.. */

Page 301: diagopt

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.

Page 302: diagopt

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.

Page 303: diagopt

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

Page 304: diagopt

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

Page 305: diagopt

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).

Page 306: diagopt

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

Page 307: diagopt

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)

Page 308: diagopt

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

Page 309: diagopt

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

Page 310: diagopt

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

Page 311: diagopt

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

Page 312: diagopt

Wykorzystanie sieciowych urządzeń I/O 312

Stos TCP/IP w jądrze Linuksa: SendFile/Zerocopy (cd)

Page 313: diagopt

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

Page 314: diagopt

Wykorzystanie sieciowych urządzeń I/O 314

Stos TCP/IP w jądrze Linuksa: TSO (cd)

Page 315: diagopt

Wykorzystanie sieciowych urządzeń I/O 315

Stos TCP/IP w jądrze Linuksa: TSO (cd)

Page 316: diagopt

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,

Page 317: diagopt

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

Page 318: diagopt

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

Page 319: diagopt

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

Page 320: diagopt

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

Page 321: diagopt

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/

Page 322: diagopt

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/

Page 323: diagopt

Wykorzystanie sieciowych urządzeń I/O 323

Stos TCP/IP w jądrze Linuksa: Process/IRQ Affinity (cd)

Page 324: diagopt

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

Page 325: diagopt

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.

Page 326: diagopt

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]

Page 327: diagopt

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

Page 328: diagopt

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

Page 329: diagopt

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?

Page 330: diagopt

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

Page 331: diagopt

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

Page 332: diagopt

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

Page 333: diagopt

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

Page 334: diagopt

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

Page 335: diagopt

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

Page 336: diagopt

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).

Page 337: diagopt

Wykorzystanie sieciowych urządzeń I/O 337

TCP: procedura zamykania połączenia103

103C.M.Kozierok, TCP/IP Guide

Page 338: diagopt

Wykorzystanie sieciowych urządzeń I/O 338

TCP: procedura równoczesnego zamykania połączenia104

104C.M.Kozierok, TCP/IP Guide

Page 339: diagopt

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

Page 340: diagopt

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.

Page 341: diagopt

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

Page 342: diagopt

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.

Page 343: diagopt

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

Page 344: diagopt

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.

Page 345: diagopt

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.

Page 346: diagopt

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.

Page 347: diagopt

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.

Page 348: diagopt

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.