buildery: koncepcje i pewne pytania
Tomasz Kłoczko
kloczek w rudy.mif.pg.gda.pl
Pią, 30 Lis 2001, 14:48:38 CET
(.. znowu będzie dłuzej ale chyba nie da się inaczej bo muszę zrzucić z
czaszki pomysły które mi się lęgną w głowie od dłuzszego czasu :>)
Przedwczoraj w zasadzie zaczęło działać składowanie logów na buildlogs ale
nie pdoba mi się to za bardzo. Tutaj wspomnę tylko o tym co pisałem ze
dwa, trzy listy temu o zbieraniu informacji niejako przy okazji i potem
ich prezentacji jak argument. Otróż uświadomiłem sobie, że przy okazji
budowania pakietu meżemy wyciągnać niesamowicie ważne informacjie w
zasadzie za friko.
Ab owo (łać. "od jajka", bo rzymianie doszli do wniosku że najpierw było
jajko a potem kura .. Michał to nie o Tobie ;)
Mamy binarki optymalizowane pod różne architektóry. Mamy buildery. Od
kilku dni z kilkoma osobai próbuję mocniej przemyśleć sprawy związane z
budowaniem pakeitów, a takze z masowym przebudowywaniem pakietów w kółko
w celach testowych po tożeby mieć wieksze zaufanie do pakeitów
pzrerzcacnych z /test do podstawowej hierarhii.
Co to w efekcie powinno nam dać:
- pewność że apkiety przerzucane w nowszej wersji/z jakimiś dodatkowymi
poprawkami nie mają wpły na to czy resztą sie przestaje budować,
- 100% danych na temat tego co dokładmnie trzeba będzie poprawić w związku
z wprowadzeniem wprowadzniem pakeitu który moze bruździć przy ufowaniu
pakietów i/lub które pakeity znowu sie buduja o ile jakiś pakeit
potrzebny im do budowania dostał poprawkę która była włąsciwą przyczyna
pojawiania się błedów w trakcie budowania innych pakietów.
W tej chwili mamy conajmenie dwie grupy pakietów które są narażone na tego
typu objawy niejako samoistnie. Są to pakiety KDE i GNOME e których ilość
i zakres różncyh zmian z wersji na wersje daje czasami efekty nie do
przewidznia zanim jakiś pakiet nie wprowadzi się w nowej wersji do
eksploatacji. Powyśze bęzie miało np. fundamentalne znacznie przy
przejściu na nowe db czy też w kolejce dalej o ile w pewnym momencie
pzrejdziemy na gcc 3.x. I miałaby kolosalne znacznie w momencie kiedy
wprowadzaliśmy autoconfa, automake w celu oszacowania tego jaki zakres
zmian w reszcie zasobów bezie to wymagać jesli chdzi o potrzebne poprawki.
Dalej: w trakcie już poprawiania błędów wynikajacych z wprowadznia
jakiegoś pakietu na bieżąco dałoby to nam stały wgląd w skutki poprawek
(załóżmy że został znaleziony błąd w automake i po jego poprawieniu i
próbnym wejsciu do eksploatacji poprawionego automake momentalnie dzieki
temu bęziemy mieli informacje o skutkach tych zmian).
Dobra .. są plany wprowadznia budowania pakietów coś na zasadzie
distrybuted computing z pewnymi modyfikacjami. Ale jako to ma związek
z wyciąganiem przy tej okacji jakiś istotnych informacji ?
Otóże zwiazek jest i to całkiem prosty. Otóż budowanie zasobów jakie mamy
jest dość dobrym testem wydajności systemu. Jeżeli bendą np. trzy
dokładnie takei same mazynki ale z zainstalowanymi pakietami
zoptymalizowanymi pod różne arhitektóry to wyciągjąc informacje o tym
jakie było obciązenie i czas kompilacji poszczególnych pakietów mozna
będzie określić (wreszcie) zupełnie namacalnie jaki ma to sens co robimy
z budowniem pakietów pod trzy rózne arch x86. Co wiecej jeżeli óżnice bedą
to bedzie mozńą uzyskać konkretne dane dotyczące tych róznic które beą
potencjalnie dosć bliskie róznuicom jakie moga się pojawić przy innych
zastosowaniach np. web hosting z dużą ilością aktywnych aktywnych stron.
Mówiąc inaczje dzięki tym danym można będzie się posługiwać racjonalnymi
argumentami dlaczego należy bąć nie instalować binarki zoptymalizowane pod
konkretną arch.
Co dalej jeżeli maszynki bedą takie same, a rózne benda np. systemy
plikowe to z racji tego że kompilacja to tez coś co dość mocno obciąża
operacje plikowe to też będzie można uzyskać tu dane niejako przy okazji
które pozwiolą wybrać taki a nie inny system plikowy na podstawie
racjonalnych danych.
Dalej jeszcze. Załóżmy że zmieniamy kompilator. Dziki przechowywaniu
danych z poprzednich kompilacji możemy próbować określić czy zmiana
kompilatora ma jakiś widoczny wpływ na wydajnośc system. Zapewne
informacji które bedzie można tu wyciągnąć bezie jeszcze kilka ale ..
Mówiąc inaczje teraz jest najlepsza pora żeby minimalnym nakłądem parcy
uzyskać maksymalny efekt w postaci dodatkowych dostosowań w pld-builder po
to żeby tanim pkossztem pozyskać cenne dane.
Co jest potrzebne do tego żeby powyższe zrealizować ?
Po pierwsze trzeba określić jakie konkretnie dane trzeba zbierać i jaką
metodą. Jeżeli to mają być wyniki z time to ponieważ jest tu kilka rzecy
potencjalnie do usyskania to tzrebaby okreslić jak potrzbne dane mamy
zbierać ? Mówiąc inaczje trzeba określić metodę pomiaru. Druga sprawa to
metoda obróbki tych danych.
Mam tu niemniej osobiście tylko mgliste pojęcie o tym jakie dane zbierać i
jak je obrabiać. Jęzli ktoś miałby tu jakieś konkretne pomysły jak to
rozwiazać to prosze o zgłaszanie takich propozycji.
Założenia co do pracy builderów przebudowyaania pakietów w kółko są mnei
wiecej takie:
- jest maszynka zajmujaca się rozdzielaniem pakietów miezy resztę maszynek
i na której są zbierane i obrabiane wyniki takich budowań,
- każdy będzie mógł zgłosić swoja maszynke do pzrebudowywanai pakietów,
- builder przy okazji budowania bezie mógł zwrócić dodatkowe dane
dotyczące obciązenai i czasu kompilacji pakietu,
- dane o builderach zgłasznych są niejawne i upublicznieniu podlegać bendą
tylko dane sumaryczne z budowań (ilość jednostek, ilość jednostek
konkretnego typu, czas pzrebudowanai całosci i inne dane które da sie z
tego wyciagnąć). Jeżeli ktoś by chciał żeby dane dotycżace tego że
urzyczył jakąś jednostkę na budowanie były publicznie dosepne ("kto nas
wspiera ?") to nie widże żeby też to prezentować.
- zapewnić trzeba powtarzalnosć środowisk budownych pakietów.
Ostani punk nieco rozwinę. Otóż wiadomo że całość bezie się operać o
chrootowe środowisko jakei mamy w pakiecie pld-builder. Przed zbudownaiem
pakirtu musi nastapić swego rodzju weryfikacja tego czy na builderze jest
zainstalwoamny właściwy/konkretny zestaw pakietów i to mzan zrobić bardzo
prosto wystarczy choćby wygeneroewac sumę md5 z rpm -qa w chroot. Jeżeli
suma bezie właściwa to jednostka dostaje pakiet do pzrebudowani, a jeżlei
nie to tutaj powinna nasapić dodatkowa iteracja związana z
usupełnieniem/korektą tego co jest potrzebne w środowisku do budowanai
pakietów. Można się tu zastanowić jak powinna wyglądać taka wymiana danych
żeby mozliwie to zautomatyzować i żeby zapewnić możliwie wysoki poziom
powtarzalności takich środowisk.
Po metotodzie zbieranai danych o obciżeniu jest to koleny punk który bezie
wymagał pzremyslenia do końca.
Po przebudowaniu pakietu jednostka która go zbudowała zwraca tylko dane
sumaryczne: czy pakiet sie przebidował i o ile ktoś chciałby pomóc w
kompletownaiu danych dotyczacych wydajności inne dane dotyczace
obciążenia.
Tak czy inacje ze względu na zbiranie logów w tej chwili i tak środowisko
sterujace budowniem pakietów (pld-builder)wymaga przeróbek. Tutaj Arek
zgłąszał że mu sie niepodoba dwuwarstwowoć buildera. Wydaje się że jest to
nie do unikniecia ale są pewne szczegóły które należy poprawić zmianić juz
nie tylko z powodów czysto estetycznych:
* W tej chwili zwracanie wyników z obecnego pld-buidera służszącego
przedewszystkim do robienia zasobów produkcyjnych połączone jest z tym,
że zwracanie pakeitów wynikowych i logów odbywa s ie z chroot. Jest to
błędogenna konstrukcja ponieważ automatyka drugiej warstwy w chroot
powinna zajmować się wyłacnie pzrebudowaniem pakeitów i wyprodukowaniem
wynikowych danych z budowania.
Nie ejstem w stanie dokąłdnie tego uzasadnić ale takie rozdzielenie
rozdzielenie powinno być IMHO puilnowane ze względów bezpieczeństwa.
* Całe sterowanie i transwer danych wynikowych powinno odbywać się z
warstwy wyższej z nad chroot. Jest conajmniej kilka argumentów na to że
tak właśnie się powinno to odbywać. Pirwszy jest taki że jeżeli budownie
i transfer dancyh odbywa się jednotorowo to przy zakłóceniach na łączach
w trakcie zwracanai pakietów/danych wynikowych tracony jest czas który
mógłby być wykorzystany na rozpocżecie budowania kolenjego pakietu.
W tej chwili w tym co mamy dzieki temu co Janek kiedyś zrobił mamy juz
wyraźne rozdzielenie między odbieraniem zleceń i ich pzretwarzaniem. To
jest niewątpliwie dobry model ale wymagać bezie uzupełnienia o tzrecią
linię czynnosć wykonywanych równolegle - o zwracanie dancyh wynikowych.
Zrozwiazać mzan bezie to prosto popzrez dodanie ~builder/spool w chroot
i dodatkowym skryptom uruchamianym z crona którebędą sprawdzać cy jest
coś tam i zajmą się pzretransportowaniem tego we włąsciwe miejsce i
właściwą metodą (smtp/scp/ftp ov. SSL). tak czy inaczej automatyka do
tego musi operować z poza chroot po to zeby to co jest wykonywane w
chroot zajmowało się czystym budowniem pakietów i niczym więcej.
Jezeli pakiet nie pzrebufoewał się prawidłowo to w ~builder/spool takze
powonna o tym trafić informacja po to żeby na warstwie sterujacej
wysyłaniem wymników moząń było choćby w tytule listu przekazać że
budownie sie nie udało a build log leży pod adresm <jakimśtam>.
* Pakiety moga być budowane z konkretnymi włączonymi bąć nie dodatkowymi
cechami sterowanymi przez --{with,without} czy --define <ficzer> <val>
Jeżlei mają być zbierane logi takze z takich budowań to musi być jeszcze
usystematyzowany sposób w jaki beą składowane ogi z takich buowań.
Propozycja jest tu taka żeby w zlecenaich odseparować nazę speca od
dodatkowch parametrów. Mówiąc inaczej opócz pól X-Spec: w zleceniu
przesyłanym poczta doszłyby dodatkowo X-CVS-Tag: i X-Defines:.
To co z tych pól bezie wyciągane będzie można użyć przy konstruowaniu
nazwy pliku loga czy też też w komunikatach zwrotnych co i z jakimi
parametrami udało się zbudować czy też nie.
W tym miejscu nie mam jeszcze pomysłu na kowencje według jakiej ba
buildlogs logi z tego typu budowań byłyby pzrechowywane.
Czyli mówiąc inaczje jest to kolejne pytanie na jakie ztreba sobie
możliwie szybko odpwoeidzieć. jeżlei ktoś miałbyu pomysły w tej kwestii
to też bym prosił.
Podsumowując. W tej chwili budowanie pakeiytóe na builderach jest
wstrzymane. jezli powidzmy do jutra nie uda się tego rozwiącać na poziomie
umozliwiającym przetrwarzanei zleceń na beirzaco to zostanie tak jak jest
obecnie po to żeby dac sobie czas na skompletowanie reszty automatyki w
pld-builder wypałniajacej powyższe załozenia. W dalszej kolejnosci
pld-builder powinien być dostosowywany do tego żeby po odpowiednim
skonfigurowaniu można było go wykorzystać do budowania pakietów w kółko
na tak dużej ilości maszynek jak to nam sie tylko uda. Ilość maszynek
powinna być na yle duża żeby pzredudowanie całości było mozliwe powiedźmy
w jeden dzień i żeby takze czyk pzrerzucanai pakietów z /test miał w
zwiażku z tym nei za długi czas.
Nie oczekuję za mocnio że ktoś zacznie pomagać mi w modyfikowaniu
pld-buildera ale byłbym bardzo wdzięczny za analizę powyższego i
zglaszanie wszelkich już choćby wątpliwości, a na pewno jeszcze lepiej
propozycji rozwiazania tego co jeszcze w powyszych koncepcjach jeszcze
brakuje/jest niespójne.
kloczek
--
-----------------------------------------------------------
*Ludzie nie mają problemów, tylko sobie sami je stwarzają*
-----------------------------------------------------------
Tomasz Kłoczko, sys adm @zie.pg.gda.pl|*e-mail: kloczek w rudy.mif.pg.gda.pl*
Więcej informacji o liście dyskusyjnej pld-devel-pl