Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
sysadmin:tuning_debian_cf [2010/03/21 19:23]
james typo
sysadmin:tuning_debian_cf [2019/08/20 14:15] (Version actuelle)
james [Placer les fichiers temporaires en mémoire vive]
Ligne 1: Ligne 1:
 +{{tag>​optimisation disque SSD CF partition partition_alignement tmpfs}}
 ====== Optimisation d'​installation debian sur support CF / clef USB ====== ====== Optimisation d'​installation debian sur support CF / clef USB ======
  
 Conseils pour installer une Debian sur un support ayant un nombre d'​ecriture limité (carte CompactFlash,​ SD, clef USB, ...) Conseils pour installer une Debian sur un support ayant un nombre d'​ecriture limité (carte CompactFlash,​ SD, clef USB, ...)
  
-Je n'ai pour l'​instant pa expérimenté la totalité des astuces decrites ici, faute d'​avoir craqué pour le mini PC qui servira ​de mediacenter+La plupart ​de ces manipulations ont été testées sur : 
 +  * ubuntu 10.04 installée sur le "SSD du pauvre"​ OCZ throttle (clef eSATA branchée en SATA) , utilisation:​ médiacenter 
 +  * ubuntu 10.10 installée sur une Clef USB Corsair Voyager 8 Go , utilisation : desktop
  
 +===== Aligner les partitions sur les blocs physiques =====
  
-===== Utiliser ​un systeme ​de fichier non journalisé =====+Il faut aligner les partitions sur les blocks physiques des SSD : l'​ecriture d'un bloc sur le filesystem ne se fera donc pas "a cheval"​ sur 2 blocs physiques et ne nécessitera donc pas d'​ecrire 2 blocs, mais bel et bien un seul, d'ou un gain substantiel aussi bien en temps d'​ecriture (/2) mais aussi pour la durée ​de vie des blocks.
  
-Les systemes ​de fichier journalisés (ext3 ou ext4 par exemple) écrivent continuellement un fichier journal sur le SSD, ce qui peut l'user prématurément.+En général les SSD ont des blocs physiques ​de 512k ou 2048k (a vérifier pour votre modele exact de SSD).
  
-En utilisant un système de fichiers non journalisé on évite l'ecriture ​du journal sur le support : le systeme ​de fichier ext2 conviendra tres bien.+Un alignement a 2048k étant aussi aligné pour 512k, l'​alignement 2048k est a privilégier si vous ne connaissez pas la taille exacte de blocs de votre SSD. 
 + 
 +Cette création de partitions alignées ne sera pas décrite dans le détail ici, voir par exemple cette doc en anglais : http://​blog.nuclex-games.com/​2009/​12/​aligning-an-ssd-on-linux/​ 
 + 
 +===== Utiliser un système de fichier non journalisé ===== 
 + 
 +Les systèmes de fichier journalisés (ext3 ou ext4 par exemple) écrivent continuellement un fichier journal des modifications sur le SSD, ce qui peut l'user prématurément. 
 + 
 +En utilisant un système de fichiers non journalisé on évite l'écriture ​du journal sur le support : le système ​de fichier ext2 sera utilisé sur le SSD pour en maximiser la durée de vie.
  
 ===== Diminuer la fréquence d'​écriture des partitions ===== ===== Diminuer la fréquence d'​écriture des partitions =====
  
  
-Utiliser l'​option relatime pour éviter d'​écrire sur le disque la date du dernier accès en lecture lorsqu'​il n'y a pas d'​écriture. Il s'agit du meilleur compromis entre cohérence du système de fichier et minimisation des écritures sur le disque.+Utiliser l'​option ​//relatime// pour éviter d'​écrire sur le disque la date du dernier accès en lecture lorsqu'​il n'y a pas d'​écriture. Il s'agit du meilleur compromis entre cohérence du système de fichier et minimisation des écritures sur le disque.
  
 exemple de fstab correspondant pour le /: exemple de fstab correspondant pour le /:
Ligne 23: Ligne 35:
 ===== Placer les fichiers temporaires en mémoire vive ===== ===== Placer les fichiers temporaires en mémoire vive =====
  
-Pour faire ca il faut disposer d'un peu de RAM, mais vue le prix actuel, ca n'est pas un probleme+Pour faire ca il faut disposer d'un peu de RAM, mais vue le prix actuel, ca n'est pas un problème.
  
