Meeskond "VRAM"
Intensiivnädala ülesanne
Mis põhjustab arvutiklasside Linuxite hangumist, kui on palju kasutajaid korraga ning kas seda on võimalik parandada?
Võimalikud põhjused
- Võrgu läbilaskevõime on liiga madal sellise hulga andmete jaoks?
- Võrgu failisüsteem on aeglane?
- Programmid (N: Eclipse ja Firefox) tekitavad käivitamisel ja kasutamisel suurt hulka võrguliiklust?
- SAMBA tekitab iga päringu puhul asjatult suurt liiklust?
- Solaris põhjustab probleemi, peaks proovima mõnda muud serveri tarkvara (Ubuntu Server)?
- Ei tea miks failisüsteem on aeglane
- Pole teada, kui kiire peaks võrgufailisüsteem olema, et programmide kasutamise kogemus oleks võrdväärne kohalikku ketta kasutamisega.
Eesmärgid
- Mõõta, kui palju kasutab Firefox ja Eclipse ketta ressurssi
- Mõõta, kui palju langeb võrgukiirus mitmete kasutajate samaaegsel kirjutamisel võrgukettale
- Mõõta, kui palju tekitab SAMBA võrguliiklust
- Mõõta, kas sama probleem esineb ka teise serveri tarkvara peal
- Mõõta, kui palju paraneb kasutajate võrgukettale kirjutamise kiirus, kui LDAP audentimine vahelt ära võtta
Mida on vaja eesmärkide täitmiseks teha
- Õppida kasutama võrgufailisüsteemi mõõtmise ja testimise tarkvarasid (Iozone, dbench, bonnie++)
- Õppida mõõtma võrgufailisüsteemi kirjutamise kiirust
Tegevused
ESMASPÄEV 28.03.2011
Eesmärgid
- Probleemi püstitamine ja analüüsimine.
- Tutvumine arvutiklassi Linuxiga - [1].
- Probleemi lahendamiseks vajalike tööriistadega tutvumine ning nende hankimine.
- Testimiseks vajaliku töökeskkonna loomine.
Tegevus
Esmalt tutvusime arvutiklassi Linuxiga, et saada üldpilt probleemi olemusest. Järgnevalt jagasime meeskonnasiseselt tööjaotuse. Risto ja Vadim loovad probleemi lahendamiseks vajaliku test töökeskkonna, võttes arvutiklassis asuva estobuntu versiooni tõmmise ning luues virtuaalse koopia arvutiklassi Linuxist. Arvi ja Meelis tutvuvad testimiseks vajalike tööriistadega, IOzone ja teiste võimalike alternatiividega ning hiljem tutvustavad ideid ka teistele meeskonnaliikmetele.
Testimiseks vajaliku töökeskkonna lõime wiki artikli "Arvutiklassi Linux - Installeerimine" juhendi järgi.
- Paigaldame subversion
- Paigaldame ruby
- Uuendame süsteemi
sudo -i aptitude install subversion ruby svn co http://robot.itcollege.ee/svn/marcus/estobuntu-post-install/ cd estobuntu-post-install apt-get update apt-get dist-upgrade ./estobuntu.rb
Erinevate pakendamata programmide installeerimiseks muutsime local_install.sh eemaldades sealt read, mis puudutasid windows operatsiooni süsteemi ning seejärel käivitasime antud skripti.
Päeva lõpuks saime erinevad test töökeskkonnad valmis testimiseks.
Estobuntu 10.05 x64 - Arvutiklassi Linux
Ubuntu 10.10 x64 - Linuxi uuem versioon
TEISIPÄEV 29.03.2011
Järgnevalt tegime 2 katset
- Tõmbasime ubuntu.iso kohalikule kettale, mille tulemuseks oli keskmiselt 47,9MB/s
- Tõmbasime ubuntu.iso võrgu kettale, mille tulemuseks oli keskmiselt 600K/s
Alustasime testimist Iozone-ga kuid testimine ebaõnnestus, kuna püüdisme iga testi järel võrgukausta uuesti külge võtta (unmount > mount), et cache tühjendada.
Pärast -U võtme eemaldamist käsust, hakkas testimine tööle.
Bonnie++'ga testimine ei ole võimalik, kuna programm nõuab, et testimisfail oleks vähemalt kaks korda suurem, kui on arvutil muutmälu. Aga nii mahukas testimine võtab aeglase võrgukiiruse juures liiga palju aega ning lisaks on kodukataloogides ainult 500MB ruumi.
Alustasime tarkvara otsimist, millega saaks jäädvustada, kui palju kirjutatakse ja loetakse võrgukettalt, kui töötavad õppetöös kasutatavad programmid (N: firefox, eclipse)
Leidsime programmid: IOtop, speedometer, nethogs, iopp, pidstat (sysstat)
Homme vaatame, mis nendega teha annab ja sooritame paar mõõtmist.
Over&Out!
KOLMAPÄEV 30.03.2011
Hommikul tekkis probleem VirtualBoxiga.
Probleem:
Kernel driver not installed (rc=-1908)
The VirtualBox Linux kernel driver (vboxdrv) is either not loaded or there is a permission problem with /dev/vboxdrv. Please reinstall the kernel module
by executing '/etc/init.d/vboxdrv setup' as root. Users of Ubuntu, Fedora or Mandriva should install the DKMS package first. This package keeps
track of Linux kernel changes and recompiles the vboxdrv kernel module if necessary.
Failed to open a session for the virtual machine estobuntu.
The virtual machine 'estobuntu' has terminated unexpectedly during startup with exit code 1.
Lahendus: Uuele kernerile headeri lisamine ning kõikidele klassiarvutitele käsu '/etc/init.d/vboxdrv setup' rakendamine.
Eile leitud programmidest võtsime kasutusele IOtop'i ja pidstat'i. Iopp ei sobinud, kuna seda ei ole ametlikes pakihaldurites ja vajab eraldi kompileerimist ning manuaalset paigaldamist. Nethogs käivitub ainult juurkasutaja õigustes, seega ei sobi meie puhul. Speedometer mõõtis kogu võrguliidese liiklust, mitte meile vajalikku kettale kirjutamist ja kettalt lugemist.
Sooritasime järgmised mõõtmised:
Jälgisime, kui palju kirjutatakse võrgukettale teatud aja jooksul
Firefoxi ja Eclipse käivitamise puhul ühes masinas kirjutatakse võrgukettale väga vähe andmeid (50-100 kB).
Võrgukasutuse mõõtmise näiteskript
#!/bin/bash
LC_ALL=C
RX1=$(ifconfig | grep RX | head -1 | cut -d: -f2 | cut -d" " -f1)
TX1=$(ifconfig | grep TX | head -1 | cut -d: -f2 | cut -d" " -f1)
echo "Stardin Eclipse'i"
eclipse > /dev/null 2>&1 &
ECLIPSE_PID=$(ps -ef | grep eclipse | grep java | awk '{print $2;}')
sleep 10
echo "Tapan Eclipse'i"
killall eclipse
kill $ECLIPSE_PID
RX2=$(ifconfig | grep RX | head -1 | cut -d: -f2 | cut -d" " -f1)
TX2=$(ifconfig | grep TX | head -1 | cut -d: -f2 | cut -d" " -f1)
RX=$(($RX2-$RX1))
TX=$(($TX2-$TX1))
#echo "kokku RX baitides: $RX"
#echo "kokku TX baitides: $TX"
RXKB=$(echo "scale=2;$RX/1024"|bc -l)
TXKB=$(echo "scale=2;$TX/1024"|bc -l)
echo "kokku RX: $RXKB/KB"
echo "kokku TX: $TXKB/KB"
Testimise skripti link
# Käsureal täitmiseks
wget "http://enos.itcollege.ee/~metamm/m66tja.sh"
chmod +x m66tja.sh
./m66tja.sh
Koormuse skripti link
wget "http://enos.itcollege.ee/~mernits/failid/small-file-test.pl"
chmod +x small-file-test.pl
./small-file-test.pl > mingi_nimi.txt
WireSharkiga uurimine
Probleem: Kuidas käivitada WireShark ilma root õigusi omamata?
Setting network privileges for dumpcap
- Ensure your linux kernel and filesystem supports File Capabilities and also you have installed necessary tools.
- "setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap"
- Start Wireshark as non-root and ensure you see the list of interfaces and can do live capture.
Limiting capture permission to only one group
- Create user "wireshark" in group "wireshark".
- "chgrp wireshark /usr/bin/dumpcap"
- chmod 754 /usr/bin/dumpcap
- "setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap"
- Ensure Wireshak works only from root and from a user in the "wireshark" group
Link: http://wiki.wireshark.org/CaptureSetup/CapturePrivileges
NELJAPÄEV 31.03.2011
Lõime virtuaalse Ubuntu serveri samade parameetritega nagu Solarise server
- 4GB operatiivmälu
- 2-tuumaline protsessor
- 32GB ketta suurus
Klassiarvutis konfigureerisime ssh ühenduse kaudu virtuaalset Ubuntu serverit
- Konfigureerisime staatilise ip aadressi, võrgumaski, vaikelüüsi
nano /etc/network/interfaces
- Uuendasime virtuaalset Ubuntu serverit
sudo apt-get update
sudo apt-get upgrade
- Muutsime kasutaja student parooli
passwd student
LDAP kliendi audentimise konfigureerimine
Paigaldasime järgmised pakid:
apt-get install libpam-ldap
Paigaldamise käigus küsiti järgmised küsimused:
- The address of the LDAP server used: ldaps:///host 172.16.0.148
- The distinguished name of the search base: dc=itcollege,dc=ee
- The LDAP version to use: 3
- Make local root Database admin: no
- Does the LDAP database require login? no
apt-get install libnss-ldap nss-updatedb libnss-db nscd
Tegime Name Service Cache Daemon'le restardi:
service nscd restart
Installisime samba:
apt-get install samba smbfs
Vajadusel käivitamine:
service smbd start
Konfigureerisime samba konfiguratsiooni faili:
nano /etc/samba/smb.conf
Tuleb lisada:
[global]
passdb backend = ldapsam:"ldap://172.16.0.148"
ldap admin dn = "uid=robot,ou=People,o=itcollege.ee,dc=itcollege,dc=ee"
ldap group suffix = ou=Groups
ldap idmap suffix = ou=Idmap
ldap machine suffix = ou=Computers
ldap replication sleep = 2000
ldap suffix = dc=itcollege,dc=ee
ldap ssl = no
ldap timeout = 3
ldap user suffix = ou=People
usershare allow guests = Yes
panic action = /usr/share/samba/panic-action %d
[earl global]
unix charset = iso8859-1
workgroup = ITCOLLEGE
interfaces = 172.16.0.175/24
; password server = 172.16.0.175
passdb backend = ldapsam:"ldap://172.16.0.148"
; passdb backend = ldapsam:"ldap://172.16.0.150"
; log level = 9
log file = /opt/samba/var/log.%m
logon path =
logon drive = C:
logon home = C:\Documents and Settings\%U
domain logons = Yes
os level = 200
wins support = Yes
ldap admin dn = "cn=Directory Manager"
ldap group suffix = ou=Groups
ldap idmap suffix = ou=Idmap
ldap machine suffix = ou=Computers
ldap suffix = o=itcollege.ee,dc=itcollege,dc=ee
ldap ssl = no
ldap timeout = 60
ldap user suffix = ou=People
ldapsam:trusted = yes
client ntlmv2 auth = yes
[homes]
comment = Home Directories
valid users = %S
create mask = 0700
directory mask = 0700
browseable = No
browsable = No
read only = No
[lab]
comment = Labori kaust
path = /var/data/lab
valid users = @libuuid
read list = @libuuid
write list = @libuuid
force group = libuuid
read only = No
create mask = 0664
directory mask = 0770
Muutsime failide konfiguratsiooni
/etc/pam.d/common-account
Lisasime:
account sufficient pam_ldap.so
Muutsime faili:
/etc/pam.d/common-auth
Lisasime:
auth sufficient pam_ldap.so
Muutsime faili:
/etc/pam.d/common-password
Lisasime:
password sufficient pam_ldap.so
Tsharki: tulemus mitme kasutajaga
===================================================================
SMB RTT Statistics:
Filter: ip.addr==192.168.6.4
Commands Calls Min RTT Max RTT Avg RTT
Close 194 0.00016 0.00585 0.00038
Rename 11 0.00079 0.00153 0.00101
Read AndX 28 0.00017 0.00089 0.00042
Write AndX 228 0.00018 0.01307 0.00137
NT Create AndX 182 0.00031 0.00282 0.00054
Transaction2 Commands Calls Min RTT Max RTT Avg RTT
FIND_FIRST2 528 0.00051 0.01478 0.00151
FIND_NEXT2 1 0.00297 0.00297 0.00297
QUERY_PATH_INFO 30051 0.00016 0.01881 0.00048
SET_PATH_INFO 60 0.00019 0.00260 0.00069
SET_FILE_INFO 34 0.00014 0.00100 0.00035
NT Transaction Commands Calls Min RTT Max RTT Avg RTT
===================================================================
Log fail asub siin: http://enos.itcollege.ee/~vvinogra/IntensiveWeek/tshark_log.txt
REEDE 01.04.2011
Katsetused
Testimiseks kirjutasime skripti, mis loob 1000 väikest faili ning kustutab need ära ja nii 10 korda.
Tegime testi 1 arvutiga
Keskmine failide loomise aeg oli: 5,51 sekundit
Keskmine failide kustutamise aeg oli: 2,33 sekundit
Tegime testi 10 arvutiga
Keskmine failide loomise aeg oli: 12,71 sekundit
Keskmine failide kustutamise aeg oli: 5,73 sekundit
Seega, kasutajate arvu suurenedes probleem eskaleerub.
Samba võrgu kasutus
Uurisime kui palju tekitab SAMBA liiklust:
Kasutasime programmi tshark (wiresharki käsurea versioon)
Salvestasime samba paketid kahe arvuti puhul, mis osalesid eelmises katses
Tulemuseks: samba poolt tekitatud liiklus on hõre, kirjutamise puhul tekitati testi jooksul kõigest ~220 call'i
Seega, ei jää asi SAMBA taha
Solaris Server
Järgmisena testisime kas probleem on serveris.
Tekitasime uue virtuaalse Ubuntu serveri, millele võtsime SAMBAga külge ühe kasutaja kodukataloogi ning panime LDAP'i vastu autentima.
Selle tulemused olid sarnased eelnevatega, mis tähendas seda,et probleem ei olnud ka Solarise serveris.
LDAP
Õppejõu masina tagant testides (1 kasutaja puhul) tuli välja, et LDAP ei cachinud kirjutamisi ehk ta autentis iga paketi uuesti. Iga paketi audentimine väljendus ka tsharki tulemuses(QUERY_PATH_INFO 30051) kus oli siis failide kontrollide arv 30051.
Suure tõenäosusega tuleneb arvutiklasside Linuxite hangumine sellest.
Nädala kokkuvõte
Soovitused
Intensiivõppe nädal võiks olla pikem kui 1 nädal (5 päeva), sest probleemi lahendamise käigus tekivad küsimused ja uued, ootamatud probleemid, mis vajavad põhjalikku uurimist. Meie arvates oleks sobilik aeg 2 nädalat.
Tulem
Kõige rohkem õppisime selle nädala jooksul kasutama Linuxi käsurida ning ka skriptide kirjutamist. Küsimused, mis tekkisid arutasime läbi ning lahendasime koos. Meeskonna töö sujus. Üleüldiselt on see väga hea koht praktika ja töökogemuse jaoks.
Klass 410 koormustesti tulemused
Testis kasutasime koormuse tekitamiseks skripti, mis tekitab kasutaja võrgukettale 1000 väikest faili ning kustutab need ja nii 10 korda. Testimine leidis aset klassiruumis 410. Alustasime testi läbiviimist ühe arvutiga ja lisasime järk-järgult masinaid juurde kuni lõpuks osalesid testis kõik klassi arvutid.
Tulemused näitavad, kuidas kasutajate arvu suurenedes kasvab ka võrgukettale kirjutamise aeg mitmekordselt.
1-arvuti >> 0:57
2-arvutit >> 0:58
5-arvutit >> 1:39
10-arvutit >> 3:09
15-arvutit >> 4:19
20-arvutit >> 5:19
26-arvutit >> 8:35
Koormustesti skripti sisu
#!/usr/bin/perl
use Time::HiRes;
$nt = 10; # Number of test runs
$nf = 1000; # Number of files to create
$fs = 20000; # Size of the file to be created
$dblock = "";
for($i = 0; $i < $fs; $i++) {
$dblock .= "\0";
}
$| = 1; # Disable output buffering;
use POSIX qw(strftime);
my $kuupaev= strftime('-%m_%d-%H:%M:%S', localtime);
open FH, ">/tmp/tulemus.txt";
# Loop tests
for($a = 0; $a < $nt; $a++) {
my $s, $e;
$s = [ Time::HiRes::gettimeofday( ) ];
print FH "Creating ";
$d = $nf / 40;
for($i = 0; $i < $nf; $i++) {
print FH "." if($i % $d == 0);
open TMPF, ">kala$i" or die $!;
print TMPF $dblock;
close(TMPF);
}
$e = Time::HiRes::tv_interval( $s );
print FH " $e sec\n";
$s = [ Time::HiRes::gettimeofday( ) ];
print FH "Deleting ...";
unlink <kala*>;
$e = Time::HiRes::tv_interval( $s );
print FH " $e sec\n";
}
close FH;