# [sys-kernel] Tuning Kernela Algorytmami Genetycznymi

## martin.k

Witam!

Jake Moilanen podesłał ciekawy zestaw łatek na kernela 2.6.9, który pozwala na podrasowanie go algorytmami genetycznymi. Sprawa warta przetestowania.

Łatki pozwalają na naukę schedulera i dostosowanie się do obecnego zapotrzebowania na interaktywność.

Właśnie sobie testuję, tak z ciekawości [anticipatory scheduler]. Wykorzystanie algorytów genetycznych i procesu evolucji do optymalizacji schedulera brzmi trochę jak science fiction. Tak do biurkowego zastosowania to pewnie będzie za mała interaktywność (tak mnie uświadomił Con Kolivas). No ale do zastosowań serwerowych, szczególnie do serwerów gier, to jak znalazł (znany zestaw wykonywanych procesów, bez wielkich, częstych zmian).

Panowie i Panie do testów!

Więcej info na kerneltrap.org

a tu łatki:

http://kerneltrap.org/files/jeremy/genetic-lib.patch

http://kerneltrap.org/files/jeremy/genetic-io-sched.patch

http://kerneltrap.org/files/jeremy/genetic-as-sched.patch

http://kerneltrap.org/files/jeremy/genetic-zaphod-cpu-sched.patch

--------------------------------------------------------------------

Mój xine teraz śmiga, że ho ho. Nawet się nie zająknie.

----------

## ai

ej chcialem to sprobowac ale nie umiem tego spatchowac noo  :Razz: 

caly czas mi wyskakuja jakies hooks failed itp. 

moze maly guide?  :Smile: 

----------

## martin.k

Mały tutorial...

Co będzie potrzebne do przetestowania algorytmów genetycznych:

1) linux-2.6.9.tar.bz2

2) http://kerneltrap.org/files/jeremy/genetic-lib.patch

3) http://kerneltrap.org/files/jeremy/genetic-io-sched.patch

4) http://kerneltrap.org/files/jeremy/genetic-as-sched.patch

5) http://prdownloads.sourceforge.net/cpuse/patch-2.6.9-spa_zaphod_FULL-v6.0?download

6) http://kerneltrap.org/files/jeremy/genetic-zaphod-cpu-sched.patch

7) http://prdownloads.sourceforge.net/cpuse/gcpuctl_hydra-v1.6.tar.gz?download

Po ściągnięciu kernela należy go rozpakować i skopiować ściągnięte patche do folderu ze źródłami. Potem zaaplikować patche. Jako pierwszy patch-2.6.9-spa_zaphod_FULL-v6.0, gdyż reszta patchy jest o niego oparta.

```
tar -xvjf linux-2.6.9.tar.bz2

patch -p1 < patch-2.6.9-spa_zaphod_FULL-v6.0

patch -p1 < genetic-as-sched.patch

patch -p1 < genetic-io-sched.patch

patch -p1 < genetic-lib.patch

patch -p1 < genetic-zaphod-cpu-sched.patch
```

Po patchowaniu należy skonfigurować i skompilować jądro i moduły (jeśli takie są). Po skopiowaniu odpowiednich plików do /boot wypada jeszcze dodać w linii konfiguracyjnej gruba (lilo) wskazanie na scheduler: elevator=as (oczywiście w linijce ze wskazaniem kernela  :Laughing:  ).

Po odpaleniu systemu z nowym jądrem statystyki dotyczące schedulera dostępne są standardowo poprzez: 

```
/proc/genetic/as-scheduler
```

Plik zawiera między innymi info o numerze generacji, ilości potomków, mutacji i średnim dopasowaniu schedulera.

Zmiany ustawień można dokonywać poprzez odpowiednie interfejsy w:

```
/proc/sys/cpu_sched
```

lub wygodniej, za pomocą skryptu pythona: gcpuctl_hydra.py który można ściągnąć ze strony cpuse.sourceforge.net. Skrypt należy uruchamiać z root'a.

-----------------------

P.S.

Załatane jajko testuję dość intensywnie. Mogę powiedzieć tyle, że interaktywność systemu jest na jako takim poziomie. Odpalenie wielu procesów jednocześnie (mozilla, abiword, thunderbird, firefox, nautilus i w tle sobie xine grający filmik dvd) powoduje, rwanie troche kursora myszy. To przez fakt, że scheduler nie był dostosowany do takiego rodzaju zadań. Po chwili jednak wszystko wraca do normy. Ten czas potrzebny jest do nauki, czyli kolejnych mutacji i dostosowań do obciążenia. Z punktu widzenia interaktywności jest to koszmar, gdyż zachowanie desktopa winno być przewidywalne, a nie fluktuujące. Tak mnie uświadomił Con Kolivas:

 *Quote:*   

