» »

[linux]a kompajlate svoje kernel ali pustite tistega od distribucije?

[linux]a kompajlate svoje kernel ali pustite tistega od distribucije?

mojster_joni ::

jst svojega zato da lahko dam -march=native (kaj češ ostanki od dnevov gentooja) pa da pomečem ven par reči ki jih nikoli ne bom rabil


(tbh sploh ne vem zakaj uporabljam arch in ne gentoo če itak hočem večino stvari po svoje kompajlat za tistih 0% razlike)

Brane22 ::

Na pri kernelu itak ni velike razlike ( za -march), ker mislim da ga njegov source nastavi sam.

Se pravi, če imaš gentoo-sources, ti Gentoo samo razpakira popatchane source v /usr/src/gentoo-X.Y.Z, nato pa ti
z make clean; make menuconfig izbereš opcije, ki ti ustrezajo.

kar se ostalih paketov tiče, imam jaz neke splošno veljavne nastavitve in pa agresivne nasstavitve za določene pakete, ki jih lahko nastaviš per-package v /etc/portage/env podmapah.

Tako imam LTO optimizacije samo na nekaterih paketih itd itd.

Zgodovina sprememb…

  • spremenilo: Brane22 ()

Brane22 ::

BTW, med opcijami v menuconfig-u imaš tudi to ali bi raje 32-bitno verzijo kernela in v grobem za katero družino procesorjev gre. Na razpolago je tudi neka vanilija opcija ( največji skupni imenovalec), ki naj bi delala v nekem splošnem primeru.

mojster_joni ::

nimam gentoo sources (tam verjetno res naredi kar praviš ampak arch in linux-zen, ki je skompalan za generičen amd64 nabor ukazov, glede na to da imam haswell procesor, ki ima nekaj funkcij več dam pač tist -march=native v konfiguraciji, izklopim kup mrežnih protokolov, gonilnikov, filesystemov in reči, ki jih moj računalnik ne bo nikoli videl, spremenim default kompresijo na xz, default hostname, network scheduler, izklopim razne debug možnosti ki jih ne rabim, nisem čisto zihr kako je po defaultu ampak se mi zdi, da sem spremenil še nekaj okoli huge pageov, frekvence timerja in ime

vcasih sem še dal blk-mq za default ampak ker ne gre imet nekatere naprave na blk-mq, druge pa na normalnih io schedulerjih tega ne delam več in imam za navadne diske bfq, za ssd pa deadline

razmišljal sem še če bi izklopil podporo za 32 bitne programe, ampak je še nisem, čeprav nimam nobenega niti nobenih 32 bitnih librariyev, tako da verjetno pride na vrsto nekoč


aja pa razne video kodeke imam skompajlane spet z -march=native -O2 -pipe -fstack-protector-strong -ftree-vectorize -ffast-math (itak je najhujše kar bi ffast-math lahko naredil je da bi kak pixel zgledal narobe, česar še nisem opazil)

če moram pa še kaj kompajlat sam dam pa stran ffast-math

edino za kar nisem siguren je če -march=native že sam prižge avx2 in fma al je treba to dodat

-O3 se mi pa zdi da naredi več škode kot koristi

itak pa vse to kot sem že rekel verjetno naredi minmalno razliko :D

Zgodovina sprememb…

pegasus ::

Zakaj potem delaš nekaj, če ne veš kakšne so posledice? Za boljši občutek? :)

Najprej se nauči izmeriti razliko, potem se lahko šele lotiš ugotavljat kateri flagi ti naredijo razliko. Korak naprej potem je da se lotiš analizirat flow skozi nek program, kje se zapravlja čas in optimizirati kodo ... Prevajalnik ti tu lahko pomaga le znotraj nekaj +- procentov.

mojster_joni ::

Cakaj malo, edina reč za katero nisem siguren glede posledic je ffast-math pri video kodekih in še tu je nesigurnost omejena na to če ima kake pozitivne posledice oziroma kake neopazne negativne posledice (ki so, če so neopazne tako ali tako nepomembne) in če march=native implicira tudi mavx2 in mfma.