-Le système utilise un certains nombre de fichiers temporaires,​ qu'il n'est pas nécessaire de conserver d'un démarrage à l'​autre. Il est ainsi possible de les placer dans la mémoire vive (qui est vidée à l'​arrêt de l'​ordinateur) au lieu de les avoir sur la CF (cela peut ralentir le demarrage ​de certains logiciels, qui doivent recréer leur fichiers temporaires a chaque reboot, mais who cares)+Le système utilise un certains nombre de fichiers temporaires,​ qu'il n'est pas nécessaire de conserver d'un démarrage à l'​autre. Il est ainsi possible de les placer dans la mémoire vive (qui est vidée à l'​arrêt de l'​ordinateur) au lieu de les avoir sur la CF (cela peut ralentir le démarrage ​de certains logiciels, qui doivent recréer leur fichiers temporaires a chaque reboot, mais who cares)
  
 Pour mettre les fichier temporaires en mémoire vive, voici un exemple de fichier /etc/fstab : Pour mettre les fichier temporaires en mémoire vive, voici un exemple de fichier /etc/fstab :
Ligne 31: Ligne 43:
 tmpfs      /tmp            tmpfs        defaults ​          ​0 ​   0 tmpfs      /tmp            tmpfs        defaults ​          ​0 ​   0
 tmpfs      /​var/​tmp ​       tmpfs        defaults ​          ​0 ​   0 tmpfs      /​var/​tmp ​       tmpfs        defaults ​          ​0 ​   0
-tmpfs      /​var/​cache/​apt/​archives tmpfs defaults 0 0+tmpfs      /​var/​cache/​apt/​archives tmpfs defaults ​            0
 </​code>​ </​code>​
  
 +<​note>​ on pourrait utiliser quelques options de montage bien choisies pour /tmp comme par exemple :<​code>​tmpfs /tmp tmpfs size=25%,​mode=1777,​nodev,​nosuid,​noexec 0 0</​code></​note>​
 Les logs sur un mediacenter,​ on s'en fout un peu , non ? ;-) Les logs sur un mediacenter,​ on s'en fout un peu , non ? ;-)
 On pourrait donc rajouter le /var/log dans la liste des tmpfs On pourrait donc rajouter le /var/log dans la liste des tmpfs
  
