# [HOWTO] Tuning Gentoo

## Saigneur

-- traduit de ce post

COMMENT OPTIMISER ET ACCÉLÉRER VOTRE SYSTÈME

aussi connu sous le nom de "Tuning Gentoo"

Ce guide est la compilation de nombre de posts des forums Gentoo et de recherches que j'ai menées sur mes bécanes en essayant plusieurs programmes et options. Certaines modifications sont sûres, mais certaines autres peuvent altérer votre système. Veuillez effectuer une sauvegarde de vos données importantes, faire les tests sur des machines de test, et ensuite passer les optimisations sur les machines de production. Le tuning aura plus d'effet sur les vieilles machines que sur les ordinateurs récents, le système étant très rapide sur celles ci  :Wink: 

INDEX

0. Comment faire des tests sans risque

1. Optimisation des scripts init

2. rc-update

3. Cflags et ldflags

4. Utiliser hdparm

5. Faut il prelinker ?

6. Gestion du Swap

7. Ccache

8. Distcc

9. Les variables USE

10. Modifier les ebuilds et insérer des packages

11. Halt vs Suspend

12. Xdelta - Deltup

13. NPTL : Native POSIX Thread Library

14. GCC

15. Systèmes de fichiers[sécurité vs performances]

16. I/O et gestionnaires de tâches

17. Scripts utiles

0. Comment faire des tests sans risque

Pour tester de nouvelles ebuilds et essayer d'autres configurations, je fais les installations en environnement chrooté. Voici un guide (EN) HERE pour faire de même, et tester cet HOWTO sans risque pour le système. Vous pouvez aussi utiliser VMWARE ou UML, mais le chroot est plus rapide.

Une fois l'installation faite sous chroot, j'ai fait une image compressé, afin de pouvoir restaurer un système altéré et continuer avec un OS propre.

1. Optimisation des scripts init

Certains processes lancés au boot du système ne sont pas toujours nécessaires. Il faut modifier les scripts pour ne lancer que ceux qui sont vraiment indispensables

/etc/init.d/modules

changer :

```
ebegin "Calculating module dependencies" 

    /sbin/modules-update &>/dev/null 

eend $? "Failed to calculate dependencies" 

```

pour :

```
if [ /etc/modules.d -nt /etc/modules.conf ]

    then 

        ebegin "Calculating module dependencies" 

        /sbin/modules-update &>/dev/null 

        eend $? "Failed to calculate dependencies" 

    else

        einfo "Module dependencies are up-to-date"

fi 

```

En faisant ceci, modules-update ne se lancera qu'en cas de besoin lors de changements dans le système.

/etc/init.d/localmount

changer :

```
mount -at nocoda,nonfs,noproc,noncpfs,nosmbfs,noshm >/dev/null
```

pour :

```
mount -aFt nocoda,nonfs,noproc,noncpfs,nosmbfs,noshm >/dev/null
```

Celà chargera tous les mounts au même moment, et non les uns après les autres.

/etc/init.d/bootmisc

changer :

```
if [ -x /sbin/env-update.sh ] 

then 

    ebegin "Updating environment" 

    /sbin/env-update.sh >/dev/null 

    eend 0 

fi
```

pour :

```
if [ -x /sbin/env-update.sh ] 

then 

    if [ /etc/env.d -nt /etc/profile.env ] 

    then 

        ebegin "Updating environment" 

        /sbin/env-update.sh >/dev/null 

        eend 0 

    else

        einfo "Environment up-to-date"

    fi 

fi
```

env-update ne se lancera qu'en cas de réel besoin lors de changements dans le système.

/etc/conf.d/rc

changer :

```
RC_PARALLEL_STARTUP="no"
```

pour :

```
RC_PARALLEL_STARTUP="yes"
```

Celà lancera tous les services au même moment, et non les uns après les autres.

note : un développeur pourrait il nous éclairer sur le danger de telles modifications, et si ce n'est pas dangereux, pourquoi ce n'est pas dans portage par défaut ?

2. rc-update

Gérer les runlevels est très simple grâce à rc-update, qui facilite le boulot :

Pour voir comment sont actuellements configurés les runlevel du démarrage :

```
# rc-update show
```

Pour ne pas démarrer un service au démarrage du système :

```
# rc-update del aplicacion runlevel
```

