À ceux qui trouvent que le noyau Linux démarre bien trop vite, Fabrice Bellard propose une solution : TCCBoot. Il s'agit d'un petit noyau (indépendant de Linux) qui contient le petit-compilateur C "TCC" du même F. Bellard. Une fois chargé, celui-ci compile les sources qu'on lui fournit dans une image ROMFS et exécute le binaire résultant. Si les sources en question sont celles du noyau Linux... alors TCC compile Linux à chaque démarrage.
Ça ne sert à rien mais c'est beau !
Aller plus loin
# plop
Posté par ced . Évalué à 8.
[^] # Re: plop
Posté par Prae . Évalué à 10.
-- Jérome Bonaldi, NPA 1999
Ce grand philosophe des catastrophes live'ienne :)
[^] # Re: plop
Posté par Seazor . Évalué à 5.
- il était dans les premiers arrivés dans NPA, il devait avoir sa propre émission le midi vers 1999 => Ca doit dater de vachement plus tot !!
- C'est : "Totallement inutile donc rigoureusement indispensable"
Note : Il a surement du en faire qq variantes ;-)
Respect pour le plus grand disciple de Murphy :)
De plus, il continue de se meler de tout à notre plus grand plaisir : https://linuxfr.org/2004/10/21/17476.html(...)
[^] # Re: plop
Posté par tgl . Évalué à 8.
[^] # Re: plop
Posté par nicolassanchez . Évalué à 5.
Ça ne doit pas être bien compliquer à faire avec gcc ça...
Avec un bon petit script qui supprime la première ligne du fichier et qui compile puis exécute dans un répertoire temporaire, y'a rien d'exceptionnel...
With libtcc, you can use TCC as a backend for dynamic code generation.
Ça parcontre, ça semble plus intéressant, bien que, avec un script du même style, tu recompiles tes sources et tu charges le merdier avec un dlopen...
[^] # Re: plop
Posté par Damien Metzler . Évalué à 6.
http://linuxfr.org/~Salagnac/4500.html(...)
[^] # Re: plop
Posté par nicolassanchez . Évalué à 0.
# Débugage
Posté par Yann012 . Évalué à 6.
[^] # Re: Débugage
Posté par XtaZ . Évalué à 1.
[^] # Re: Débugage
Posté par Pooly (site web personnel) . Évalué à 5.
[^] # Re: Débugage
Posté par Christophe Lucas (site web personnel) . Évalué à 4.
ou encore des trucs comme bochs ou qemu.
# CD live ?
Posté par 007 . Évalué à 8.
[^] # Re: CD live ?
Posté par Laurent Mouillart . Évalué à 10.
[^] # Re: CD live ?
Posté par Nap . Évalué à 3.
[^] # Re: CD live ?
Posté par Tuxmym . Évalué à -5.
[^] # Re: CD live ?
Posté par Raphaël Maurel-Segala . Évalué à 8.
... Ou, pourquoi pas, le plusser pour son caractère comique relativement à l'article ?
Ce qui pose la grande question : le comique contextuel existe-t-il? "Oui !", répondront en masse les Desprogiens. ("42", s'exclameront les lecteurs peu attentifs)
Bref, dans la veine comique, c'est tout de même F. Bellard qui a commencé, non ?
[^] # Re: CD live ?
Posté par Clément Canonne (site web personnel) . Évalué à 2.
Ook.
N'empêche, ça peut être relativement utile pour frimer devant ses copains, ça : "je recompile mon noyau toutes les semaines, ça m'évite de rouiller" :P
[^] # Re: CD live ?
Posté par Vincent Pelletier . Évalué à 3.
De ce point de vue là, ça économise des lignes de shell, ce genre de programme/concept.
Il pourrait même être bon d'intégrer ce genre de truc dans les bécanes pour parfaire la portabilité : le bios ou équivalent compile un bootloader qui se charge de charger et/ou compiler la suite, etc.
[^] # Re: CD live ?
Posté par Clément Canonne (site web personnel) . Évalué à 1.
Comment ça, "petit joueur" o_O ?:-D
[^] # Re: CD live ?
Posté par Ramso . Évalué à 4.
Ben oui, c'est le comique de situation.
[^] # Re: CD live ?
Posté par Tuxmym . Évalué à 1.
Merci Mercurial de t'être réellement posé la question.
[^] # Re: CD live ?
Posté par Jimmy . Évalué à 7.
Pour ceux qui auraient raté les épisodes précédents, je précise que le Sieur Bellard code comme un malpropre : il avait en effet remporté l'IOCCC (pour la seconde fois) avec la première version de TCC ;-)
Et en plus, dans la catégorie "best abuse of the rules" ! Respect.
http://ioccc.org(...)
http://www.de.ioccc.org/years.html#2001_bellard(...)
# Vive le C !!
Posté par zeSixty4Douille . Évalué à 2.
c'est tellement hasbeen de ne pas utiliser de templates de nos jours .. Moi je m'en vais customiser le noyau avec la STL, histoire de rajouer un peu de temps au temps au boot.
[^] # Re: Vive le C !!
Posté par 007 . Évalué à 0.
[^] # Re: Vive le C !!
Posté par zeSixty4Douille . Évalué à 3.
[^] # Re: Vive le C !!
Posté par zeSixty4Douille . Évalué à 0.
J'ai pas dit que la STL puait, la j'aurais certainement tord. Je sous entends simplement que c'est parfois long a compiler. Vous pouvez toujours moinsser, mais c'est un fait. Une forward declaration avec les Standard iostreams, c'est 3000 ligne de header quand meme ...
# Fabrice Bellard
Posté par Thomas Petazzoni (site web personnel) . Évalué à 10.
Incroyable.
[^] # Re: Fabrice Bellard
Posté par Ph Husson (site web personnel) . Évalué à 2.
Deja qemu tt seul j'etais impressionné
page d'accueil:
qemu & ffmpeg & plein de "petits" trucs a cote
et maintenant ca
pour moi c'est un dieu lui!
J'exagere ptet un tantinet mais quand meme
[^] # Re: Fabrice Bellard
Posté par Frédéric Lopez . Évalué à 3.
[^] # Re: Fabrice Bellard
Posté par Olivier Jeannet . Évalué à 5.
J'ai connu par hasard ce type qui était un camarade de mon frère. En 1995 on était allé dans sa chambre d'étudiant, où j'avais vu mon premier Linux, il tournait sous X11 et j'avais été impressionné par quelques démos, voire des jeux (à l'époque j'étais sur Amiga, et là sur Linux on pouvait bouger une fenêtre et le contenu continuait à se rafraîchir).
Quand j'avais lu dans une revue scientifique qu'un record concernant les décimales de Pi était tombé (avec un développement en série original, en binaire), j'ai vu son nom et je m'étais demandé si c'était le même; eh bien oui ! Cf http://fabrice.bellard.free.fr/pi/(...) et "A world record ! The 1000 billionth binary digit of Pi is '1'".
Ce type est impressionnant de productivité, ffmpeg est déjà un beau morceau.
# Commentaire supprimé
Posté par Anonyme . Évalué à 6.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: Impressionnant !
Posté par liberforce (site web personnel) . Évalué à 2.
Quelqu'un a une idée ?
[^] # Re: Impressionnant !
Posté par Larry Cow . Évalué à 7.
Et puis aussi, des choses comme ça:
TCC implements many features of the new C standard: ISO C99. Currently missing items are: complex and imaginary numbers and variable length arrays.
Et enfin le fait que, si TCC est léger et compile vite, il n'est pas garanti du tout que le code produit soit plus efficace que celui écrit par GCC.
TCC est une très jolie démonstration du savoir-faire du monsieur (même si QEmu et FFMpeg sont plutôt plus significatifs, à mon avis), ainsi qu'un outil de plus dans la malette de l'utilisateur de logiciel libre. Un outil qui peut s'avérer utile dans certains cas, peu fréquents certes, mais qui mérite tout de même d'exister.
[^] # Re: Impressionnant !
Posté par Ramso . Évalué à 3.
(Je dis ça au pif.)
Tiens ça me rappelle des discu^Wtrolls sur Debian...
[^] # Re: Impressionnant !
Posté par 007 . Évalué à -5.
Un noyau classique... C'est celà oouuiii...
> TCCBOOT is only 138 KB big (uncompressed code)
Ben ici le tar décompressé de Linux 2.6.9 fait 196 Mo ! Plus de mille fois plus.
Rien que pour lire l'archive (un gros fichier et pas des milliers de fichier) en 15 seconde il faut la "bouffer" à plus de 10 Mo/s.
[^] # Re: Impressionnant !
Posté par Ph Husson (site web personnel) . Évalué à 0.
Et pis bon faut voir ce qu'il compile
S'il compile à partir des sources deja compilé
et rajoute une option
Prendre 15s c'est plus que possible
[^] # Re: Impressionnant !
Posté par 007 . Évalué à -4.
Pour un noyau "classique" comme c'est indiqué ?
Mon vmlinuz (compressé) "classique" (de la distribution) fait 1.4 Mo et j'ai 31 Mo de modules.
Mon vmlinuz au petit oignons fait 930 Ko et j'ai 2.5 Mo de modules. 15 secondes pour mon noyau customiser, je n'y crois pas 0,0002 quart de seconde.
Arrêter les cigarettes qui font rire.
[^] # Re: Impressionnant !
Posté par zeSixty4Douille . Évalué à 1.
[^] # Re: Impressionnant !
Posté par Laurent Mouillart . Évalué à 1.
[^] # Re: Impressionnant !
Posté par chl (site web personnel) . Évalué à 6.
Oui, sauf qu'un compilateur ne lit pas des archives, mais des fichiers .c par exemple. De plus, pour compiler un noyeau pour une archi, certains fichiers ne vont pas etre lu par le compilateur, par exemple les fichiers des autres architectures.
Enfin, voici les resultats de TCC pris de http://fabrice.bellard.free.fr/tcc/(...) :
Donc avec une machine plus recente, il doit surement etre possible d'aller au dela des 4.8MB/s.
[^] # Re: Impressionnant !
Posté par 007 . Évalué à -2.
Compilation speed for the Links Browser project. There are 76936 lines (including headers). 1632659 lines (57.9 MBytes) are compiled because the same headers are included in many files.
Notes que _tout_ tient dans le cache.
Ça doit beaucoup jouer sur le temps de chargement de gcc.
Le 4.8 Mo/s est en tenant compte de la _relecture_ des entêtes.
Soit (sans compter la relecture des headers) : 0.226 Mo/s (beau score) !
Pour Linux (en imaginant qu'on peut extrapoler car Linux est beaucoup plus complexe que links) à ce rythme, il faut 867 secondes (14 minutes et 27 secondes).
Je ne critique pas TCC, c'est peut-être un truc super. Mais il ne faut pas "n'importe quoi".
[^] # Re: Impressionnant !
Posté par tgl . Évalué à 3.
> fichier) en 15 seconde il faut la "bouffer" à plus de 10 Mo/s.
Nan mais je suppose qu'on parle là de temps CPU, sans les IO. Après tout, c'est ça qui compte pour comparer les perfs d'un compilo ; tu comptes juste le parsing et la génération du code binaire.
(Enfin en simplifiant, parceque en fait des compilateurs peuvent aussi se différencier avec des astuces limitant entre autres les IO redondantes, comme les multiples relecture d'un même header.)
[^] # Commentaire supprimé
Posté par Anonyme . Évalué à 5.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: Impressionnant !
Posté par 007 . Évalué à 4.
Où tu vois ça ?
Je dis qu'il ne faut pas 15 secondes pour compiler un noyau linux classique.
Je suis sûr que TCC ne fait pas ça.
L'image initrd décompressée avec les sources linux à compiler fait 18Mo (compilateur compris) ! Linux en fait 10 fois plus.
Les sources dans l'image font : 399 742 (251 fichiers ".c")
Linux 2.6.9 (non, je ne vais pas downloader le 2.4.18 pour ça) : 6 463 002 (6841 fichiers ".c")
Le README :
http://fabrice.bellard.free.fr/tcc/tccboot_readme.html(...)
For your information, the patch 'linux-2.4.26-tcc.patch' gives the
necessary modifications to build a Linux kernel with TCCBOOT (NOTE: it
is not suffisant to build the kernel with its own Makefiles - I never
tried)
Voilà comment est compilé le noyau :
# This file contains the TinyCC command line arguments needed to
# produce the kernel.
# the output binary (DO NOT CHANGE IT)
-o kernel
# LDFLAGS
-nostdlib -static -Wl,-Ttext,c0100000 -Wl,--oformat,binary
# CFLAGS
-D__KERNEL__ -nostdinc -Iusr/local/lib/tcc/include -Iusr/src/linux/include
-D__GNUC__=2 -D__GNUC_MINOR__=95 -D__OPTIMIZE__ -fno-common
# sources files
usr/src/linux/tcc/kstart.S
usr/src/linux/arch/i386/kernel/head.S
usr/src/linux/arch/i386/kernel/init_task.c
...
Pas de dépendances, etc...
Je ne critique pas son boulot _ni_ ne remets en cause ses chiffres, _ni_ sont exploit !
Par contre l'interprétation de certains "Super, je vais pouvoir compiler mon noyau en 15 seconde avec TinyCC" m'énerve.
C'est chiant de devoir toujours se justifier pour des trucs aussi évidents.
[^] # Re: Impressionnant !
Posté par chl (site web personnel) . Évalué à 5.
Si tu t'exprimais correctement aussi ... les gens te comprendraient.
Tu es un incompris.
[^] # Re: Impressionnant !
Posté par 007 . Évalué à 2.
J'ai été claire (il me semble).
La différence c'est que les autres disent qu'il est normal de compiler un noyau "classique" en 15 secondes et n'ont pas à le prouver.
Moi je dois prouver noir sur blanc que ce n'est pas possible alors que c'est évident.
Cherchez l'erreur.
[^] # Re: Impressionnant !
Posté par 桃白白 . Évalué à 4.
Je croyais que tu etais 007.
[^] # Re: Impressionnant !
Posté par Guillaume Knispel . Évalué à 2.
Quand a savoir ce qu'il faut à un noyau pour etre classique...
[^] # Re: Impressionnant !
Posté par 007 . Évalué à 1.
Ooops :
Les sources dans l'image font : 399 742 lignes (251 fichiers ".c")
# Pas moi!
Posté par reno . Évalué à 0.
C'était sur un Céléron 333 à l'époque, mais bref, je ne trouve pas que Linux demarre trop vite!
Et BeOS ne trichait pas comme WindowsXP: il était immédiatement utilisable dès que l'interface graphique donnait la main..
[^] # Re: Pas moi!
Posté par Romuald Delavergne . Évalué à 3.
[^] # Re: Pas moi!
Posté par Pooly (site web personnel) . Évalué à 2.
[^] # Re: Pas moi!
Posté par reno . Évalué à 2.
Je trouve que le desktop de BeOS et KDE sont a peu pres équivalent, j'avoue ne pas connaitre oroborus..
Et puis pour BeOS je n'avais rien eu à faire, pas de recompilation rien, pas de daemon à virer, ce qui est quand même différent d'une LFS.
[^] # Re: Pas moi!
Posté par Frédéric . Évalué à 1.
Là où il perd le plus de temps, c'est dans le BIOS et dans syslinux lors du chargement du kernel et du ramdisk à partir de la CompactFlash.
Faut dire que j'ai aussi triché un peu:
- busybox dans le ramdisk
- le /usr n'est pas sur le ramdisk: il est dans un autre fichier sur la flash qui est monté par après (Goret powah !!)
- J'ai un serveur X avec XMMS sans WM, arraché de ma Woody avec un script maison.
J'estime pouvoir gagner environ 5 secondes si je vire l'image de la bootrom PXE du bios à coups de CBROM et 5 à 10 autres secondes si je fous le /lib dans le fichier du /usr (Encore plus goret... :-P)
# "Ça ne sert à rien mais c'est beau !"
Posté par ptitatou . Évalué à 1.
Après, vu l'augmentation des débits de connexion et des processeurs, on pourrait imaginé un micro noyau qui va chercher les sources du noyau, les compiles, le boot, puis va chercher quelques soft. A tout casser, ca doit tenir dans 300Ko au début !!
(Bon c'est juste une idée comme ca, je n'ai pas le temps de bosser dessus en ce moment)
Bravo quand même.
[^] # Re: "Ça ne sert à rien mais c'est beau !"
Posté par Hobgoblins Master (Mastodon) . Évalué à 1.
Et hop, plus de MAJ à faire...
[^] # Re: "Ça ne sert à rien mais c'est beau !"
Posté par Larry Cow . Évalué à 2.
# Plus besoin d'un noyau modulaire ?
Posté par yoho (site web personnel) . Évalué à 1.
Il ne reste qu'à faire un programme qui détecte le matériel et produit le fichier .config pour compiler le kernel, le tout au boot : ce qui fait qu'on a toujours un noyau monolithique mais avec les modules utiles uniquement . Si on rajoute du matériel, on reboote et un nouveau noyau est généré en fonction de sa config qui a changée.
Pour faire ce programme, il y a un bon nombre de routines de détection de matériel qu'on peut reprendre directement... du noyau.
Avis aux amateurs !
[^] # Re: Plus besoin d'un noyau modulaire ?
Posté par beny (site web personnel) . Évalué à 3.
[^] # Re: Plus besoin d'un noyau modulaire ?
Posté par Guillaume Knispel . Évalué à 4.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.