-<note important>​Il faut cependant recréer les sous répetoires ​nécessaires lors de chaque reboot, comme par exemple /​var/​cache/​apt/​archives/​partial : on peut placer ces commandes dans un script appelé au démarrage (runlevel 2,3,4,5)</​note>​+<note important>​Il faut cependant recréer les sous répertoires ​nécessaires lors de chaque reboot, comme par exemple /​var/​cache/​apt/​archives/​partial : on peut placer ces commandes dans un script appelé au démarrage</​note>​ 
 +<note important>​Le répertoire /​var/​cache/​apt/​archives/​partial/​ mentionné ci dessous est maintenant ​(depuis la ubuntu 10.10 et contrairement la 10.04recréé automatiquement et ne nécessite donc plus la manipulation décrite</note
 + 
 +==== Script de recréation de répertoires nécessaires lors du boot ==== 
 + 
 +  * pour créer automatiquement certains répertoires au reboot : <​code>​ 
 +cat << EOF > /​etc/​cron.d/​create_directories 
 +# creer les sous repertoires des tmpfs au reboot 
 +@reboot root /​usr/​local/​sbin/​createDirectoriesOnBoot.sh 
 +EOF 
 +</​code><​code>​ 
 +chmod +x /​etc/​cron.d/​create_directories 
 +</​code><​code>​cat << EOF > /​usr/​local/​sbin/​createDirectoriesOnBoot.sh 
 +#​!/​bin/​bash 
 +# cree les repertoires nécessaires (a cause du tmpfs sur les partitions) 
 + 
 +DIRECTORIES="/​var/​cache/​apt/​archives/​partial/"​ 
 +for DIR in $DIRECTORIES;​ do 
 + mkdir $DIR 
 +done 
 +EOF 
 +</​code><​code>​ 
 +chmod +x /​usr/​local/​sbin/​createDirectoriesOnBoot.sh 
 +</code>
  
 ===== Placer les profils utilisateur des logiciels en RAM ===== ===== Placer les profils utilisateur des logiciels en RAM =====
  
-Les fichiers temporaire sont tres souvent lus/ecrits ​par les différents logiciels (firefox ​par exemple) dans le profil utilisateur. Il s'agit ici de limiter les accès au SSD par FireFox, sans pour autant perdre tout son profil à chaque boot. +Les fichiers temporaire sont très souvent lus/écrits ​par les différents logiciels (FireFox ​par exemple) dans le profil utilisateur. Il s'agit ici de limiter les accès au SSD par FireFox, sans pour autant perdre tout son profil à chaque boot. 
  
-Le principe est donc d'​utiliser la RAM (ramfs) pour le profil ​firefox ​pendant son fontionnement ​:les lectures/ecritures ​se feront alors dans la RAM et non pas sur le SSD.+Le principe est donc d'​utiliser ​une partie de la RAM comme répertoire de stockage du profil ​(appelé ​ramfs ou encore tmpfs) pour le profil ​FireFox ​pendant son fonctionnement ​:les lectures/écritures ​se feront alors dans la RAM et non pas sur le SSD.
  
 Pour ne pas perdre son profil a chaque fois il suffira de sauvegarder ce profil sur le SSD a chaque arrêt de la machine (et de recopier cette sauvegarde en RAM lors du démarrage) Pour ne pas perdre son profil a chaque fois il suffira de sauvegarder ce profil sur le SSD a chaque arrêt de la machine (et de recopier cette sauvegarde en RAM lors du démarrage)
  
-  * Création initiale :<​code>​cp -r /home/mediacenter/.mozilla /home/mediacenter/​.mozilla_ref</​code>​ +  * Création initiale ​(firefox non lancé) ​:<​code>​cp -r /home/jerome/.mozilla /home/jerome/​.mozilla_ref</​code>​
  
   * On monte en RamDisk le répertoire du profil FireFox : extrait du fstab :<​code>​   * On monte en RamDisk le répertoire du profil FireFox : extrait du fstab :<​code>​
-none      ​/home/mediacenter/​.mozilla ​        ​tmpfs           ​defaults,​uid=1000,gid=100,​mode=750 ​    0 0+tmpfs /home/jerome/​.mozilla tmpfs defaults,​uid=jerome,gid=jerome ​       ​      ​0
 </​code>​ </​code>​
 :!: attention de bien adapter les login/​uid/​gid a votre cas :!: :!: attention de bien adapter les login/​uid/​gid a votre cas :!:
  
   * Pour la synchronisation on utilisera l'​outil rsync qui fait de la copie incrémentale :<​code>​   * Pour la synchronisation on utilisera l'​outil rsync qui fait de la copie incrémentale :<​code>​
-rsync -a /home/mediacenter/​.mozilla_ref/​ /home/mediacenter/.mozilla/+rsync -a /home/jerome/​.mozilla_ref/​ /home/jerome/.mozilla/
 </​code>​ </​code>​
  
   * A l'​extinction de la machine on sauve ce profile sur le SSD :<​code>​   * A l'​extinction de la machine on sauve ce profile sur le SSD :<​code>​
-rsync -a /home/mediacenter/.mozilla/ /home/mediacenter/​.mozilla_ref/​+rsync -a /home/jerome/.mozilla/ /home/jerome/​.mozilla_ref/​
 </​code>​ </​code>​
  
-<​note>​Ce principe peut bien sur être étendu a tout logiciel ​utilissant ​de maniere ​intense les fichiers du profil utilisateur</​note>​+<​note>​Ce principe peut bien sur être étendu a tout logiciel ​utilisant ​de manière ​intense les fichiers du profil utilisateur</​note>​ 
 +<note important>​attention toutefois a vous assurez que vous aurez assez de RAM libre pour continuer a utiliser votre ordinateur une fois le(s) profil(s) chargé(s) en RAM : en général un profil Thunderbird est tres gros ( ~700 Mo) </​note>​
  
-Voici un exemple de script ​placer dans /​etc/​init.d/​ qui réalise ces opérations ​(ne pas oublier de le faire éxecuter ​au demarrage/​arret ​de la machine :<​code>​ +Vous n'avez pas envie de taper ça a la main a chaque fois ? ;-)\\ 
-#!/bin/bash +Je vous comprends : 
-# /​etc/​init.d/​syncProfiles +==== Script de sauvegarde/​restauration de profils ==== 
-synchroniser les profils utilisateurs entre la RAM (tmpfs) et le SSD + 
-(sous entend que les répertoires de profil utilisés sont en tmpfs), cf /etc/fstab ci dessus+  * Voici un exemple de script ​à placer dans /​etc/​init.d/​ qui réalise ces opérations. \\ 
 +Le --start est à appeler ​au demarrage de la machine ​(SSD -> tmpfs) et le --stop a l'​arrêt pour sauvegarder le profil (tmpfs -> SSD) :<​code>​ 
 +#! /bin/sh 
 +# /​etc/​init.d/​syncProfiles ​synchroniser les profils utilisateurs entre la RAM (tmpfs) et le SSD 
 + 
 +### BEGIN INIT INFO 
 +# Provides: ​         syncProfiles 
 +# Required-Start: ​   $local_fs $syslog 
 +# Required-Stop: ​    ​$local_fs $syslog 
 +# Default-Start: ​    2 3 4 5 
 +# Default-Stop: ​     0 1 6 
 +# Short-Description:​ Synchonises user profiles between ​tmpfs and SSD/USB drive 
 +### END INIT INFO 
 + 
 +# utilisateurs par defaut lorsque ce script est appelé par root - sinon synchronise pour l'​utilisateur courant 
 +DEFAULT_USERS="​jerome fred"
  
-# nom de l'​utilisateur 
-USER="​mediacenter"​ 
 # liste profils a sauvegarder (les profils de sauvegarde seront suffixés en "​_ref"​) séparés par des espaces # liste profils a sauvegarder (les profils de sauvegarde seront suffixés en "​_ref"​) séparés par des espaces
 # pour sauvegarder/​restaurer le ~/.mozilla, mettre "​mozilla"​ # pour sauvegarder/​restaurer le ~/.mozilla, mettre "​mozilla"​
 PROFILES="​mozilla"​ PROFILES="​mozilla"​
- + 
 +PATH=/​sbin:/​usr/​sbin:/​bin:/​usr/​bin 
 +. /​lib/​init/​vars.sh 
 + 
 +. /​lib/​lsb/​init-functions 
 + 
 +umask 022 
 + 
 +if [ "​${USER}"​ = "​root"​ ] 
 +then 
 + USERS=${DEFAULT_USERS} 
 +else 
 + USERS=${USER:​-$DEFAULT_USERS} 
 +fi 
 + 
 +sync_start () { 
 +    # synchro SSD -> TMPFS 
 +    for USER in $USERS; do 
 +        for profile in $PROFILES; do 
 +            if [ -d /​home/​${USER}/​.${profile}_ref/​ ] 
 +            then 
 +         rsync -a --delete /​home/​${USER}/​.${profile}_ref/​ /​home/​${USER}/​.${profile}/​ 
 +            fi 
 +        done 
 +    done 
 +
 + 
 +sync_stop () { 
 +    # synchro TMPFS -> SSD 
 +    for USER in $USERS; do 
 +        for profile in $PROFILES; do 
 +            if [ -d /​home/​${USER}/​.${profile}/​ ] 
 +            then 
 +                rsync -a --delete /​home/​${USER}/​.${profile}/​ /​home/​${USER}/​.${profile}_ref/​ 
 +            fi 
 +        done 
 +    done 
 +
 + 
 +do_start () { 
 + if [ "​$VERBOSE"​ = no ] 
 + then 
 + log_action_begin_msg "​Synchonising profiles SSD -> TMPFS for users ${USERS}"​ 
 + sync_start 
 + log_action_end_msg $? 
 + else 
 + log_daemon_msg "Will now synchronise profiles SSD -> TMPFS for users ${USERS}"​ 
 + sync_start 
 + log_end_msg $? 
 + fi 
 +
 +do_stop () { 
 + if [ "​$VERBOSE"​ = no ] 
 + then 
 + log_action_begin_msg "​Synchonising profiles TMPFS -> SSD for users ${USERS}"​ 
 + sync_stop 
 + log_action_end_msg $? 
 + else 
 + log_daemon_msg "Will now synchronise profiles TMPFS -> SSD for users ${USERS}"​ 
 + sync_stop 
 + log_end_msg $? 
 + fi 
 +
 case "​$1"​ in case "​$1"​ in
   start)   start)
-    echo "​syncProfiles : synchro disque->​RAM"​ +    ​#echo "​syncProfiles : synchro disque->​RAM"​ 
-    ​for profile in $PROFILES; do +    ​do_start
-        rsync -a --delete /​home/​${USER}/​.${profile}_ref/​ /​home/​${USER}/​.${profile}/​ +
-    done+
     ;;     ;;
   stop)   stop)
-    echo "​syncProfiles : synchro RAM->​disque"​ +    ​#echo "​syncProfiles : synchro RAM->​disque"​ 
-    ​for profile in $PROFILESdo +    ​do_stop 
-        rsync -a --delete /​home/​${USER}/​.${profile}/​ /​home/​${USER}/​.${profile}_ref/ ​ +    ;
-    ​done+  ​status) 
 +    echo "​syncProfiles:​ status OK" 
 +    ​exit 0
     ;;     ;;
   *)   *)