note : changer le runlevel pour "boot" ou "default" (vous pouvez aussi créer d'autre runlevels), si vous omettez le runlevel, ça cherchera dans tous et enlèvera le service.

Pour ajouter une application

```
# rc-update add application runlevel
```

J'ai quelques services dans le runlevel "boot" et d'autres dans "default". Veuillez noter que certains services ont besoin d'être lancés après d'autes, car il existe des dépendances entre le services.

Vous pouvez vérifier les dépendances en éditant le fichier /etc/init.d/service et en vérifiant les premières lignes, ou elles sont déclarées. Par exemple, si vous voulez lancer sshd, vous aurez besoin d'avoir les services net lancés auparavent.

J'ai récemment créé un nouveau runlevel (battery) où j'ai ajouté tout ce que je veux voir tourner lorsque je suis hors courant secteur. Ensuite, à l'aide d'acpid j'ai configuré les runlevel pour passer en mode "battery" lorsqu'il n'y a plus de courant, et revenir au "default" au retour du courant. De cette façon, lorsque je suis hors secteur, j'utilise speedfreq, hdparm et iwconfig pour réduire la consommation du DD, de la carte WiFi et du processeur.

Vous pouvez vérifier le runlevel courant en utilisant la commande "rc-status" :

```
# rc-status

Runlevel: battery

acpid                                          started

alsasound                                      started

domainname                                     started

gpm                                            started

hdparm.battery                                 started

local                                          started

metalog                                        started

speedfreq.battery                              started

vixie-cron                                     started

wireless.baterry                               started
```

Plus d'informations sur les RC- HERE.

Pour ceux qui bootent directement sous X (xdm, gdm, kdm...), j'ai vu qu'il est possible de mettre xdm et ses dépendances dans le runlevel "boot", afin de charger X avant le reste des autres services en arrière plan. Si quelqu'un a déjà fait ça, qu'il le signale afin que d'autres puissent en bénéficier.

3. cflags et ldflags

Les CFLAGS (vous pouvez les paramétrer dans /etc/make.conf) sont des paramètres qui sont passés à gcc lors de la compilation suite à un emerge. On peut être plus ou moins téméraire avec eux :

Sur CETTE PAGE et CELLE-CI, il y a un tas d'infos sur les paramètres recommandés. Mes CFLAGS pour mon Pentium 4 sont les suivants :

```
CHOST="i686-pc-linux-gnu"

CFLAGS="-march=pentium4 -mcpu=pentium4 -O3 -pipe -fforce-addr -falign-functions=4 -fprefetch-loop-arrays -fomit-frame-pointer"
```

Note : les cflags on changé un peu avec gcc 3.4.x et -mcpu est désapprouvé. Vous utiliserez -mtune à sa place. D'ailleurs, pentium-m est acceptable pour les processeurs centrino. Les CFLAGS pour mon portable centrino sont les suivants :

```
CFLAGS="-O3 -march=pentium-m -mtune=pentium-m -pipe -ftracer -fomit-frame-pointer -ffast-math -momit-leaf-frame-pointers"
```

Comme pour les CXXFLAGS, -fvisibility-inlines-hidden a été raporté comme un bon paramètre pour accélérer les compilations C++ :

Frepo a aussi été raporté comme un bon CXXFLAG, même s'il ne fonctionne pas si bien sur mon système.

Les LDFLAGS sont aussi intéressants, on en parle

ICI et LÀ. Les LDFLAGS sont des optimisations pour le dynamic loader (ld), qui ont plus ou moins le même effet que le prelink. Je les utilise déjà, et n'ai pas eu de problème lors de l'emerge de nouveaux paquetages :

```
LDFLAGS="-Wl,-O1 -Wl,--enable-new-dtags -Wl,--sort-common -s"
```

Quelquechose de plus "stable" donnerait 

```
LDFLAGS="-Wl,-O1"
```

Note : les ldflags sont "L", et non "1" (pour -W)

Note: certains utilisateurs on raporté des erreurs en utilisant des LDFLAGS. Si vous avez un problème de compilation, essayez de le supprimer (et postez vos LDFLAGS et le package ici)

NOTE : CFLAGS et LDFLAGS sont et seront un sujet pour lequel tout le monde a une opinion. La meilleure solution est peut-être de faire les tests et benchmarks soi même. Vérifiez aussi les différents posts à ce sujet dans les forums. ACOVEA (dans les portage) est un programme utile pour déterminer les CFLAGS que vous devriez utiliser. C'est un outil de benchmark qui effectuera plusieurs tests sur votre machine (le test standart dure environ une quinzaine d'heures) pour vous aider à sélectionner les meilleurs CFLAGS pour votre machine. Voir CE THREAD concernant les scripts ACOVEA et leurs résultats.

4. Utiliser hdparm

hdparm est une application importante. Elle permet de configurer les paramètres du disque dur, afin d'en tirer les meilleurs performances :

```
# emerge hdparm

# rc-update add hdparm default
```

See /etc/conf.d/hdparm

Voir la configuration actuelle :

```
# hdparm -i /dev/hda
```

Tester son disque dur :

```
# hdparm -Tt /dev/hda
```

Sur mon ordinateur, j'ai modifié /etc/conf.d/hdparm pour avoir le meilleur de mon disque : 

```
hda_args="-d1 -X69 -c1"

cdrom0_args="-d1"
```

Si vous voulez plus d'infos, man est votre ami.

```
# man hdparm
```

Jetez aussi un oeil à ce petit tutoriel.

5. Faut il prelinker ?

Prelink est une application puissante, permettant de linker les librairies d'un binaire avant de l'utiliser. Ainsi, au lieu de vérifier quelles librairies seront utilisées, prelink va modifier le binaire en ajoutant une petite description des librairies nécessaires pour tourner. Cela évite de chercher les librairies partagées à chaque fois que l'exécutable est lancé, donc l'accélère.

Important: A chaque fois que vous mettez à jour les librairies nécessaires aux binaires (par exemple glibc), vous devez relancer prelink sur le système..

C'est une petite optimisation qui sera appréciable lors du lancement de grosses applications telles que KDE (D'ailleurs, si vous prélinkez votre système, KDE ne devra plus lancer kdeinit, donc ça tournera plus vite). Les petits binaires sont rapides, donc peu sensibles au prélink.

Besoins : C'est un plus de compiler les binaires avec binutils-2.13.90.0.xx et gcc-3.2 ou plus, de d'avoir installé glibc-2.3.1-r2  ou plus. La taille des binaires va augmenter avec prelink, et pour lancer le process, vous aurez besoin d'assez d'espace sur le disque dur.

Façons de faire:

```
# emerge prelink
```

Trouver le fichier de configuration /etc/prelink.conf

```
# prelink -afmR
```

Ceci est l'utilisation courante de prelink, qui va prelinker TOUS les exécutables, après avoir vérifié s'ils l'étaient déjà.

Il est possible que vous ayiez des erreurs lors du lancement, car certains binaires ne peuvent être prélinkés (ceux compressés avec upx, par exemple)