Za posledice sprememb na kernelu mi je pa jasnon kaj naredijo.... izklop kupa gonilnikov/mrežnih protokolov/file sistemov ki jih ne bom nikoli videl skrajša ćas kompilacije (kar je opazno), zmanjša število modulov (kar je v resnici nepomembno, ker se itak ne naložijo če niso potrebni pri današnjih velikostih diskov pa tistih nekaj mb ne vpliva na nič), kaj naredi sprememba imena in hostnama je menda samoumevno, izklop debug možnosti ki jih ne uporabljam zmanjša kernel in ga potencialno pohitri (razlika je zelo verjetno minimalna, ampak izgube ni nobene), kaj naredijo transparent huge pagi mi je jasno edino kar ne vem je če so ali niso omogočeni po defaultu, višja frekvenca timerja rahlo poveča porabo (dokaj vseeno na desktopu) in rahlo poveča odzivnost na račun throughouta (kar je koristno za desktop) nekoč je še odpravila nek bug pri prilagajanju frekvence procesorja glede na obremenjenost ki se je pojavil pri frekvenci 300 Hz hasswell procesorjih in intel p_state driverju ki pa je zdaj že odpravljen afaik, network scheduler in io scheduler mi je tudi jasno kaj naredita, march=native zelo verjetno prinese neko minimalno razliko v hitrosti na račun nekompatibilnosti s procesorji z ukazi ki jih nima moj in potencialno manjše hitrosti na drugih procesorji (spet nepomembno).

A sem kaj izpustil?

BlaY0 ::

Čaki mal, kaj pa vi poganjate na teh svojih mlinih, da nucate takšne _optimizacije_? Ajd OK, recimo da si profesionalni reenkoder za vse produkcijske hiše na svetu in 24x7 reenkodaš muvije ter ti 1% pomeni veliko. Al pa da imaš rudarsko farmo, kjer se ti 1% precej pozna v tošlnu. Al pa da 24x7 delaš neke 3D renderje in si plačan po tem koliko na dan jih uspeš naredit. Za day to day work kjer je računalnik v pogonu ajd recimo 12 ur (ker so tle gor tut giki), povprečna utilizacija v teh 12 urah pa je dobrih 10%, ne vidim neke resne prednosti v tej optimizaciji. Naj nekdo resno pove koliko se mu pozna lastna optimizacija. Zanima me torej dejanska izkoriščenost mlina na njegovo življensko dobo, zgodbe kot je recimo: "Ja sem zadnjič en render namesto v dveh urah naredu 17 sekund prej.", niso relevantne.

zee ::

Ko sem se uporabljal Gentoo, sem vselej sestavil svoje Linux jedro (in prakticno celoten sistem). Takrat sem tipicno prevajal z "-Os -march=core2" (ali nekaj podobnega). Kasneje sem presaltal na Ubuntu in Debian, jedra od takrat ne prevajam vec, deloma tudi zato, ker je internetni dostop na trenutnem delovnem mestu rahlo omejen (filtriran), zato je prakticno nemogoce uporabljati Portage.
zee
Linux: Be Root, Windows: Re Boot
Giant Amazon and Google Compute Cloud in the Sky.

Brane22 ::

BlaY0 je izjavil:

Čaki mal, kaj pa vi poganjate na teh svojih mlinih, da nucate takšne _optimizacije_?


Kar se kernela tiče, flagi ne igrajo velike vloge, ker je kernel "tanek", itak pa stvar tam sama postavi varne flage ( ki so pogosto optimalni). kernel mora vedeti, ako zgleda CPUjev cache, da zna nalagat zadeve na prave boundaryje itd. Na ene par koncih ima tudi bolj zahtevne funkcije ( recimo izračun paritete za RIAD6, kak interni crypto itd) ampak tam se znajde sam in ima sstvari daleč bolj optimizirane, kot bi jih dal od sebe simpl option flip.

Kar se ostalih stvari tiče, se lahko pozna. Kaka debela kraveština od IDE okolja, pisana bv bogvekoliko slojih C++ lahko pokaže solidno razliko v performancu, kar se zna poznati pri delu z večjimi sourcei itd.

Jaz na Gentooju ne težim preveč s tem, se pa potrudim, da imam frišen compiler. Ne nujno bleeding edge ampak tak, za katerega domnevam da bo delal OK, ustrezno popatchan. Trenutno to pomeni, da za vse uproablam gcc-6.3.0, in ne bom šel na novo generacijo, dokler ene bo vsaj prvi update zunaj ( pri prihajajoči 7-ki torej vsaj 7.1)

