Différences
Ci-dessous, les différences entre deux révisions de la page.
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 18:44] james ajout cache apt |
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 28: | 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 36: | 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 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.04) recréé 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 ===== | ||
+ | |||
+ | 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 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) | ||
+ | |||
+ | * 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> | ||
+ | tmpfs /home/jerome/.mozilla tmpfs defaults,uid=jerome,gid=jerome 0 0 | ||
+ | </code> | ||
+ | :!: 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> | ||
+ | rsync -a /home/jerome/.mozilla_ref/ /home/jerome/.mozilla/ | ||
+ | </code> | ||
+ | |||
+ | * A l'extinction de la machine on sauve ce profile sur le SSD :<code> | ||
+ | rsync -a /home/jerome/.mozilla/ /home/jerome/.mozilla_ref/ | ||
+ | </code> | ||
+ | |||
+ | <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> | ||
+ | |||
+ | Vous n'avez pas envie de taper ça a la main a chaque fois ? ;-)\\ | ||
+ | Je vous comprends : | ||
+ | ==== Script de sauvegarde/restauration de profils ==== | ||
+ | |||
+ | * 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" | ||
+ | |||
+ | # 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" | ||
+ | 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 | ||
+ | start) | ||
+ | #echo "syncProfiles : synchro disque->RAM" | ||
+ | do_start | ||
+ | ;; | ||
+ | stop) | ||
+ | #echo "syncProfiles : synchro RAM->disque" | ||
+ | do_stop | ||
+ | ;; | ||
+ | status) | ||
+ | echo "syncProfiles: status OK" | ||
+ | exit 0 | ||
+ | ;; | ||
+ | *) | ||
+ | echo "Usage: /etc/init.d/syncProfiles {start|stop|status}" | ||
+ | exit 1 | ||
+ | ;; | ||
+ | esac | ||
+ | |||
+ | exit 0 | ||
+ | |||
+ | </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 a 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. | |
- | + |