Plus d'infos ICI, et/ou "man prelink".

Gestion du Swap

Dans cette section seront mentionnés quelques détails pouvant aider.

Tout d'abord, si vous avez deux disques durs, il est avantageux de mettre la partition de SWAP sur le second disque (en ayant la partition racine sur le premier), car celà améliorera les temps de lecture/écriture.

Il ne faut PAS utiliser un fichier comme SWAP. J'ai essayé sur un vieil ordinateur : suppression de la partition de swap, utiliséation d'un fichier swap de 256 Mo, et modifié fstab. Celà s'avère plus lent, car il faut trouver le fichier, l'ouvrir, trouver où écrire, écrire, sauver et fermer le fichier. Avec une partition, ce procédé est bien plus rapide.

Un concept à connaître est le "swappiness" (noyau 2.6 et +). Quand une application a besoin de mémoire et que la RAM est entièrement utilisée, il y a deux options : ou la RAM se vide un peu, ou le swap est utilisé (mais c'est plus lent que la RAM). Avec les nouveaux noyaux, il est possible de définir une variable pour choisir quelle option va être utilisée : purge de la RAM ou utilisation du SWAP ?

/etc/sysctl.conf

```
vm.swappiness = 40
```

Cette variable va de 0 à 100. Plus la valeur est faible, plus le noyau purgera la ram.

La valeur par défaut est de 60. Je l'ai mise à 25 sur mon ordinateur portable, afin de réduire les accès disque. Vous pouvez utiliser la commande "free -m" pour voir les statistiques de l'utilisation mémoire

7. Ccache

ccache est une application incluse dans portage et activée par défaut lors de l'emerge, qui agit comme un cache pour le compilateur. Avec ce petit programme, vous pourrez compiler bien plus rapidement que sans, spécialement pour ceux qui ont un gros "make" (vous pourriez croire qu'utiliser un cache lors de la compilation est sans intérêt, mais celà accélère des instructions comme le "make clean")

Emergez ccache et réglez la taille du cache par défaut (pour mettre un cache à 2Go, utilisez la commande "ccache -M 2G"), et ccache sera activé. Vous pouvez le vérifier avec la commande 

```
# emerge info | grep ccache

ccache version 2.3 [enabled]
```

Vous pouvez vérifier les statistiques de ccache grâce à

```
# ccache -s
```

8. Distcc

distcc est une application qui va vous simplifier la vie si vous installez Gentoo sur plusieurs ordinateurs en réseau, ou si vous avez un ordinateur très lent mais un autre plus rapide. distcc peut être combiné avec ccache, pour diminuer les temps de compilation.

distcc permet de répartir la compilation sur plusieurs ordinateurs d'un même réseau, et d'utiliser ainsi les ressources de tous les ordinateurs sur lesquels il est installé.

Plus d'informations HERE.

9. Les variables USE

Les flags USE sont un outil utile fourni par Gentoo pour configurer les paquetages tels que nous les voulons.

Par exemple, imaginons que nous voulions compiler Apache :

```
# emerge -pv apache

[ebuild N ] net-www/apache-2.0.50 -debug -doc -ipv6 +ssl 6,197 kB
```

Les options (+/-) qui figurent après le nom du programme que nous allons installer (flag -v) sont les variables USE qu'il est possible d'utiliser pour configurer le paquetage. Si par exemple nous ne voulions pas qu'apache utilise SSL, nous ferion ceci :

```
# USE="-ssl" emerge -pv apache

[ebuild N ] net-www/apache-2.0.50 -debug -doc -ipv6 -ssl 6,197 kB
```

Nous pouvons maintenant voir que SSL est maintenant désactivé, et apache sera compilé sans le support SSL.

Dans cet exemple, nous modifions la variable USE directement dans le prompt, mais ce n'est pas la façon propre de faire si nous voulons que le système se rappelle de la variable USE pour chaque compilation de ce paquetage. Nous pouvons régler la variable USE dans le fichier /etc/make.conf (tout l'environnement), ou utiliser /etc/portage/package.use (pour gérer les paquetages individuellement).