> > Idea: ck + genetic algorith = ?
> 
> An interactivity nightmare. It's fine for tuning throughput but the behaviour of a desktop should be reliable and predictable, not fluctuate all over the place.
> 
> It's impressive work, though, and nice to see some interesting directions for linux.
> ...

 

Z tych moich testów jedno jest pewne. Gdy odpalisz pewną ilość procesów i ilość ta nie zmienia się w czasie, to algorytm genetyczny spowoduje takie mutacje i takie dopasowanie, że będą one działać jak najpłynniej. Na www.kerneltrap.org już wywiązała się interesująca dyskucja na ten temat.

Ja stwierdziłem, że po odpaleniu netu (firefox) i jednoczesnym oglądniu filmiku na dvd (xine) zanotowałem znaczący wzrost płynności odtwarzania filmiku. Niestety nie mam możliwości przetestowania mojej puszki jako serwera gier. Wtedy możnaby określić przydatność tych łatek.

---------------------------

P.S. do P.S.

Łatki aplikują się bezproblemowo na vanillowe jajo 2.6.9. Aktualnie mam je zaaplikowane na jajo 2.6.9-gentoo-r1. Już nie tak gładko, ale poszło.

Moja blaszanka to: AMD Athlon-xp 1.600+ 768 SDRAM na MSI K7-Turbo2 VIAKT133A, Gainward GF 3 PP! Ti/500 TV Jumbo GS 128MB.

Wiem, wiem... zabytek...  :Laughing: 

----------

## Pepek

Widzę, że po pierwsze tu chodzi o naukę I/O scheduler-a (anticipatory to tylko scheduler urządzeń wejścia wyjścia, a nie procesora i procesów), a po drugie łatki oparte są na niezbyt popularnym CPU schedulerze spa-ZAPHOD. To dla czystego CPU scheduler-a O(1) z vanilla kernel nie będą działać ? Niestety nie potestuję więc, bo SPA i jego pochodnych nie trawię (albo raczej nie lubi ich mój sprzęt/system  :Wink:  ).

Pozdrówki.  :Cool: 

----------

## ai

martin.k :  :* wielkie dzieki ;] 

co do tego schedulera to faktycznie srednio mi to sie podoba ale wyprobowac - dlaczego nie ? ;]

----------

## fallow

pomysl ciekawy b.fajnie ze zostalo o tym wspomniane na forum , ale moim zdaniem poziom rozwoju tego jest zbyt wczesny by w ogole z tego korzystac,  wiadomo jak mozna stracic moc obliczeniowa wykorzystujac algorytmy genetyczne i ewolucyjne, moim zdaniem powinien chodzic on caly czas w realtimie i liczyc sporo nowych pokolen i mutacji dopasowujac potem takze ilosc mutacji i pokolen do uzyskiwanych wynikow trafnosci .imho po prostu to bedzie mialo sens kiedy procesory beda znacznie szybsze by mozna wykorzystac " w pelni " potencjal algorytmow genetycznych bez odczuwalnego spadku mocy obliczeniowej.

z reszta tak samo kiedy bylo z mp2/3 . teraz kazdy sluicha w tle " bez zajakniecia" , kiedys to byl problem  :Razz:   :Smile: 

tak czy siak , przydaloby sie zrobic implementacje nie tylko dla zaphoda i anticipatory 

cheers  :Smile: 

----------

## Pepek

 *fallow wrote:*   

> tak czy siak , przydaloby sie zrobic implementacje nie tylko dla zaphoda i anticipatory

 

Otóż to. A tak w ogóle, to ktoś z kernel-dev-ów na lkml-u wypowiedział się na ten temat, że pomysł ciekawy, innowacyjny, lecz raczej do zrealizowania w userspace, więc szanse, że kiedyś znajdzie się to w vanilla kernel = ~0 %.  :Very Happy: 

Pozdrówki.  :Cool: 

----------

## marwooj

Małe Pytanko(a)?

Jak się uruchmia konkretnego schedulera?

Trzeba dopisać do parametrów kernela elevetor=...?

Czy można zmieniać schedulera podczas pracy systemu?

I co do testów wydajności?

Pozdrawiam

----------

## fallow

elevator=x to wybor odpowiedniego io schedulera

od 2.6.10 mozna to zrobic w locie : https://forums.gentoo.org/viewtopic.php?p=1898541#1898541

cpu scheduler nie jest zmienialny standardowo w vanilii

mozna to zrobic za pomoca hydry Petera Williamsa ale tu jest zmieniana raczej polityka schedulowania bo szkielet pozostaje ten sam - SPA. 

