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 23:13]
james mopufles balises code
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. 
 + 
 +En général les SSD ont des blocs physiques de 512k ou 2048k (a vérifier pour votre modele exact de SSD). 
 + 
 +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. 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'ecriture ​du journal sur le support : le systeme ​de fichier ext2 sera utilisé sur le SSD pour en maximiser la durée de vie.+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 34: Ligne 46:
 </​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</​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.04) recréé automatiquement et ne nécessite donc plus la manipulation décrite</​note>​
  
-  ​* pour créer automatiquement certains ​repertoire ​au reboot : <​code>​+==== 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 cat << EOF > /​etc/​cron.d/​create_directories
 # creer les sous repertoires des tmpfs au reboot # creer les sous repertoires des tmpfs au reboot
Ligne 55: Ligne 71:
 done done
 EOF EOF
 +</​code><​code>​
 +chmod +x /​usr/​local/​sbin/​createDirectoriesOnBoot.sh
 </​code>​ </​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 115: 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.1269209620.txt.gz · Dernière modification: 2010/03/21 23:13 par james
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0