Il en va de même pour le flag "x86" (pour dire à portage d'utiliser la dernière version disponible pour chaque paquetage). Il n'est pas recommandé de régler le flag dans le prompte, mais plutôt dans le fichier /etc/make.conf, ou bien le régler individuellement :

```
# echo "app-editors/nano ~x86" >> /etc/portage/package.keywords
```

Il est important de jeter un oeil au flags USE des paquetages avant de les installer, afin de désactiver les dépendances dont on n'a pas besoin.

Par exemple, si nous voulons emerger le client IRC pour console BitchX, portage installera xmms, X et d'autres dépendances qui nous seront sont inutiles. Mettre "-xmms" et "-X" dans /etc/portage/package.use va permettre d'installer BitchX sans le support xmms et X. 

On peut trouver une description des flags USE dans le fichier /usr/portage/profiles/use.desc

10. Modifier les ebuilds et insérer des paquetages 

Gardez toujours une sauvegarde de vos fichiers avant de les modifier (Notez qu'un emerge sync réparera tout si vous ratez un ebuild).

¿C'est quoi injecter un paquetage, et à quoi ça sert ?

Souvenez vous ce moment ou vous avez essayé d'installer un paquetage X, et où portage vous a demandé d'installer Y. Par exemple, nombre d'utilisateurs génèrent le kernel à la main plutôt que d'utiliser portage pour le faire (gentoo-sources, gentoo-dev-sources, vanilla-sources, et autres). Quand vous emergez des paquetages qui ont besoin des sources du noyau (comme alsa, ou ipw2X00) installées, portage va tenter d'installer des kernel-sources. Pourquoi faire ceci si vous avez déjà votre noyau dans /usr/src ?

Note : injecting a été désapprouvé, il faut maintenant utiliser package.provided et virtuals comme ci-dessous :

- using package.provided :

package.provided dit à portage qu'un paquetage est installé (même s'il ne l'est pas). Vous pouvez utiliser ce fichier pour déclarer à portage tous les paquetages que vous avez installé à la main.

```
echo "sys-kernel/ck-sources" >> /etc/portage/profile/package.provided
```

package.provided n'affecte pas les virtuals, car les virtuals sont utilisés pour dire à portage quels paquetages installer pour une catégorie donnée :

Par exemple, pour dire à portage que vous installez x11 avec xorg et non plus avec xfree (cet exemple n'est pas parfait, mais il aide à comprendre) :

```
echo "virtual/x11 x11-base/xorg-x11" >> /etc/portage/profile/virtuals
```

Plus d'informations à ce sujet et sur la gestion de /etc/portage : man portage.

11. Halt vs Suspend

Vous êtes vous jamais demandé pourquoi éteindre l'ordinateur, alors qu'il est possible de le mettre en mémoire ou sur disque ?

Si vous le mettez en mémoire, ça a l'inconvénient de nécessiter une alimentation pour garder le système en mémoire. Mais en le mettant sur disque, vous eteignez l'ordinateur tout en conservant votre session.

En faisant celà, on évite de démarrer tous les services à chaque boot (ce n'est pas une sortie de veille, mais c'est bien plus rapide qu'un boot).

J'ai utilisé swsusp2 sur mon ordinateur portable, et ça fonctionne bien. Mais il faut patcher les sources du noyau. Plus d'infos ICI. Essayez, vous ne regretterez pas.

12. Xdelta - Deltup

Dans ce thread , le sujet de Deltup est abordé, car une nouvelle version en est disponible. A chaque fois que portage doit télécharger un fichier, deltup regardera si une version précédente du fichier (/usr/portage/distfiles) est présente, ne téléchargera que la différence entre les deux fichiers, et créera le nouveau à la volée.

Celà peut être important pour les utilisateurs de petites connexions qui veulent maintenir leur /usr/portage/distfiles à jour pour ne télécharger que les patches quand de nouvelles versions sont publiées, car celà peut réduire beaucoup la quantité de données à télécharger lors de l'emerge de nouvelles versions des packages installés.

13. NPTL : Native POSIX Thread Library

Cette librairie, connue sous le nom de NPTL, peut améliorer votre système, car elle est jusqu'à quatre fois plus rapide que LinuxThreads pour créer de nouveaux threads.

Vous *devriez* utiliser les headers linux 2.6, et une version récente de glibc et gcc (~x86 : version 3.x). Pour utiliser NPTL, vous avez juste à recompiler glibc avec le flag USE "nptl" 

Vous trouverez plus d'infos et des benchmarksICI.

14. GCC

GCC est très important, surtout dans une distribution telle que Gentoo, où les utilisateurs essaient d'optimiser leur système en compilant eux-même les paquetages qu'ils installent. En utilisant une version à jour, vous aurez un code plus optimisé (depuis la version 3.4.X, vous pouvez utiliser -march=pentium-m pour les processeurs Centrino)

Pour installer la dernière versino de GCC, émergez simplement gcc avec ~x86 activé (modifiez votre profil en conséquence) :

```
# echo "sys-devel/gcc ~x86" >> /etc/portage/package.keywords

# emerge -u gcc
```

Systèmes de fichiers[sécurité vs performances]

Après avoir essayé plusieurs systèmes de fichiers, j'utiliser reiser4, car c'est le plus rapide. Je pense qu'il est très utile d'utiliser un FS rapide, mais il faut faire des sauvegardes des données au cas où des fichiers soient corrompus.

Notez qu'après avoir utilisé ext2, ext3, reiserfs, xfs et d'autres FS chiffrés, je n'ai jamais eu de données corrompues. 

Ne pas oublier de compiler le noyau avec le support du système de fichiers correspondant,

Pour convertir votre partition racine en reiser4, vous aurez besoin d'un LiveCD avec le support de reiser4 comme [CELUI-CI.

NOTA : Certaines personnes ne trouvent pas le sous-menu "Reiser4" dans l'arbre Filesystems du kernel. Assurez-vous auparaventd'avoir désactivé l'option "use 4kb for kernel stacks" au lieu de 8Kb dans le sous-menu "kernel hacking".

I/O et gestionnaires de tâches

A venir...

Scripts utiles

Il y a quelques scripts utiles sur les forums et dans l'arbre de portage pour gérer votre système :

1- esearch

Celui-ci est inclus dans l'arbre de portage (emergez esearch), et sert à faire des recherches dans la base de données de portage. Ce script est plus rapide que "emerge -sS".

Notez qu'après chaque "emerge sync", il faut mettre à jour la base de données esarch en lançant la commande "eupdatedb", ou bien vous pouvez utiliser esync pour mettre à jour l'arbre de portage (esync emergera sync, et montrera alors une liste des différences d'avec l'ancienne sync)

2- portagedb

Même concept qu'esarch, mais plus rapide (et plus rapide à mettre à jour la base portage). Le projet est encore jeune mais déjà bon. Plus d'infosICI.

3- Cruft

Ce script génerera une liste de tous les fichiers du système qui peuvent être effacés car ils n'appartiennent à aucun paquetage installé. Veuillez faire attention à ce que vous faites car il peu générer de faux positifs.

Usage:

```
# ./cruft > cruft.log
```

Vous pouvez alors vérifier la liste et en virer les fichiers que vous voulez garder. Ensuite, lancez cette commande pour vous débarasser des fichiers de trop :

```
# cat cruft.log | xargs rm -rf
```

Vous pouvez aussi juste jeter un oeil à la liste et supprimer les fichiers vous-même

Plus d'infos ICI.

4- Stale

Script intéressant qui vous aidera à maintenir /usr/portage/distfiles dans une taille optimale. Ce script cherchera (et supprimera, avec l'option "--nopretend") dans ce répertoire les fichiers obsolètes. Par exemple, si vous avez libtool-1.3.5.tar.gz et libtool-1.5.2.tar.gz, il supprimera libtool-1.3.5.tar.gz.

Ce script a des difficultés avec des fichiers comme font-arial-iso-8859-1 et font-arial-iso-8859-2, où la numération ne correspond pas à la version du paquetage. (de même avec gtk et glib dans leur version 1.X et 2.X)

Plus d'infosICI.

5- Porthole

Application faite en python (+gtk) permettant de configurer visuellement portage, et facilitant la configuration de paquetages et d'emerges. Déjà présent dans portage, il suffit de faire "emerge porthole" pour l'installer.

6- guitoo

Un autre gestionnaire graphique de portage, fait en Qt (pour les amoureux de KDE). Jeune projet, mais fonctionne bien.

Plus d'infos ICI.

Vous trouverez aussi d'autres scripts et programmes utiles liés à portage dans  ce thread.

-- En construction --

----------

## moon69

ya une partie en anglais! c'est normal doc?  :Smile: 

----------

## Saigneur

Oui. Je ne l'ai pas (encore  :Wink: ) indiqué au début, mais c'est une traduction du thread [HOWTO] Flying with gentoo  :Smile: 

La traduction est en cours.

----------

## zdra

BRAVO ! c'est toujour bon ce genre de howto, on apprend des ptit trucs bien sympa  :Very Happy: 

----------

## bob1977

Tres bonne idee de traduire ce topic. J'y ai appris beaucoup de choses. 

 Cependant, dans un des posts du topic original, j'ai appris que certaines choses peuvent ne pas marcher en particulier les modifications des scripts rc. Par exemple, le montages des systemes de fichiers en parallele peut ne pas marcher si un systeme doit etre monte dans un autre ( a part la racine bien sur): exemple: monter /usr et /usr/local. La plupart des gens ne font pas ca mais ca existe.

 C'est quand meme une excellente idee.

EDIT: voici le lien :

http://thread.gmane.org/gmane.linux.gentoo.devel/22100

----------

## babykart

completement d'accord avec toi bob1977...

d'ailleurs certaines réponses sont carrement un complément, en particulier teutzz quand il donne des précisions sur les CFLAGS de GCC... 

ce HOWTO est une bonne initiative, mais il mériterait un update/synthèse par la même occasion...

bon courage   :Wink: 

----------

## aris

je n'ai pas encore tenté de faire la paralelisation des RC... mais si on ne veut pas faire ca, une autre chose importante à faire est de regler le timeout DHCP ou au moins desactiver dhcp si le reseau n'est pas detecté (je mets 2 minutes de plus à booter mon portable en dehors de chez moi à cause de ca)

----------

## Saigneur

Je propose que le tuning "sûr" soit ajouté au fur et à mesure de vos idées, afin de compléter cette rubrique.

Pour ma part, je crains de ne pas pouvoir regarder fréquemment le thread original, donc n'hésitez pas à me MP pour me signaler un changement que je m'empresserai alors de traduire.

De même, si vous voyez des fautes, des liens à ajouter (En français, de préférence  :Smile: ), à supprimer etc.... dites-le moi  :Smile: 

Peut-être pourrait on intégrer ce machin dans le wiki ?

Bonne lecture et merci de votre attention.

----------

## bob1977

Je vais resumer le lien que j'ai donne precedemment

Quand on fait ca:

 *Quote:*   

> /etc/init.d/modules
> 
> changer :
> 
> Code:
> ...

 

Le if [ /etc/modules.d -nt /etc/modules.conf ] n'est vrai que si le repertoire /etc/modules.d a ete modifie plus recemment que le fichier /etc/modules.conf. Malheureusement, quand un fichier du repertoire est modifie, ca ne modifie pas la date de modification du repertoire. Le repertoire est marque modifie quand un fichier y est cree ou enleve....

 Ceci s'applique aussi pour la modification de /etc/init.d/bootmisc .

 Certains developpeurs ont propose d'utilise find pour trouver les fichiers du repertoire /etc/modules/d qui sont plus recent modules.conf mais a ce moment-la du boot, on n'est pas sur que /usr soit monte.

 A mon avis, c'est pour ca que les developpeurs gentoo ne l'avaient pas mis dans leur code.

 Je me suis un peu etendu mais comme ca, ca doit etre plus clair.

----------

## bosozoku

Yeah ! terrible on apprend pleins de trucs la !

Je regarderais tout ça ce week end avec attention.

----------

## zdra

OFF: pourquoi epiphany me met un encodage (table de charactere) automatique sur le chinois simplifié (GB18030) uniquement pour cette page ????

----------

## yoyo

Pour les rc-scripts, un petit tour sur www.gentoofr.org (rubrique thèmes -> Trucs et astuces) et les scripts modifiés sont récupérables via 'wget' : elle est pas belle la vie ???

L'adresse exacte : http://www.gentoofr.org/commentaire.php?id_lien=17&mod=1&id=27

Enjoy !

PS : la seconde page ( http://www.coyotegulch.com/acovea/index.html ) me renvoie une erreur 404 ...

----------

## jpwalker

+1

Je n'ai pas lu le post en entier, mais à la vue du sommaire, je me régale d'avance  :Very Happy: 

Merci  :Wink: 

----------

## matthias*

 *aris wrote:*   

> je n'ai pas encore tenté de faire la paralelisation des RC... mais si on ne veut pas faire ca, une autre chose importante à faire est de regler le timeout DHCP ou au moins desactiver dhcp si le reseau n'est pas detecté (je mets 2 minutes de plus à booter mon portable en dehors de chez moi à cause de ca)

 

d'ou l'interet des softs levels pour differentes config reseau, sur mon portable j'ai les softlevels wifi(default), ethernet et nonetwork, car c'est vraiment insuportable d'attendre le up d'une  interface reseau voué à l'echec   :Confused: 

----------

## sireyessire

 *matthias* wrote:*   

>  *aris wrote:*   je n'ai pas encore tenté de faire la paralelisation des RC... mais si on ne veut pas faire ca, une autre chose importante à faire est de regler le timeout DHCP ou au moins desactiver dhcp si le reseau n'est pas detecté (je mets 2 minutes de plus à booter mon portable en dehors de chez moi à cause de ca) 
> 
> d'ou l'interet des softs levels pour differentes config reseau, sur mon portable j'ai les softlevels wifi(default), ethernet et nonetwork, car c'est vraiment insuportable d'attendre le up d'une  interface reseau voué à l'echec  

 

d'où l'intérêt des modules pour ne lancer que ce qui va bien et surtout de quickswitch qui permet de changer entre plusieurs configs réseau

----------

## matthias*

 *sireyessire wrote:*   

> d'où l'intérêt des modules pour ne lancer que ce qui va bien et surtout de quickswitch qui permet de changer entre plusieurs configs réseau

 

interessant quickswitch , personnellement comme mes 2 interfaces sont en DHCP et que je ne switch pas de l'une à l'autre les softlevels me conviennent mieux mais c'est un truc à tester :d

----------

## herlock

est-ce que nptl est un réel avantage ? Quelqu'un aurait fait des test (même approximatif). Ca en vaut vraiment le coup ?.

----------

## Trevoke

Ca en vaut vraiment le coup.

----------

## herlock

Bon c'est parti pour une compile alors... jverrai bien  :Smile: 

----------

## yoyo

 *Saigneur wrote:*   

> Comme pour les CXXFLAGS, -fvisibility-inlines-hidden a été raporté comme un bon paramètre pour accélérer les compilations C++ :
> 
> Frepo a aussi été raporté comme un bon CXXFLAG, même s'il ne fonctionne pas si bien sur mon système. 

 

Bon, après un 'emerge sync', je vois des mises à jour de arts et kde; je me dis kde==C++ donc c'est le moment de tester ces CXXFLAGS.

Et bien pas moyen !!! les compiles foirent à chaque fois, même avec le '-fvisibility-inlines-hidden' qui est sensé bien fonctionner ...   :Crying or Very sad:   :Crying or Very sad: 

Y-a-t-il une manip à exécuter pour pouvoir utiliser ces flags ??? (genre recompiler gcc ou glibc ou lib-compat etc. ...)

----------

## Mac Cloud

Super boulot !

J'avais bien envie de le faire ce "how too"en plus .... mince alors !

Mais je fais déja tout ca .... + sources nitro avec cflags ... des pistes pour en faire encore plus ?

----------

## Mac Cloud

 *yoyo wrote:*   

>  *Saigneur wrote:*   Comme pour les CXXFLAGS, -fvisibility-inlines-hidden a été raporté comme un bon paramètre pour accélérer les compilations C++ :
> 
> Frepo a aussi été raporté comme un bon CXXFLAG, même s'il ne fonctionne pas si bien sur mon système.  
> 
> Bon, après un 'emerge sync', je vois des mises à jour de arts et kde; je me dis kde==C++ donc c'est le moment de tester ces CXXFLAGS.
> ...

 

-fvisibility-inlines-hidden ne passe pas a tous les coups chez moi ... encore moins normal quand on y réflèchit vu que ca bloque au moment des "checks"...

----------

## Oni92

J'ai essayé d'ajouté le support de NPTL à glibc, j'ai eu xmms, mplayer, xine, et Ximian-OpenOffice (version binaire français) qui mon fait des segmentations faults, et remerger xmms (c'est le seul que j'ai tenté) n'a rien donné  :Rolling Eyes: , obligé de viré NPTL pour que ça marche à nouveau...

----------

## yoyo

 *Oni92 wrote:*   

> J'ai essayé d'ajouté le support de NPTL à glibc, j'ai eu xmms, mplayer, xine, et Ximian-OpenOffice (version binaire français) qui mon fait des segmentations faults, et remerger xmms (c'est le seul que j'ai tenté) n'a rien donné , obligé de viré NPTL pour que ça marche à nouveau...

 

La glibc n'est peut-être pas la seule à utiliser le flag nptl :

```
cd /var/db/pkg

grep nptl */*/IUSE | sed 's:/IUSE.*::'
```

Tu as essayé de recompiler ton noyau ??

A savoir : ce flag ne fonctionne qu'avec un noyau 2.6 ...

----------

## sireyessire

 *yoyo wrote:*   

>  *Oni92 wrote:*   J'ai essayé d'ajouté le support de NPTL à glibc, j'ai eu xmms, mplayer, xine, et Ximian-OpenOffice (version binaire français) qui mon fait des segmentations faults, et remerger xmms (c'est le seul que j'ai tenté) n'a rien donné , obligé de viré NPTL pour que ça marche à nouveau... 
> 
> La glibc n'est peut-être pas la seule à utiliser le flag nptl :
> 
> ```
> ...

 

il faut pas aussi des linux26-headers pour que ça marche? où alors il y a un patch spécial à mettre si tu veux toujours utiliser les headers des 2.4

----------

## Oni92

Pour les Linux26-hearder c'est bon normalement... Sinon je vais regarder les ebuilds qui utilse NPTL et le noyau quand je serai sur ma machine  :Rolling Eyes: 

----------

## Oni92

J'ai trouvé une piste pour mon problème  :Rolling Eyes: 

http://gentoo-wiki.com/NPTL

 *Quote:*   

> You may also need to re-emerge nvidia-glx if XMMS and MPlayer segfault after switching to NPTL. 

 

----------

## Velhcro

Hello  :Smile: 

Juste pour info :

en ce qui me concerne, avec les optimisations LDFLAGS dans make.conf, impossible de compiler samba-3.x sur une install toute fraîche

A+

----------

## Trevoke

Les LDFLAGS, tu les determines pour ton systeme, ca change pour tout le monde..

----------

## zdra

Je vois qu'on parle ici de regler le timeout du dhcp... j'aimerais bien savoir comment on fait ! je cherche ça depuis qq temps déjà et je ne trouves pas  :Sad: 

une idée ?

merci !

----------

## GNUTortue

 *zdra wrote:*   

> Je vois qu'on parle ici de regler le timeout du dhcp... j'aimerais bien savoir comment on fait ! je cherche ça depuis qq temps déjà et je ne trouves pas 
> 
> une idée ?
> 
> merci !

 

dans /etc/conf.d/net :

```
dhcpcd_eth0="-t 10"
```

pour 10 secondes par ex

pour le reste 

```
man dhcpcd
```

 ^^

----------

## zdra

génial ça marche !

merci  :Smile: 

----------

## Trevoke

 *Quote:*   

> *  x11-misc/xtoolwait
> 
>       Latest version available: 1.3
> 
>       Latest version installed: [ Not Installed ]
> ...

 

 *Quote:*   

> DESCRIPTION
> 
>        Xtoolwait notably decreases the startup time of an X session by  reduc-
> 
>        ing the load on the X server and the OS.  Xtoolwait starts the X client
> ...

 

----------

## _droop_

Bravo pour la tres bonne traduction (voir plus si affinite mais la j'ai pas le temps de lire en entier) d'un sujet essentiel sur la gentoo   :Smile: 

----------

## Mac Cloud

Petite question : si l'on dispose de deux disques de même vitesse est-il intéréssant de monter /usr sur le second disque pour accélérer portage : la sandbox et bien dans /usr/portage/ ... ?

----------

## marvin rouge

avec 2 disques de même vitesse, tu peux te faire du RAID0 logiciel, histoire de doubler ton taux de transfert ...

----------

## mrlag

J'essaye de démarrer kde avant des services dont je n'ai pas vraiment besoin dès les premières secondes de boot (réseau, cups, etc ...). J'ai un pc portables et celà m'arrive tout de même assez souvent de poiroter sur le dhcp ou le ntp-client pour rien.

Au début je voulait créer un runlevel 'xorg', pensant le démarrer après 'default' en reglant dans inittab 'default' sur 3 et 'xorg' sur 4. Cependant il semblerait que ce soit l'un OU l'autre ...

J'ai donc mis xdm et xfs dans le runlevel boot comme indiqué ici. Cependant X ne se lance qu'après le démarrage complet du runlevel 'default' (je ne sais pas pquoi ???)

----------

## Mac Cloud

HOP

Un lien utile est "officiel" sur les CFLAGS pour les heureux possésseurs d'AMD 64 !

https://forums.gentoo.org/viewtopic.php?t=257417&start=0&postdays=0&postorder=asc&highlight=

UNHOP

----------

## Scullder

Voilà, je viens déterrer un topic, juste pour voir si quelqu'un est intéressé par remettre au gout du jour l'article du wiki basé sur ce topic  ici :

http://fr.gentoo-wiki.com/HOWTO_Optimiser_et_acc%C3%A9l%C3%A9rer_votre_syst%C3%A8me

J'ai rajouté quelques trucs sur ext3, la swap...

On peut peut-être séparer en plusieurs articles ? En se basant sur le wiki anglais.

----------

## freezby

lu all,

Comme demandé dans le premier post, je rapporte une erreur de compile avec les LDFLAGS pour libpcre-6.6 (je suis en ~x86).

Cela plante au moment de la compile de la recompile de pcre_scanner_unittest.cc

Mes LDFLAGS :

```
LDFLAGS="-Wl,-O1 -Wl,--enable-new-dtags -Wl,--sort-common -s"
```

Je ne peux pas vous mettre l'erreur exacte car je n'ai pas encore de X & Co.

En gros elle dit :

```
collect2: ld returned 1 exit status

make: *** [pcre_scanner_unittest] Erreur 1
```

J'ai essayé sans LDFLAGS. J'ai également essayé de forcer l'option -j1 dans le MAKEOPTS comme indiqué dans certains bugs, mais rien n'y fait.

Je suppose que cette erreur est en rapport avec les LDFLAGS vu l'erreur mais peut être que je me trompe ?

Doit-je recompile la glibc sans les LDFLAGS ?

Un ptit coup de main serait le bienvenue ^^

Merci

----------

## Scullder

 *freezby wrote:*   

> lu all,
> 
> Comme demandé dans le premier post, je rapporte une erreur de compile avec les LDFLAGS pour libpcre-6.6 (je suis en ~x86).
> 
> Cela plante au moment de la compile de la recompile de pcre_scanner_unittest.cc
> ...

 

pour le --enable-new-dtags, c'est mieux d'indiquer ça dans ton make.conf :

EXTRA_ECONF="--enable-new_ldflags"

Ce paramètre sera passé au script configure, et utilisé que si c'est dispo et fonctionnel. J'utilise ça, je crois que ça fonctionne avec KDE.

En cas de problème de compil, réessaie toujours avec des cflag, cxxflags et ldflags "safe", et tu peux même réessayer de recompiler les dépendances si ça suffit pas (des lib peuvent être cassées). C'est assez galère de jouer avec ça.

Pour moi, ça a aussi bloqué sur libpcre avec des ldflags totalement différent, et j'ai enlevé un ldflag que t'utilises pas pour que ça compile.

Pour la glibc, l'ebuild filtre lui même les flags, je l'ai jamais cassée.

----------

## freezby

Merci de ta reponse, c'etait en fait le -frepo de mon CXXFLAGS qui merdait. Mais c'est vrai que c'est galere a trouver lequel exactement qui fait planter.

Merci a toi ^^

----------

## Scullder

de rien ^^

Mais -frepo ? Ca sert à quoi en fait ?

----------

## freezby

Tiens voici le post ou j'ai pris mes informations : 

https://forums.gentoo.org/viewtopic.php?t=182924

----------

## Scullder

J'ai essayé ce flag mais une compil sur deux plantent comme par hasard sur des template.  :Very Happy:  j'enlève

----------

## Enlight

Tu devrais demander soutien dans le forum plutôt je pense, sinon deux questions :

Pourquoi pas de -Wl, devant le -s?

quand à ld ce serait bien de savoir l'erreur exacte, là on sait juste que ça a foiré mais il peut très bien tout connement ne pas avoir trouvé un fichier.

Puis sinon, côté LDFLAGS, c'est p'tet l'heure de casser l'ABI des elfs et de passer au nouveau hash de Dan Bernstein qui a été intégré dans les versions binutils > 2.17 et les versions >= 2.5 de la glibc.

----------

## freezby

lu enlight,

j'ai résolu mon problème donc de ce coté la c'est bon.

Par contre je te remercie de ton post, certes constitué d'un langage un tantinet barbare pour moi mais qui va me donner d'autres informations à chercher pour progresser ^^^.

Quant au -Wl manquant avt le -s je ne sais pas, après avoir lu pas mal de post sur le forum il s'est avéré que la plupart des gens utilisant les LDFLAGS mettait cette option comme ça ?

EDIT : Je viens de voir que y avait un articles sur le WIKI (en). Pour ceux que ca intéresse :

http://gentoo-wiki.com/HOWTO_Hashstyle

bye

----------

## Scullder

Je l'ai fait pour le hashstyle, ça marche très bien xD 

Personne n'est motivé pour le wiki ?

----------

## zyprexa

Bonjour

Très sympa cette synthèse claire & tout & tout, bravo.

J'ignore si ca a déjà été dit ici (j'ai lu en diagonale), mais peux-être serait-il intéressant d'examiner ce thread

Il explique comment copier la plupart des libs du système sur un ramdisk au moment du démarrage.

C'est un peu lourd à déployer, mais j'avoue que lancer firefox et toutes les autres applis quasi-isntantanément n'a pas manqué d'attirer mon attention.

Peut-être juste pour le citer ?

Si je me lance dans l'aventure, je ferai peut-être un howto en francais.

----------

## Enlight

 *zyprexa wrote:*   

> Bonjour
> 
> Très sympa cette synthèse claire & tout & tout, bravo.
> 
> J'ignore si ca a déjà été dit ici (j'ai lu en diagonale), mais peux-être serait-il intéressant d'examiner ce thread
> ...

 

Le problème c'est que le coup du firefox instantanée c'est du flan, j'ai voulu preloader FF d'une autre manière et je me suis apperçu tout bêtement que pour cater firefox, toutes ces libs et les ficheirs qu'il ouvre (vu avec strace) ça prenait 0.1 à .04 seconde donc ce n'est vraiment pas le gros du problème.

Les seuls trucs qui m'ont fait accélérer le premier lancement sont les gnu hash et prelink.

Le seul truc que je verrais à faire en plus c'est de linker ces libs là  (et uniquement celles là sinon on pert tout l'intérêt e prelink) avec l'option --as-needed.

 *Quote:*   

>  ldd -r -u /usr/lib/mozilla-firefox/firefox-bin 
> 
> Unused direct dependencies:
> 
> 	/usr/lib64/mozilla-firefox/libxpcom.so
> ...

 

 Mais ça demande un patchage du makefile. 9a peut toujours se tenter à l'occase si quelqu'un est chaud. Après le seul truc à faire serait de recoder les libs plus intelligement...

----------

## Temet

Chez moi, le "RC_PARALLEL_STARTUP="yes"" ne sert à rien du tout, à part me foirer ma barre de progression lors du boot.

----------

## pathfinder

 *Quote:*   

> /etc/conf.d/rc
> 
> changer :
> 
> Code:
> ...

 

je n ai lu que la page 1 de ce topic

mais ceci est dangereux, j avais lu que beaucoup avaient des problemes sur ubuntu en particulier en faisant ceci...

je dois me rappeler, ca avait a voir avec certaines cartes meres et une RAM de 4Go non reconnue.

mon grain de sable, tres vague, desole.

mais faites gaffe sur ceci.

basiquement, je dirais que certains scripts dependent d autres, il y a donc un ordre a suivre.

si on ne le suit pas, on peut monter tout ca a l envers. sinon, globalement, en faisant gaffe aux dependances, ca accelere pas mal en effet. (si ca passe)

----------

