2010-09-12 8 views
8

Sto costruendo webkit (2 milioni di righe di codice) ogni dieci minuti per vedere l'output del mio cambiamento in esso, e il collegamento di webkit sulla mia macchina richiede di elaborare 600-700 MB di file oggetto che sono presenti sul mio hard-disk. Questo richiede circa 1,5 minuti. Voglio accelerare questo processo di collegamento.Speed ​​Up velocità di collegamento/collegamento veloce su linux

C'è qualche possibilità che io possa dire a OS di mantenere tutti i file oggetto solo nella RAM (ho 4 GB di ram). C'è un altro modo per accelerare il collegamento?

Qualsiasi idea o aiuto è apprezzata!

Ecco un comando che prende 1,5 minuti,

http://pastebin.com/GtaggkSc

+0

Puoi confermarlo con es. in alto o vmstat? I dati dovrebbero già essere nella tua cache, ma il linker avrà anche bisogno di un po 'di tempo per elaborarlo - quindi potresti essere legato alla CPU. –

+0

@Turbo J, ho scoperto che nel mio processore solo un core viene utilizzato per il 22-25%. – SunnyShah

risposta

11

Ho risolto questo problema utilizzando tempfs e gold linker.

1). tmpfs: mount directory che contiene tutti i file oggetto come tmpfs.

2). gold linker: l'uso del linker oro renderà i collegamenti 5-6 volte più veloci, con l'aumento del vantaggio di tmpfs sarà 7-8 volte rispetto al normale collegamento. usa il seguente comando su ubuntu e il tuo linker normale verrà sostituito con Gold Linker.

sudo apt-get install binutils-gold 

È possibile trovare alcuni errori di collegamento utilizzando il linker oro, sotto la discussione è un buon aiuto su di esso.

Replacing ld with gold - any experience?

2

tenta di utilizzare una ramdisk

+5

Oppure, su un moderno sistema Linux, un tmpfs è generalmente migliore. – MarkR

+1

Eseguo il mio linux in un'immagine VMWare che vive su un ramdisk. Con una configurazione linux minima speciale solo per la compilazione. È molto difficile, altrimenti, essere sicuri che tutto sia nella RAM. Ma questo richiederà molto più di 4 GB, 16 GB sono minimi. – Lothar

1

Sinceramente io non sono sicuro di aver capito il problema, ma sarebbe qualcosa di simile ramfs essere utile a tu?

+0

Grazie per il commento, ho chiarito la mia domanda ora. – SunnyShah

+0

OK, quindi sembra che usare ramfs (o ramdisk come suggerito mmonem) sarebbe utile a condizione che ti permettessero di creare "dischi" sufficientemente grandi (disclaimer: non ho mai usato nessuno dei programmi ma io Ho sentito parlare della loro utilità).Copia i file oggetto richiesti sul "disco" e punta il linker a questi file anziché a quelli sul tuo disco rigido. Spero che questo ti aiuti. –

+0

Grazie Matt, sto controllando la tua soluzione adesso. – SunnyShah

1

Ottieni un disco SSD per la tua macchina Linux. Se le prestazioni di scrittura sono ancora un problema, configurare il percorso di uscita in un disco ram.

Avete misurato quanto del 1.5 min è realmente legato all'IO? Webkit essendo così grande significa che è possibile eseguire il Cestino della cache di memoria. Dovresti provare a scoprire quante cache L1/L2 mancano. Suggerirei che questo è un problema. In questo caso, la tua unica speranza è che qualcuno del team GCC si occupi di questo problema.

A proposito: Microsoft ha lo stesso problema con i tempi estremi del linker.

+0

Hai appena guardato il tuo cestino incollato. Dovresti davvero provare a raggruppare i singoli file .o in un .lib - questo può essere un problema. E prova a usare ReiserFS, che è molto meglio con piccoli file poi con altri filesystem. – Lothar