Extrém hosszú fordítási idő
Extrém hosszú fordítási idő
Arduino avr tools kérdés:
Van egy nagy projekt (100-as nagyságrendű forrásfájl). A forrásban felhasználjuk az Arduino könyvtárakat, a fordításhoz a keretrendszerhez mellékelt avr tools-t használjuk.
A Makefile saját.
Az Arduino verziója: 1.0.6
Néhány teljes fordítási idő:
mindegyik Windows 7 pro sp1.
Lenovo laptop: i7, 4 mag, 12 GB RAM: 301 sec
Asztali gép 1: i7, 4 mag, 16 GB RAM: 301 sec
Asztali gép 2: Core 2 Duo, 2 mag, 2 GB RAM: 170 sec
HP Elitebook: i7 low voltage mobile 2 mag, 4 GB RAM: 62 sec
Macbook 1: OSX 10.7: Core 2 Duo, 2 mag, 2 GB RAM: 24 sec
Valamint néztük még sokféle Inteles Mac-en, mindegyiken 60 sec alatti volt. (Nem írtam fel pontosabban.)
Sőt, megnéztük virtuális gépen futtatott OSX-en is. 35 sec lett.
Mi okozhatja ezt a nagy szórást a Windowsos gépek között?
Miért fordul le jóval gyorsabban OSX alatt, még ha a hardver jóval gyengébb is?
Van egy nagy projekt (100-as nagyságrendű forrásfájl). A forrásban felhasználjuk az Arduino könyvtárakat, a fordításhoz a keretrendszerhez mellékelt avr tools-t használjuk.
A Makefile saját.
Az Arduino verziója: 1.0.6
Néhány teljes fordítási idő:
mindegyik Windows 7 pro sp1.
Lenovo laptop: i7, 4 mag, 12 GB RAM: 301 sec
Asztali gép 1: i7, 4 mag, 16 GB RAM: 301 sec
Asztali gép 2: Core 2 Duo, 2 mag, 2 GB RAM: 170 sec
HP Elitebook: i7 low voltage mobile 2 mag, 4 GB RAM: 62 sec
Macbook 1: OSX 10.7: Core 2 Duo, 2 mag, 2 GB RAM: 24 sec
Valamint néztük még sokféle Inteles Mac-en, mindegyiken 60 sec alatti volt. (Nem írtam fel pontosabban.)
Sőt, megnéztük virtuális gépen futtatott OSX-en is. 35 sec lett.
Mi okozhatja ezt a nagy szórást a Windowsos gépek között?
Miért fordul le jóval gyorsabban OSX alatt, még ha a hardver jóval gyengébb is?
Re: Extrém hosszú fordítási idő
Lassú fordítás:
- aktív bluetooth host, korábban elérhető (most hiányzó) BT kliensekkel
- ugyanez hálózati meghajtók elérhetőségével
- java eltérő verziója is van a gépen
- víruskereső beállítása minden filenyitáskor leskelődik
- széttöredeztett file-k, defrag hiánya
- lassú hdd
- memória kevés és swap-ba rak ki sokmindent (Arduino keretrendszer erőforrásigényes)
- aktív bluetooth host, korábban elérhető (most hiányzó) BT kliensekkel
- ugyanez hálózati meghajtók elérhetőségével
- java eltérő verziója is van a gépen
- víruskereső beállítása minden filenyitáskor leskelődik
- széttöredeztett file-k, defrag hiánya
- lassú hdd
- memória kevés és swap-ba rak ki sokmindent (Arduino keretrendszer erőforrásigényes)
Re: Extrém hosszú fordítási idő
Pontosítok:
Arduino keretrendszer nem fut.
A hozzá adott avr toolchain-t használjuk saját Makefile-al.
Cygwin make-t használjuk.
- aktív bluetooth host, korábban elérhető (most hiányzó) BT kliensekkel
- java eltérő verziója is van a gépen
A fentebb írtak (Arduino IDE nem fut) miatt ezek nem játszanak.
- ugyanez hálózati meghajtók elérhetőségével
- víruskereső beállítása minden filenyitáskor leskelődik
Ez volt az első, amit kipróbáltam. Leállítottam minden víruskeresőt, és tűzfalat. Nem változott az eredmény.
- széttöredeztett file-k, defrag hiánya
- lassú hdd
Csupa gyors HDD.
Azt is kipróbáltam, hogy a desktop gépbe raktam egy TÖKÜRES HDD-t, azon volt minden toolchain és forrás. Nem változott az eredmény.
- memória kevés és swap-ba rak ki sokmindent (Arduino keretrendszer erőforrásigényes)
4-8-16 GB RAM-os gépekről van szó. A két legerősebb gép SSD-vel.
Míg a Macintosh-ok között van 1-2 GB-os is, mégis gyorsabban fordít.
De mondom, hogy az Arduino IDE nem fut.
Arduino keretrendszer nem fut.
A hozzá adott avr toolchain-t használjuk saját Makefile-al.
Cygwin make-t használjuk.
- aktív bluetooth host, korábban elérhető (most hiányzó) BT kliensekkel
- java eltérő verziója is van a gépen
A fentebb írtak (Arduino IDE nem fut) miatt ezek nem játszanak.
- ugyanez hálózati meghajtók elérhetőségével
- víruskereső beállítása minden filenyitáskor leskelődik
Ez volt az első, amit kipróbáltam. Leállítottam minden víruskeresőt, és tűzfalat. Nem változott az eredmény.
- széttöredeztett file-k, defrag hiánya
- lassú hdd
Csupa gyors HDD.
Azt is kipróbáltam, hogy a desktop gépbe raktam egy TÖKÜRES HDD-t, azon volt minden toolchain és forrás. Nem változott az eredmény.
- memória kevés és swap-ba rak ki sokmindent (Arduino keretrendszer erőforrásigényes)
4-8-16 GB RAM-os gépekről van szó. A két legerősebb gép SSD-vel.
Míg a Macintosh-ok között van 1-2 GB-os is, mégis gyorsabban fordít.
De mondom, hogy az Arduino IDE nem fut.
Re: Extrém hosszú fordítási idő
Érdekes, hogy minél erősebb a proci, sok memóriával, annál gyengébb a teljesítmény.
Talán kérdezd meg Billt, miért van ez.
32 bit, vagy 64?
Ugye tudjuk, hogy a 64 bites rendszer nem biztos, hogy gorsabban futtat egy 32 bites programot. Aztán ott van még a többszálas feldolgozás, és az apró fájlokhoz való hozzáfrés, feldolgozás.
A szuper, sok magos procik nem a kis állományok feldolgozására vannak optimalizálva (Windows alatt).
Talán kérdezd meg Billt, miért van ez.
32 bit, vagy 64?
Ugye tudjuk, hogy a 64 bites rendszer nem biztos, hogy gorsabban futtat egy 32 bites programot. Aztán ott van még a többszálas feldolgozás, és az apró fájlokhoz való hozzáfrés, feldolgozás.
A szuper, sok magos procik nem a kis állományok feldolgozására vannak optimalizálva (Windows alatt).
Re: Extrém hosszú fordítási idő
Mind 64 bites rendszer. 64 bites Cygwin.
A nincs optimalizálva, meg töredezett, meg hasonlók biztosan nem igazak. Vagy legalábbis nem okozhatnának ekkora különbséget.
Ráadásul a virtuális gépen futó OSX alatt is gyors a fordítás, pedig ott elvileg hatványozottan kellene jelentkeznie a lassító körülményeknek.
Az eszközöket egyszer töltöttem le, utána arról a gépről másoltam a többire. Tehát azonos verziójúak.
A nincs optimalizálva, meg töredezett, meg hasonlók biztosan nem igazak. Vagy legalábbis nem okozhatnának ekkora különbséget.
Ráadásul a virtuális gépen futó OSX alatt is gyors a fordítás, pedig ott elvileg hatványozottan kellene jelentkeznie a lassító körülményeknek.
Az eszközöket egyszer töltöttem le, utána arról a gépről másoltam a többire. Tehát azonos verziójúak.
Re: Extrém hosszú fordítási idő
Próbáld ki :
make -j 8
Ez annyit csinál, hogy párhuzamosan futtat 8 gcc-t. Ahogy emlékszem, a make alapból lehet, hogy egyesével megy végig a fájlokon és fordítja őket. Ez 8-asával párhuzamosan csinálja. Ilyenkor a 4 CPU-t azért illene felnyomnia 100%-ra.
A kedvedért csináltam a 2 mag 4 szálas notebookommal összehasonlítást.
szimpla make: 3m 38s
-j 8 opcióval: 1m 51s
Már egy mezei CPU monitornál látszania kell, ha a CPU-k nincsenek 100%-on. Ami a MAC-t illeti, lehet, hogy a make náluk alapból párhuzamosan dolgozik, szemben a cygwin-nel.
Emellett az sem részletkérdés, hogy SSD-n vagy HDD-n fordítasz.
make -j 8
Ez annyit csinál, hogy párhuzamosan futtat 8 gcc-t. Ahogy emlékszem, a make alapból lehet, hogy egyesével megy végig a fájlokon és fordítja őket. Ez 8-asával párhuzamosan csinálja. Ilyenkor a 4 CPU-t azért illene felnyomnia 100%-ra.
A kedvedért csináltam a 2 mag 4 szálas notebookommal összehasonlítást.
szimpla make: 3m 38s
-j 8 opcióval: 1m 51s
Már egy mezei CPU monitornál látszania kell, ha a CPU-k nincsenek 100%-on. Ami a MAC-t illeti, lehet, hogy a make náluk alapból párhuzamosan dolgozik, szemben a cygwin-nel.
Emellett az sem részletkérdés, hogy SSD-n vagy HDD-n fordítasz.
Re: Extrém hosszú fordítási idő
Köszönöm.
Újra fordítottam azon a gépen, amin múltkor 301 sec volt a fordítás:
Most: 200 sec !
-j 8 opcióval: 170 sec
Érdekes a különbség, elvileg semmi nem változott...
Az SSD miért lenne ennyire fontos? A 8 éves, Core 2 Duo processzoros MacBook-ban valami 5400-as HDD van, mégis azon fordul le a leggyorsabban.
Újra fordítottam azon a gépen, amin múltkor 301 sec volt a fordítás:
Most: 200 sec !
-j 8 opcióval: 170 sec
Érdekes a különbség, elvileg semmi nem változott...
Az SSD miért lenne ennyire fontos? A 8 éves, Core 2 Duo processzoros MacBook-ban valami 5400-as HDD van, mégis azon fordul le a leggyorsabban.
Re: Extrém hosszú fordítási idő
A C fordítás rengeteg apró fájlból áll. Van vagy 1000 include fájl, amik betöltődnek fordítás alatt (egymást töltögetik).
Ha sok apró fájl van, akkor a merevlemez sebessége a szűk keresztmetszet fordításnál, kevésbé a CPU erőssége.
Ha nagy monstrum C fájljaid vannak, akkor számít jobban a CPU erőssége.
Ha a fájlrendszer lassú, akkor a fordítás is lassú lesz. Mindenesetre távolról elég nehéz megmondani, hogy mi lassú nálad.
Ha sok apró fájl van, akkor a merevlemez sebessége a szűk keresztmetszet fordításnál, kevésbé a CPU erőssége.
Ha nagy monstrum C fájljaid vannak, akkor számít jobban a CPU erőssége.
Ha a fájlrendszer lassú, akkor a fordítás is lassú lesz. Mindenesetre távolról elég nehéz megmondani, hogy mi lassú nálad.
Re: Extrém hosszú fordítási idő
> A C fordítás rengeteg apró fájlból áll. Van vagy 1000 include fájl, amik betöltődnek fordítás alatt (egymást töltögetik).
Tudom.
Ráadásul jól ismerem a forrást is.
> Ha sok apró fájl van, akkor a merevlemez sebessége a szűk keresztmetszet fordításnál, kevésbé a CPU erőssége.
> Ha a fájlrendszer lassú, akkor a fordítás is lassú lesz. Mindenesetre távolról elég nehéz megmondani, hogy mi lassú nálad.
Igen, de:
A két legerősebb win gépen HDD + SSD kombináció van. A HDD-k frissen töredezettségmentesítve.
A 8 éves MacBook-ban valami notebook 5400 HDD.
És tízszeres a sebességkülönbség. Ami sok.
Tudom.
Ráadásul jól ismerem a forrást is.
> Ha sok apró fájl van, akkor a merevlemez sebessége a szűk keresztmetszet fordításnál, kevésbé a CPU erőssége.
> Ha a fájlrendszer lassú, akkor a fordítás is lassú lesz. Mindenesetre távolról elég nehéz megmondani, hogy mi lassú nálad.
Igen, de:
A két legerősebb win gépen HDD + SSD kombináció van. A HDD-k frissen töredezettségmentesítve.
A 8 éves MacBook-ban valami notebook 5400 HDD.
És tízszeres a sebességkülönbség. Ami sok.
Re: Extrém hosszú fordítási idő
Távolról meglehetősen nehéz segíteni. Általánosságban leírtam, hogy mi szokott problémát okozni.
De kismillió dolog lehet mögötte. Pl. más gcc verzió is.
De kismillió dolog lehet mögötte. Pl. más gcc verzió is.
Re: Extrém hosszú fordítási idő
Köszönök minden hozzászólást.
Annyi kiderült, hogy a Makefile feldolgozása során a Cygwin (make) rengeteg új process-t indít. avr-gcc, grep, stb. Unix környezetben ez teljesen természetes, míg Windows-on sokkal költségesebb művelet a process indítás. Ez okozza a platformok közötti sebességkülönbséget.
Azt mondjuk még mindig nem értem, hogy a Windows-os gépek között miért pont olyan a különbség, amilyen. Vagyis hogy nem függ a hardwer teljesítményétől a fordítás sebessége.
Annyi kiderült, hogy a Makefile feldolgozása során a Cygwin (make) rengeteg új process-t indít. avr-gcc, grep, stb. Unix környezetben ez teljesen természetes, míg Windows-on sokkal költségesebb művelet a process indítás. Ez okozza a platformok közötti sebességkülönbséget.
Azt mondjuk még mindig nem értem, hogy a Windows-os gépek között miért pont olyan a különbség, amilyen. Vagyis hogy nem függ a hardwer teljesítményétől a fordítás sebessége.
Re: Extrém hosszú fordítási idő
Update:
A Daemon Tools Lite is bekavart Windows-on. (Feltűnt, hogy azokon a gépeken lassú a make, ahol telepítve van.)
Eltávolítottam, és a 300 másodperc 90-re csökkent. Ez még mindig 3x annyi, mint egy hasonló teljesítményű Linux/Unix gépen, de már elviselhető.
A Daemon Tools Lite is bekavart Windows-on. (Feltűnt, hogy azokon a gépeken lassú a make, ahol telepítve van.)
Eltávolítottam, és a 300 másodperc 90-re csökkent. Ez még mindig 3x annyi, mint egy hasonló teljesítményű Linux/Unix gépen, de már elviselhető.
Re: Extrém hosszú fordítási idő
Update:
Másik lassító szoftver: Comodo firewall.
Másik lassító szoftver: Comodo firewall.