Meeskond "VRAM"

From ICO wiki

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

  1. Võrgu läbilaskevõime on liiga madal sellise hulga andmete jaoks?
  2. Võrgu failisüsteem on aeglane?
  3. Programmid (N: Eclipse ja Firefox) tekitavad käivitamisel ja kasutamisel suurt hulka võrguliiklust?
  4. SAMBA tekitab iga päringu puhul asjatult suurt liiklust?
  5. 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

  1. Mõõta, kui palju kasutab Firefox ja Eclipse ketta ressurssi
  2. Mõõta, kui palju langeb võrgukiirus mitmete kasutajate samaaegsel kirjutamisel võrgukettale
  3. Mõõta, kui palju tekitab SAMBA võrguliiklust
  4. Mõõta, kas sama probleem esineb ka teise serveri tarkvara peal
  5. 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

  1. Ensure your linux kernel and filesystem supports File Capabilities and also you have installed necessary tools.
  2. "setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap"
  3. 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

  1. Create user "wireshark" in group "wireshark".
  2. "chgrp wireshark /usr/bin/dumpcap"
  3. chmod 754 /usr/bin/dumpcap
  4. "setcap 'CAP_NET_RAW+eip CAP_NET_ADMIN+eip' /usr/bin/dumpcap"
  5. 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


Koormustabel.png

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;