-    echo "​Usage:​ /​etc/​init.d/​syncProfiles {start|stop}"​+    echo "​Usage:​ /​etc/​init.d/​syncProfiles {start|stop|status}"
     exit 1     exit 1
     ;;     ;;
Ligne 97: Ligne 209:
    
 exit 0 exit 0
 +
 </​code>​ </​code>​
 +  * Il faut ensuite faire exécuter automatiquement ce script au démarrage et a l'​arrêt de la machine :<​code>​
 +update-rc.d syncProfiles defaults</​code>​
  
 ===== Minimiser l'​usage de la partition swap ===== ===== Minimiser l'​usage de la partition swap =====
 +<​note>​non testé : je n'​utilise pas de swap sur ces machines </​note>​
  
-L'​utilisation d'une patrition/​fichier de swap est deconseillé ​sur une carte CF cause du grand nombre d'​écriture (sans tuning du moins)+L'​utilisation d'une patrition/​fichier de swap est déconseillé ​sur une carte CF à cause du grand nombre d'​écriture (sans tuning du moins)
  
-Si on veut utiliser une parition swap (notamment pour bénéficier de l'​hibernation),​ il faut en minimiser l'​usage en editant le fichier /​etc/​sysctl.conf : rajouter à la fin :+Si on veut tout de même utiliser une parition swap (notamment pour bénéficier de l'​hibernation),​ il faut en minimiser l'​usage en editant le fichier /​etc/​sysctl.conf : rajouter à la fin :
 <​code>​vm.swappiness=0</​code>​ <​code>​vm.swappiness=0</​code>​
  
  
 ===== Peut etre une idee en plus ===== ===== Peut etre une idee en plus =====
-Vu sur le net : a vérifier/​voir l'intéret+Vu sur le net : a vérifier/​voir l'intérêt
  
 "Je rajouterais juste peut-être un petit tuning de /​proc/​sys/​vm/​dirty_ratio et /​proc/​sys/​vm/​dirty_background_ratio qui indiquent avec quelle agressivité le kernel écrit sur le disque les fichiers en cache (RAM). Je tiens ça des différents scripts de laptop-mode-tools,​ qui est l'​utilitaire utilisé sur les portables pour améliorer l'​autonomie. Tu peux t'en inspirer car il essaye en général de minimiser les accès disque."​ "Je rajouterais juste peut-être un petit tuning de /​proc/​sys/​vm/​dirty_ratio et /​proc/​sys/​vm/​dirty_background_ratio qui indiquent avec quelle agressivité le kernel écrit sur le disque les fichiers en cache (RAM). Je tiens ça des différents scripts de laptop-mode-tools,​ qui est l'​utilitaire utilisé sur les portables pour améliorer l'​autonomie. Tu peux t'en inspirer car il essaye en général de minimiser les accès disque."​
  
 +===== Minimiser la fréquence des écritures sur le SSD =====
 +Ajouter dans le fichier /​etc/​sysctl.conf :<​code>​
 +vm.dirty_writeback_centisecs=1500</​code>​
 +Cela modifie la valeur de l'​intervalle (en centaines de millisecondes) entre les moments ou pdflush se réveille pour écrire les éventuels changements sur le disque.
  
 +On passe ainsi cette valeur à 15s au lieu des 5s par défaut.
sysadmin/tuning_debian_cf.1269195804.txt.gz · Dernière modification: 2010/03/21 19:23 par james
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0