Documente Academic
Documente Profesional
Documente Cultură
Master IISC 1
- 2011 -
Cuprins
Cuprins...................................................................................................................................................2
Introducere Ubuntu...............................................................................................................................3
Nucleul Linux..........................................................................................................................................3
Compilarea unui kernel Linux.................................................................................................................4
Opțiunile unui kernel Linux................................................................................................................4
Hyperthreading..................................................................................................................................6
Virtual Box..........................................................................................................................................6
Pași de compilare...............................................................................................................................7
Aplicații de test.......................................................................................................................................9
Anexa: Programul de benchmark.........................................................................................................13
Introducere Ubuntu
Ubuntu este un sistem de operare bazat pe Linux pentru computere personale, server-e și
netbook-uri. Rudă apropiată a sistemului de operare Debian GNU/Linux, Ubuntu se dorește a
fi ușor de instalat și folosit, des actualizat și neîngrădit de restricții legale. Ubuntu este
sponsorizat de Canonical Ltd. o companie privată fondată de antreprenorul sud-african Mark
Shuttleworth.
Numele sistemului de operare provine din limba zulusă, unde „ubuntu” este o ideologie ce
poate fi definită pe scurt drept „credința într-o legatură universală ce unește întreaga
omenire”. Sloganul adoptat, „Linux pentru ființe umane” încorporează unul din scopurile
declarate ale proiectului, acela de a face din Linux un sistem de operare popular și ușor de
folosit. Cea mai recentă versiune cu asistență pe termen lung este Ubuntu 10.04 LTS „Lucid
Lynx” și a fost lansată pe data de 29 aprilie 2010.
Nucleul Linux
Nucleul Linux sau kernel-ul reprezintă nucleul sistemului de operare GNU/Linux, fiind
unul dintre cele mai cunoscute exemple de software liber şi dezvoltare de soft liber sau open
source. Termenul Linux se referă la nucleul Linux dar se foloseşte pentru descrierea
întregului sistem de operare. Nucleul, deşi a fost dezvoltat iniţial pentru microprocesorul de
tip Intel 386, la ora actuală a ajuns să suporte o mare gamă de arhitecturi şi microprocesoare,
care sunt folosite pentru supercomputere, PC-uri sau la sisteme încapsulate ca telefoane
mobile sau video recordere. Nucleul Linux este scris aproape în întregime în limbajul de
programare C, împreună cu nişte extensii GNU C şi cu câteva linii de cod scrise în limbajul
de asamblare. Distribuţiile de software bazate pe nucleul Linux se numesc distribuţii
Gnu/Linux.
Nucleul ca atare este aplicaţia de sistem de nivel scăzut (low-level) care crează nivelul
de abstractizare al componentelor hardware, controlează accesul la componenta hdd
(harddisk) şi la sistemul de fişiere, permite accesul distribuit la reţea, modul de lucru
multitasking şi constrângerile de securitate informatică. În schimb trebuie să înţelegem că
nucleul Linux nu este un sistem de operare complet, cum spun sau cum cunosc mulţi oameni.
Dar să facem un foarte scurt istoric despre apariţia nucleului Linux şi dezvoltarea lui prin
apariţia a mai multor versiuni.
Aşadar, concepţia de a face un sistem de operare simplu îi aparţine lui Linus Torvalds,
şi datează din anul 1991, an în care trimite un mesaj grupului de ştiri comp.os.minix, în care
declară că scrie un sistem de operare simplu (gratis), fiind un hobby de al lui. Mai declară
printre altele că este scris în C dar unele fişiere sunt scrise în limbaj de asamblare. Tot în
acelaşi an lansează prima versiune de nucleu Linux şi anume versiunea 0.01 care conţine
10.239 linii de cod. După mai multe versiuni, printre care reuşeşte să lanseze şi prima
versiune de self-hosted adică putându-se compila Linux sub Linux, şi în 1992 să poată rula un
X-Windows System, reuşeşte să ajungă la o versiune care deja conţine peste 5.900.000 linii de
cod, versiune care este desigur mult mai stabilă şi mai complexă. În prezent nucleul Linux
(sau kernel-ul) este în contiună dezvoltare. Fiind open source este pus la dispoziţia
programatorilor să poată efectua modificări la liberă alegere cu condiţia ca modificările să fie
puse la rândul lor pe internet, liber.
În concluzie, din cele amintite mai sus reiese încă odată de ce Linux este o platformă
ideală pentru dezvoltare software.
Avantaje și dezavantaje:
Această opţiune este utilizată pentru a permite acces la codul de kernel la un grad mai
mare sau mai mic. Mai precis este vorba de dreptul proceselor cu prioritate scăzută de
a executa un sistem de apel. Ea are trei valori posibile:
- No Forced Preemption (server): Această setare dă cel mai mare throughput. Acest
lucru ar trebui să fie alegerea pentru un server sau un sistem de calcul ştiinţific.
- Voluntary Kernel Preemption (desktop): Această setare adaugă mai multe credite
explicit la kernel în scopul de a minimiza latenţa de rescheduling(de reeşalonare).
Procese cu prioritate scăzută de executare de cod kernel pot să se autoprivilegieze,
pentru a permite prelucrarea de evenimente interactive. Acesta are rezultate într-un
sistem mult mai reactiv cu randament uşor mai scăzut.
e. Processor Type And Features >> Numa Memory Allocation and Scheduler
Support
De obicei, codul kernel-ul îşi o locaţie fixă în memorie. Această opţiune permite kernel-ul
să fie într-o locaţie diferită. Construirea unui nucleu relocabil face imaginea de kernel sa
fie cu 10% mai mare, sporind astfel timpul de boot.
g. Power Management and ACPI Features >> CUP Frequency Scaling >> Default
CPUFreq Governor
Hyperthreading
Hyperthreading-ul este un termen lansat de Intel pentru implementarile de multithreading
simultane implementate pe procesoarele Atom, Core i3,Core i5, Core i7, Itanium, Pentium 4
și Xenon.
Virtual Box
Ca o observație foarte importantă, în mediul virtual totul se produce mult mai rapid, când totul
ar trebui să fie mai greu, pentru că deja mai este un OS care folosește resursele PC, dar nu este
așa.
Cu ajutorul asistentului de creare cream masina virtuala de care avem nevoie alegand numele,
compatibilitatea, memoria RAM și discul virtual pe care vrem să o de dicăm noii mașini
virtuale la care ea va avea acces.
Pași de compilare
Acest pas ne învață cum sa obținem pachetele sursa ale kernel-ului de Linux a versiunii 2.6.35
folosită în acest proiect.
# cd /usr/src
# bzip2 -d linux-source-2.6.35.tar.bz2
# tar xvf linux-source-2.6.35.tar
# ln -s linux-source-2.6.35 linux
# cd linux
Pas 4: Fișierul de configurare este unul ascuns și deține configurația kernelului ce este
instalat.Copierea acestuia se face cu ajutorul comenzii:
Pas 8: Următorul pas este de a crea o extensie pentru kernel pentru ca versiunile ulterioare să
poata fi diferențiate.
#dpkg -i linux-image-2.6.35-custom.1.0_custom_i386.deb
#dpkg -i linux-headers-2.6.35-custom.1.0_custom_i386.deb
Dupa instalare, se restartează sistemul de operare iar noul kernel va apărea în meniul GRUB. Se
selectează modul de lucru cu acest nou kernel instalat.
În figurile de mai jos se pot observa câțiva pași din setul de pași enumerați mai sus de
compilare a unui kernel Linux.
Figura a. Ștergerea fișierelor ce indică modificările făcute
Figura c. Desfășurarea procesului de instalare a kernel-ului. Cel mai costisitor proces din punct de vedere al
timpului(aprox. 6 ore)
Aplicație de test
Pentru a pune în evidență opțiunea de compilare a kernelului în cele două variante, am folosit
un program de înmulțire a două matrici de dimensiuni suficient de mari.
Caracteristicile CPU și de memorie ale sistemului folosit(Acer Aspire 5520G) sunt redate în
figurile de mai jos:
Figura 1. CPU Figura 2. Memorie
În primul caz în care opțiunea de SMT scheduler support este activată am folosit un număr de
100 de thread-uri pentru a putea realiza înmulțirea. Am contorizat timpul în care această
operație este realizată și am afișat folosind System Monitoring utilizarea celor două
procesoare.
Figura 2. Starea procesorului în timpul rulării aplicației de test. Se poate observa cu ușurință utilizarea la
maximum a celor două procesoare deținute de sistem.
Figura 3. Rezultatele obținute în urma rulării aplicației de test în cazul opțiunii SMT inactive.
Figura 4. Rezultatele obținute în urma rulării aplicației de test în cazul opțiunii SMT active.
Un alt nbench pentru care s-au facut teste este luat de la adresa
http://www.tux.org/~mayer/linux/nbench-byte-2.2.3.tar.gz.
Figura 5. Rezultatele obținute în urma rulării aplicației de test în cazul opțiunii SMT active.
Figura 6. Rezultatele obținute în urma rulării aplicației de test în cazul opțiunii SMT inactive.
Comparând cele două imagini cu rezultate de mai sus,se poate observa cu ușurință că în cazul
opțiunii SMT active se obțin performanțe mai bune.
Concluzii
Această opțiune a fost introdusă pentru a putea fi pusă la dispoziția procesoarelor cu mai mult de un
nucleu pentru a îmbunătăți viteza de execuție. Pentru procesoarele cu un singur nucleu de procesare
această opțiune duce la scăderea performanțelor sistemului, insă pentru cele cu mai multe procesoare
rezultatul ar fi cu totul altul si anume o crestere a performantelor.
Resurse
[1] http://easylinuxcds.com/blog/?p=3244
[2] http://www.scribd.com/doc/39184485/Compiling-Linux-Kernel
[3] http://ubuntuforums.org/showthread.php?t=60264
[4] http://incearca.ubuntu.ro/
[5] http://en.wikipedia.org/wiki/Hyper-threading
Anexa: Programul de benchmark
/* matrix-alternat.c */
#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>
#include<sys/time.h>
#include <time.h>
#define dim 1000
int nr_thread;
float a[dim][dim],b[dim][dim]; /*matricele a şi b*/
float c[dim][dim];
pthread_t *vector;
// functia apelata de thread-uri;
//fiecarui thread I se aloca o anumita parte pentru calculul matricei c
void *thread_calcul(void *var)
{
int nr=*(int *)var;
int i,j,k;
/*calcul produs*/
for(i=nr;i<dim;i=i+nr_thread)
for(j=0;j<dim;j++)
{
c[i][j]=0.0;
for(k=0;k<dim;k++)
c[i][j]+=a[i][k]*b[k][j];
}
pthread_exit(NULL);
}
int main()
{
int i,j,k;
int *index;
float *temp;
time_t t_start,t_stop;
// initializare matrice ; a si b sunt cele ce se inmultesc
for(i=0;i<dim;i++)
for(j=0;j<dim;j++)
{
a[i][j]=random();
b[i][j]=random();
}
/*
printf("\nMatricea A:\n");
for (i=0;i<dim;i++)
{
for (j=0;j<dim;j++)
printf("%f ",a[i][j]);
printf("\n");
}
printf("\nMatricea B:\n");
for (i=0;i<dim;i++)
{
for (j=0;j<dim;j++)
printf("%f ",b[i][j]);
printf("\n");
}
*/
printf("\nIntroduceti nr de thread-uri nr_thread=");
fflush(stdout);
scanf("%d",&nr_thread);fflush(stdin);
vector=(pthread_t *)calloc(nr_thread,sizeof(pthread_t));
index=(int *)calloc(nr_thread,sizeof(int));
t_start=time(NULL);
// creare thread-uri
for(i=0;i<nr_thread;i++)
{
index[i]=i;
pthread_create(&vector[i],NULL,thread_calcul,(void *)&index[i]);
}
//omorare thread-uri
for(i=0;i<nr_thread;i++) pthread_join(vector[i],NULL);
t_stop=time(NULL);
/*
for(i=0;i<dim;i++)
{
for(j=0;j<dim;j++)
printf("%f", c[i][j]);
}
*/
return 0;
}