ZA vse uporabljam -O3 -march=native ( tanove verzije delajo pri -O3 bistevno bolje od starih), naprednejše flage pa previdno uorabljam samo pri izbranih paketih. V glavnem gre za LTO optimizacije, ki jih poskušam uporabiti skozi različne zahtevne libraryje in pakete. To pomeni, da te libraryje compilam z LTO, linkam pa statično. Ampak to je bolj redkost.

Brane22 ::

Aja, kar se kernela tiče, je custom compile fajn, da veš kaj in kako dela.

Na delovni mašini ne rabim šitload modulov za firewall ali maljon USB drajverjev za serijsko kartico. Na serverju je seveda drugače.

Fajn pa je, da imam recimo mikrokodo za GPU v kernelu, da lahko zgodaj inicializira GPU v grafični način in tako dobim grafično konzolo na začetku in ne koncu boota. Če kaj škripne, lahko to vidim na zaslonu. Recimo. Je tudi mnogo drugih vzrokov- izbire driverjev, načinov nalaganja ( in-kernel vs module itd).

Dostikrat dobi recimo MESA driver solidno količino updateov, in ker so ti dostikrat odvisni od featurejev kernela, pač moram scompilat še tega. Takrat je fajjn, da imam pripravljen config fajl in da ne prevajam vseh možnih driverjem, ampa samo to kar rabim. Nato sledi compile libdrm in mesa in to je to.

Brane22 ::

Še ene par razlogov iz mojih primerov:

1. PCB

Stvar ima več opcij glede grafičnega izhoda. Izpade, da je default CPU izris prekleto počasen ( tko ene 20x počasnejši od GL), opengl pa ima kup opcij, ki mi gabijo delo. Rešitev je kombinacija obeh načinov, za kar je potreben custom recompile.

2. PCB

Stvar ima par napak, ki nujno potrebujejo popravke. Ko sem izdelal patche in jih počil v user patch direktorij, lahko stvar znova scompilam in stvar bo pobrala in uporabila tudi moj patch.

mojster_joni ::

@BlaY0
razlike v hitrostis niso blazne, ampak tudi stroški so minimalni, se pa vsekakor kernel kompajla hitreje če ven zmečeš razazma stvari ki jih ne boš nikoli uporabil

@zee
pa si mel korist od -Os? manjša koda naj bi teoretično lepše pasala v raazne predpomnilnike kar ni slabo

@Brane22
kaj -O3 je postal upraben? včassih je samo povečal kodo in poslabšal izkoristke prepomnilnikov...

pa +1 na to da nima smisla met modulov za reči ki jih računalnik ne bo videl

zee ::

Ce imas opravka s strezniskimi procesorji, ki imajo precej predpomnilnika, je to sila ugodno, kar se je zgodilo tudi v mojem primeru.
zee
Linux: Be Root, Windows: Re Boot
Giant Amazon and Google Compute Cloud in the Sky.

Zgodovina sprememb…

  • spremenilo: zee ()

Brane22 ::

mojster_joni je izjavil:



@Brane22
kaj -O3 je postal upraben? včassih je samo povečal kodo in poslabšal izkoristke prepomnilnikov...


Tanovi compilerji se precej bolje obnašajo z -O3. Bolj pogosto koristi in tudi takrat ko ne, je škoda manjša.
Tako da po defaultu pustim kar -O3.

zee ::

Pred casom je bil "-O3" recept za sila nestabilen sistem. Lepo videt, da se casi spreminjajo. 8-)
zee
Linux: Be Root, Windows: Re Boot
Giant Amazon and Google Compute Cloud in the Sky.

mojster_joni ::

Zanimivo slišat to o -O3, ker vem da je nekoč delal več škode kot koristi. Hkrati ima pa zee dobre izkušnje z -Os... to bi res rabil kak benchmark pognat za ornk odg.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

linux + dm-crypt luks težave z odklepom particije ob bootu

Oddelek: Operacijski sistemi
14741 (500) gendale2018
»

Gentoo - problemi z framebuffer in ifconfig (strani: 1 2 )

Oddelek: Operacijski sistemi
674584 (3908) Zaibatsu
»

Primerjava Dooma 3 - Windows vs. Linux

Oddelek: Novice / Operacijski sistemi
213101 (3101) Malinovc
»

OpenOffice 1.1 izšel!

Oddelek: Novice / Pisarniški paketi
122658 (2658) moj_nick
»

Linux- par nastavitev kernela 2.4 (VM, latenca itd...) (strani: 1 2 )

Oddelek: Operacijski sistemi
513542 (2940) Brane2

Več podobnih tem