ChangeBlog  •  Archiwum  •  Kategorie  •  Artykuły  •  Galeria  •  Czytelnicy  •  Rupieciarnia
RSS wpisów  |  RSS komentarzy
Zoptymalizowałem wykrywanie zależności w HBS

Void wziął się za dalsze pythonizowanie Hierophanta (na celownik wziął /etc/hbs/{prep,post}) - wiele to tam nie wywalczy, ale po spythonizowaniu będę mógł trochę ulepszyć automatykę tych sekcji. A w następnym kroku da się może wchłonąć te mechanizmy całkiem w główny skrypt HBS i trochę uprościć jego integrację z resztą, choć to by wymagało nielichych przeróbek.

Ja wziąłem się za skrypt generujący listy PROVIDES/REQUIRES. To był brzydki "legacy code" którego tak naprawdę nie rozumiałem, pisany w mieszance shella i awka i przeportowany prawie żywcem z RPM-a. Jego spythonizowanie chodziło za mną od dawna. Ale ostatecznie napisałem pythonową wersję /etc/hbs/deps... Wyszła przeszło dwa razy dłuższa niż oryginał, ale to mnie nie martwi specjalnie. Ważniejsza jest wydajność:

[j:0 c:0]/home/grzegorz/projekty/PORT> time ./old_deps
./old_deps  25.72s user 4.86s system 98% cpu 31.007 total

[j:0 c:0]/home/grzegorz/projekty/PORT> time ./old_deps
./old_deps  25.47s user 4.79s system 99% cpu 30.398 total

[j:0 c:0]/home/grzegorz/projekty/PORT> time ./deps.py 
./deps.py  0.87s user 0.11s system 99% cpu 0.991 total

[j:0 c:0]/home/grzegorz/projekty/PORT> time ./deps.py
./deps.py  0.86s user 0.11s system 99% cpu 0.975 total

Imponujące :) Każdy skrypt pracował oczywiście na tych samych danych wejściowych. Przeanalizowałem działanie rpm-owego oryginału i znalazłem sporo miejsc w których dało się coś zoptymalizować. Ogólnie obciążenie procesora spadło przez to o całą masę procentów. A dokładniej to o 96,8%. Nie znaczy to że generowanie zależności będzie od tej pory trwało taki ułamek czasu, bo wąskim gardłem jest tu nadal I/O dysku (choć i tak odwołania do dysku zredukowałem do drobnego ułamka koszmaru jaki wyprawiały stare skrypty), więc przyspieszenie powinno być "zauważalne jak cholera". Aha, w szybkim teście na /usr/lib nowa wersja wyłapała o parę zależności więcej niż oryginał. Teraz muszę porobić jeszcze parę "regression tests", każę mu generować listy dla każdego pakietu jaki mam teraz zainstalowany i porównam je z oryginałami, choć nie sądzę by mi się jakieś usterki przemknęły...

O, Void podesłał mi właśnie pythonową wersję procedury PREP. Na razie odłożę na bok, bo tego się nie da tak po prostu podmienić jeszcze...

Sprostowanie: Można by odnieść wrażenie, że we wczorajszej mojej wypowiedzi Void został przedstawiony w złym świetle. Ze względu na tendencyjny i wyrwany z kontekstu cytat można go było odebrać jako programistę olewającego użytkowników. To oczywiście nie jest prawdą, przepraszam jeśli ktoś tak odczytał ten tekst, nie było to moją intencją. Void jest oczywiście programistą bardzo wyczulonym na potrzeby użytkowników i nigdy by nie odpuścił żadnemu odkrytemu błędowi.
Oświadczenie to napisałem w pełni zdrowia psychicznego, z własnej nieprzymuszonej woli.
Hoppke.

Pozostaw dopisek: