Forum Italiano di supporto ad Arch Linux
Non hai eseguito l'accesso.
Introduzione
Chi non ha sognato un boot da 5 secondi come quello degli ingegneri intel? Bene ci siamo quasi riusciti! Leggete il seguito per capire come.
PREMESSA IMPORTANTE!
Per sfruttare al massimo le soluzioni proposte si consiglia una ricompilazione pressochè statica del kernel o perlomeno la rimozione della initramfs. Questo non assicura un miglioramento netto, inquanto l'incidenza del kernel sui tempi di boot dipende dall'elaboratore. A breve una guida in merito alla ricompilazione del kernel.
PER I TESTER finit-arc-git è disponibile in AUR
http://aur.archlinux.org/packages.php?ID=26314
FINIT-ARC - Fast init for Archlinux - 0.2 BETA VERSION
ORA PER TUTTI GLI ELABORATORI
http://aur.archlinux.org/packages.php?ID=25159
Boot scritto in linguaggio C chiamato finit (reimplementazione del fast-init di Xandros) boot estremamente rapido avviando tutti i servizi in contemporanea a Xorg o al login in terminale. Il sistema oltre che per Xandros è stato portato a Mandriva e eeeXubuntu. Pensato per netbooks è stato da me reimplementato appositamente per Archlinux, per la compabilità con tutti gli elaboratori.
Caratteristiche
- Boot ultrarapido
- Prelevamento automatico dei parametri di configurazione da rc.conf
- Caricamento automatico moduli (in MODULES)
- Avvio automatico demoni (in DAEMONS)
- Possibilità di effettuare l'autostart di X con autologin
- Avvio dei comandi in rc.local
Installazione
Il sistema di boot è indipendente da init, ma preleva AUTOMATICAMENTE tutti i parametri di configurazione (hostname,keymap,moduli,demoni) da rc.conf quindi l'installazione consiste solo nell'installare il pacchetto da AUR e inserire sulla riga del kernel col quale avviare finit in /boot/grub/menu.lst, il parametro init=/sbin/finit-arc come in esempio
kernel /boot/vmlinuz26-amilo root=/dev/sda2 init=/sbin/finit-arc ro quiet
Per l'autostart di X server con autologin editate il file /etc/finittab.
Errori comuni
1) Errore con pcspkr all'avvio con kernel -ARCH
per ora risolvete con !pcspkr in MODULES di rc.conf
2) Fuso orario errato
su alcuni sistemi pare risolto con localtime
3) Non parte DBUS o altri demoni
Effettuate prima un riavvio con l'init tradizionale di Archlinux, e poi riavviate con finit-arc, non avrete piu problemi;)
4) Fam e portmap non possono essere restartati
ancora irrisolto, ma potete usare GAMIN che è la reimplementazione di FAM ed è anche meglio (cit. del wiki: Gamin is a reimplementation of the FAM specification. It is newer and more actively maintained, and also simpler to set up. )
5) Non mi parte la connessione
inserite il modulo della scheda di rete come primo nella lista MODULES e il demone network come ultimo nella lista daemons
6) Non viene montata la partizione home
ancora irrisolto
7) Finit-arc richiede oltre il 50% di CPU
é solo dovuto all'aggiornamento del kernel, riavviate ed è risolto
Prima di segnalare qualsiasi altro errore effettuate almeno 2 boot e leggete gli errori già segnalati. Il primo boot potrebbe essere piu lento dei successivi.
ATTENZIONE!! FINIT NON SUPPORTA GLI UUIDs nè in /etc/fstab nè in /boot/grub/menu.lst! QUINDI SE LI STATE UTILIZZANDO DOVETE SOSTITUIRLI, PRIMA DI BOOTARE, CON I NOMI DEI CORRISPETTIVI DEVICE (es. /dev/sdax)
Bootchart di esempio
QUICK-INIT - Per tutti gli elaboratori - VERSIONE 1.1-7
Modifica del boot di ArchLinux (file rc.sysinit). Pulizia del codice, esecuzione parallela degli step di boot.
Fujitsu Amilo M1451G - 1.73GhZ, HD 
PRO Soluzione pulita e perfettamente compatibile in quanto è stato modificato l'init originario della distro (rc.sysinit ed rc.multi). Riduzione dei tempi di boot evidente, soluzione valida per tutti gli elaboratori.
CONTRO Modifica del boot originale della distro, in caso di problemi col boot occorrerà ripristinare il file /etc/rc.sysinit da cd live.
Installazione:
1) rimuovete gli initscripts originali di Archlinux con questo comando: pacman -Rd initscripts
ATTENZIONE non utilizzate l'opzione -Rsn perchè significherebbe perdere tutte le impostazioni in rc.conf e rc.local!
2) installate il pacchetto quick-init da AUR
---
COME MIGLIORARE ULTERIORMENTE IL BOOT
- Compilazione kernel senza initramfs (help a breve)
- Aggiungete l'opzione "quiet" sulla riga del boot in /boot/grub/menu.lst
- In rc.conf avviare i daemons in parallelo aggiungendo come prefisso @ esempio:
DAEMONS(@hal @network)
COME OTTENERE GRAFICO BOOTCHART
Installazione: pacman -S bootchart openjdk6
Loggare FINIT-ARC
1 - modificare il file /sbin/bootchartd dove dice init="/sbin/init" con init=/sbin/finit-arc
2 - inserire alla fine di /usr/sbin/start-services.sh questo comando: /sbin/bootchartd stop
3 - modificare /boot/grub/menu.lst il parametro init come segue: init=/sbin/bootchartd
dopo aver effettuato il boot date il comando bootchart-render
ricordate di rimettere tutto apposto quando avete terminato
Loggare QUICK-INIT
1 - inserire in /etc/rc.local questo comando: /sbin/bootchartd stop
3 - inserire sulla riga del boot che intendiamo far avviare in /boot/grub/menu.lst il parametro init come segue: init=/sbin/bootchartd
dopo aver effettuato il boot date il comando bootchart-render
ricordate di rimettere apposto menu.lst quando avete terminato
Ultima modifica di adriano (07-05-2009 13:12:58)
Non in linea
Spero che vengano rilasciate al più presto le patch necessarie, nel frattempo mi accodo alla richiesta ![]()
Non in linea
Wow! Sembra una vera svolta! Speriamo in futuro si possa fare anche sui processori AMD...
Non in linea
non sono ingegnere ne' sono in grado di aiutarti, ma seguiro' con molto interesse questo thread di sicuro ![]()
Non in linea
beh, devo dire che la notizia a suo tempo mi aveva alquanto colpito, ma poi un po' per mancanza di tempo, un po' per varie motivi, non ho mai provato effettivamente a mettermi ad ottimizzare in questo senso.. quindi, da quanti a quanti secondi sei arrivato come tempo di boot grazie al solo kernel "patchato" ?
Non in linea
grazie a tutti per il supporto morale. Intanto ho aggiornato il topic con il link al PKGBUILD per chi volesse provare il kernel
il mio kernel patchato con una configurazione striminzita per eeepc mi dà 14 secondi, dalla scelta in grub all'avvio di X. Direi che per un 900MhZ è un risultato stupefacente ![]()
Ultima modifica di adriano (04-12-2008 09:40:34)
Non in linea
Adriano: ecco maggiori info su sreadahead
"A readahead implementation optimized for solid state discs"
http://code.google.com/p/sreadahead/
A quanto pare serve per i ssd e credo che tutti gli altri non ne traggano beneficio.
Ultima modifica di S4R0 (04-12-2008 12:47:22)
Non in linea
ho dato un'occhiata a sreadahead.
attualmente la patch esiste solo per ext3, quindi occorre avere la root con questo filesystem.
si patcha il modulo di ext3 nel kernel in modo che, a partire dall'accensione del sistema, ogni file venga marcato con un timestamp al primo accesso.
viene fatto quindi un primo boot "tradizionale" per produrre i timestamp.
alla fine di questo boot si genera una lista dei file utilizzati al boot, in ordine di utilizzo (e addirittura solo i chunk effettivamente utilizzati di file!)
il comando per generare tale lista è qualcosa del genere:
find / -type f \( -fstype ext3 -o -fstype rootfs \) > readahead.packed.new
generate_filelist readahead.packed.new
dopo di che si inserisce il demone sreadahead negli script di init, cercando di farlo avviare il prima possibile.
nei boot successivi, appena verrà chiamato sreadahead, questo comincerà a caricare in pagecache i file necessari, in ordine (e in background ovviamente)
il README nel tarball spiega bene tutto quanto, parrebbe anche semplice da portare in arch.
peccato che la mia root sia in jfs ![]()
Non in linea
pierluigi ha scritto:
ho dato un'occhiata a sreadahead.
attualmente la patch esiste solo per ext3, quindi occorre avere la root con questo filesystem.
si patcha il modulo di ext3 nel kernel in modo che, a partire dall'accensione del sistema, ogni file venga marcato con un timestamp al primo accesso.
viene fatto quindi un primo boot "tradizionale" per produrre i timestamp.
alla fine di questo boot si genera una lista dei file utilizzati al boot, in ordine di utilizzo (e addirittura solo i chunk effettivamente utilizzati di file!)
il comando per generare tale lista è qualcosa del genere:
find / -type f \( -fstype ext3 -o -fstype rootfs \) > readahead.packed.new
generate_filelist readahead.packed.new
dopo di che si inserisce il demone sreadahead negli script di init, cercando di farlo avviare il prima possibile.
nei boot successivi, appena verrà chiamato sreadahead, questo comincerà a caricare in pagecache i file necessari, in ordine (e in background ovviamente)
il README nel tarball spiega bene tutto quanto, parrebbe anche semplice da portare in arch.
peccato che la mia root sia in jfs
anche io uso jfs ma per un boot così il filesystem lo cambierei volentieri. Sto lavorando al kernel26 patchato, in modo da non utilizzare la -git . Pierluigi puoi darmi delle dritte per come avviare il demone e generare la lista? Non so bene dove mettere le mani, penso in rc.sysinit...
Appena finito di patchare il kernel mancherà solo l'implementazione di sreadahead...
Ultima modifica di adriano (04-12-2008 14:57:27)
Non in linea
adriano ha scritto:
Appena finito di patchare il kernel mancherà solo l'implementazione di sreadahead...
kernel-space:
scarica già il tarball di sreadahead (http://code.google.com/p/sreadahead/downloads/list)
lì trovi la patch 0001-superreadahead-patch.patch , e va applicata al kernel (oltre a quelle fastboot quindi)
user-space:
scompattato il tar di sreadahead, con un semplice "make" ti compili i due eseguibili sreadahead e sreadahead-pack
il demone lo farei partire alla riga 301 di /etc/rc.sysinit , ovvero subito dopo il montaggio dei filesystem compreso swap:
/sbin/readahead (ovviamente devi aver copiato l'eseguibile in /sbin)
per la generazione della lista, lo si può fare manualmente dopo un boot "normale" con:
find / -type f \( -fstype ext3 -o -fstype rootfs \) > readahead.packed.new
generate_filelist readahead.packed.new
mv readahead.packed.new /etc/readahead.packed
se tutto funziona, si può aggiungere un controllo negli script di boot per rigenerare automaticamente questa lista se il file /etc/readahead.packed non esistesse.
però ovviamente ci vuole la root in ext3 per ottenere una lista!
Non in linea
grande pierluigi concreto conciso e preciso!
provo appena finisco di lavorare al kernel
Non in linea
adriano ha scritto:
grande pierluigi concreto conciso e preciso!
provo appena finisco di lavorare al kernel
sono molto curioso.. se avessi la root in ext3 avrei provato anche subito
facci sapere ![]()
Non in linea
e lo so io devo formattare però
...cmq pierluigi una cosa non mi è chiara: anche inserendo alla riga 301 il demone, il resto dei comandi in rc.sysinit rimarrebbe inviariato, quindi verrebbero eseguiti comunque i gli script standard di arch..e il tempo di boot come fa a ridursi?
Non in linea
tutto l'accesso a disco necessario per il boot viene fatto subito da sreadahead.
non so se hai presente i grafici di bootchart.
il problema di un boot lento è che la cpu rimane in wait senza far niente per troppo tempo, in attesa di IO dai dischi.
con sreadahead viene fatto un caricamento in cache (praticamente in ram) in un colpo solo di tutti i file letti in fase di avvio.
guarda qui: http://lwn.net/images/fastboot/fastboot-f5.png (l'uso della cpu è massimizzato, riducendo al minimo l'IO wait)
comunque c'è anche dell'altro, l'articolo completo sta qui:
http://lwn.net/Articles/299483/
hanno anche "fatto del male a X" ![]()
hanno anche usato device persistenti in /dev (alla vecchia maniera)
comunque non dico di arrivare ai fatidici 5 secondi, ma un qualsiasi miglioramento tangibile con sreadahead sarebbe desiderabile
Non in linea
Maledetti!!!
Mi state tentando...
Io ce l'ho la root in ext3...![]()
Ed a giudicare da questa parte del grafico di bootchart, riducendo il waitI/O con cpu in idle i 28 secondi attuali potrebbero calare...![]()

Non in linea
4javier ha scritto:
Maledetti!!!
Mi state tentando...
Io ce l'ho la root in ext3...
Ed a giudicare da questa parte del grafico di bootchart, riducendo il waitI/O con cpu in idle i 28 secondi attuali potrebbero calare...
http://img128.imageshack.us/img128/5932 … bk8.th.png
se non ti spaventa potrai provare domani assieme a me appena avrò finito di preparare i pacchetti ![]()
Non in linea
@pierluigi: cercando di compilare il kernel con la patch di arch 2.6.27.1 e quella di fastboot uscivano i seguenti errori mentre tentava di patchare i file:
patching file drivers/md/Kconfig Hunk #1 FAILED at 32. 1 out of 1 hunk FAILED -- saving rejects to file drivers/md/Kconfig.rej
e anche
patching file init/initramfs.c Hunk #1 succeeded at 7 with fuzz 2 (offset 1 line). Hunk #2 succeeded at 84 (offset 1 line). Hunk #3 succeeded at 123 (offset 1 line). Hunk #4 FAILED at 268. Hunk #5 succeeded at 295 (offset -7 lines). Hunk #6 succeeded at 363 (offset -7 lines). Hunk #7 succeeded at 651 (offset 43 lines). 1 out of 7 hunks FAILED -- saving rejects to file init/initramfs.c.rej The next patch would create the file init/initramfs.c.orig, which already exists! Skipping patch. 1 out of 1 hunk ignored -- saving rejects to file init/initramfs.c.orig.rej
e quindi in fase di compilazione si interrompeva
CC init/initramfs.o
init/initramfs.c: In function ‘acpi_find_dsdt_initrd’:
init/initramfs.c:661: error: too many arguments to function ‘unpack_to_rootfs’
make[1]: *** [init/initramfs.o] Error 1
make: *** [init] Error 2
ho rimosso delle righe dalla patch di arch riguardanti initramfs e Kconfig, adesso compila, però volevo un tuo parere al riguardo...
Perchè secondo te da quegli errori?Cosa potremmo provare a cambiare?
Ultima modifica di S4R0 (04-12-2008 16:49:52)
Non in linea
Anche se, mi pare di capire che ad ogni eventuale aggiornamento di uno dei pacchetti riferito ad un componente avviato da init, bisognerebbe rigenerare i timestamp, pena il non avvio di qualche servizio ![]()
Non in linea
Aggiornamento primo post
Ultima modifica di adriano (05-12-2008 07:12:37)
Non in linea
4javier ha scritto:
Anche se, mi pare di capire che ad ogni eventuale aggiornamento di uno dei pacchetti riferito ad un componente avviato da init, bisognerebbe rigenerare i timestamp, pena il non avvio di qualche servizio
più che non-avvio, non sfrutti il readhaead ![]()
come funziona esattamente il comando per generare la lista? controlla semplicemente i file che sono stati letti dall'avvio, o usa qualche altro sistema?
Outside of a dog, computers are a man's best friend, inside a dog it's too dark to type.Non in linea
Mi state tentando, quasi quasi ci provo appena ho una mezzoretta di tempo
Non in linea
Adriano, sono contento dei progressi fatti, speriamo solo che pierluigi riesca a risolvere i problemi con la patch di arch.
Per il problema in /lib/firmware hai risolto?Anche se a quanto pare non ci sia bisogno di sovrascrivere i file.
PS = hai capito perchè il kernel26-arch era più veloce all'avvio rispetto a quello con patch fastboot e arch?
@psykopear: aspetta che sia tutto finito.
Cmq buon lavoro adriano ![]()
Ultima modifica di S4R0 (05-12-2008 08:33:49)
Non in linea
Si, certo aspetto che si stabilizzi un po la cosa e poi provo
Grazie per il lavoro che state svolgendo
Non in linea
S4R0 ha scritto:
Adriano, sono contento dei progressi fatti, speriamo solo che pierluigi riesca a risolvere i problemi con la patch di arch.
Per il problema in /lib/firmware hai risolto?Anche se a quanto pare non ci sia bisogno di sovrascrivere i file.
PS = hai capito perchè il kernel26-arch era più veloce all'avvio rispetto a quello con patch fastboot e arch?
@psykopear: aspetta che sia tutto finito.
Cmq buon lavoro adriano
Il problema del lib/firmware è quasi irrisolvibile per ora l'unica soluzione è forzare pacman con l'opzione -Uf, alla fine non reca nessun danno.
Per quanto riguarda il boot è sicuramente dovuto alla "patchatura" non ottimale in quanto c'è conflitto tra arch e fastboot. Per ora ho eliminato le patch -ARCH finchè non le sistemiamo per renderle compatibili.
Non in linea