albo plugsched Con`a Kolivasa , wtedy mozna wybrac cpu scheduler podczas bootowania kernela.

imho nie da sie jednoznacznie okreslic wydajnosci cpu schedulera, mozna jednoznacznie zmierzyc np. opoznienie w roznych sytuacjach , ale na wydajnosc wplywa zbyt wiele czynnikow , chocby bonusy czy promocje.

wydajnosci io schedulera tez nie da sie jednocznacznie okreslic za pomoca np. bonnie++ np. z faktu ze rozne sa idee , jedne bazuja na obsludze barier zapisu np. cfq a inne " laduja ile sie da " np. deadline  :Smile:  dla kazdego cos milego ale okreslenie wydajnosci tutaj to bardzo zlozona sprawa imho  :Smile: 

cheers

----------

## marwooj

elevator=x to wybor odpowiedniego io schedulera

własnie o tego iksa pytam  :Smile: 

wkompilowałem wszystkie jakie były, tylko nie wiem co w iksa wpisać

cpu scheduler nie jest zmienialny standardowo w vanilii

u mnie gentoo-dev-sources r-cośtam

A co do wydajnosci to miałem na myśli coś co pokaże mi czy jak załadowałem to mi box działa lepiej czy nie niż poprzednio załadowany,

Acha gdzies kiedys na www.linuxnews.pl albo na http://7thguard.net/ był taki jakby skrypcik który walił po systemie az sie wysypał, nie wiesz gdzie to można dopaść?

----------

## martin.k

w serii 2.6.9 w konfigu bootloadera trzeba było podać:

elevator=x

gdzie za x dajesz:

as - Anticipatory I/O scheduler

cfq - CFQ I/O scheduler

noop - No-op I/O scheduler

deadline - Deadline I/O scheduler

w serii 2.6.10, w przypadku as trzeba chyba już dawać:

elevator=anticipatory

Co do reszty to poczytaj wcześniejsze posty.

----------

## fallow

testuje teraz "genetyczny" anticipatory i musze przyznac ze jest calkiem niezle , chyba zbyt szybko skreslilem to z zalozenia  :Smile: 

ciekawe jak beda sie sprawowaly nowe wersje zaphoda.

cheers.

----------

## marwooj

 *fallow wrote:*   

> testuje teraz "genetyczny" anticipatory i musze przyznac ze jest calkiem niezle , chyba zbyt szybko skreslilem to z zalozenia 
> 
> ciekawe jak beda sie sprawowaly nowe wersje zaphoda.
> 
> cheers.

 

Jest do tego jakiś ebuild czy trzeba wszystko walnąć z łapy?

----------

## fallow

wlasnie skladam release vivid-sources pod 2.6.11-rc1 ,tam bedzie genetic anticipatory, jesli CIe to zainteresuje  :Wink: 

co to vivid-sources , mam w sygnaturze

cheers.

----------

## marwooj

 *fallow wrote:*   

> genetic anticipatory

 

To mnie interesuje, bardzo spodobał mi sie taki pomysł, i mam nadzieje że wpłynie na działanie box'a w zauważalny sposób, po przełaczenie na np.

elevetor=cfq nic raczej nie zmieniło  :Sad: 

----------

## fallow

bedzie mozna skorzystac z pzelaczania w locie , bedzie takze najnowszy patch timeslice dla cfq , ale tak czy siak ja przez caly czas korzystam z deadline , ale trzeba potestowac....  :Smile: 

cheers

----------

## marwooj

 *fallow wrote:*   

> bedzie mozna skorzystac z pzelaczania w locie , bedzie takze najnowszy patch timeslice dla cfq , ale tak czy siak ja przez caly czas korzystam z deadline , ale trzeba potestowac.... 

 

Super  :Smile: , thx za ebuilda bo jakoś sobie tego ręcznie (w mym przypadku oczywiście) nie wyobrażam.

Dowaliłem se linka w stopce to i może na googlu sie ten temat wypozycjonuje

----------

## martin.k

A tak wszyscy nagle skreślili te łatki, że niby zaphod itp. A jednak...   :Laughing: 

Mamy genetycznie modyfikowane kury, świnie, etc. etc. a teraz będzie pingwin mutant.  :Laughing: 

----------

## fallow

przedwczesne skreslenie <->   :Embarassed: 

 * wrote:*   

> 
> 
> A tak wszyscy nagle skreślili te łatki, że niby zaphod itp. A jednak...  
> 
> Mamy genetycznie modyfikowane kury, świnie, etc. etc. a teraz będzie pingwin mutant.
> ...

 

 :Laughing:   lol^10  :Smile: 

cheers

----------

## Pepek

Samej idei algorytmów genetycznych nie skreślałem nigdy, jest to dobry pomysł. Jedynie nie podobało mi się, że łatki zależą od CPU-zaphod-a. Mam nadzieję, że wkrótce ktoś przeportuje to też na std. O(1) CPU scheduler, wtedy chętnie potestuję. A co do I/O scheduler-a AS, to może się skuszę i przetestuję chociaż "genetycznie zmodyfikowane" operacje we/wy.

Pozdrówki.  :Cool: 

----------

