\documentclass{report}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage{geometry}
\geometry{top=15mm, bottom=15mm, left=1cm, right=1cm}
\usepackage[french]{babel}
\usepackage{pslatex}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{graphicx}
\usepackage{fancyhdr}
\pagestyle{fancy}
\renewcommand{\footrulewidth}{0.4pt}
\fancyfoot[L]{Uubu.fr}
\fancyfoot[R]{dim. mai 22 21:15:49 CEST 2016}
\lfoot{\Large \textit{Uubu.fr}}
\hypersetup{pdfinfo={
Title={lvmcache},
Author={Sylvain Girod},
Creator={Bash script from uubu.fr's format version 1},
Producer={Bash script and PDFLaTeX},
Subject={Cache LVM},
CreationDate={D:20160522211549},
ModDate={D:20160522211549},
Keywords={storages;raid;lvm}
}}
\begin{document}
 
\begin{center}
{\Huge lvmcache }
\end{center}
\vspace{1cm}
 
\begin{flushleft}
 
{\large Cache LVM}
 
\vspace{10mm}
 
\hspace{1mm}  Le type de volume logique cache utilise un LV petit et rapide pour améliorer les performances d'un LV grand et lent. Il stocke les blocks fréquemment utilisé dans le LV rapide. Il est appelé le pool cache, et le grand LV est appelé l'origine. À cause des requis de dm-cache (le pilote kernel), lvm split le LV pool dans 2 périphériques - le LV de données de cache et LV de métadonnées de cache. Le LV de données de cache contient les blocks de données copiées. Le LV de métadonnées de cache maintient les informations d'audit qui spécifie où les blocks sont stockés. Les utilisateurs devraient être familiarisés avec ces LV s'ils souhaitent créer le meilleur LV caché possible Tous les LV associés doivent être dans le même VG
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Utilisation du cache }
 
\
 
\hspace{1mm}  La méthode principale pour utiliser un LV de type cache:
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge 0. créer OriginLV }
 
\
 
\hspace{1mm} Créé un LV ou identifie un LV origine existant \\
\hspace{1mm} \textbf{lvcreate -n OriginLV -L LargeSize VG SlowPVs} \\
\hspace{1mm} Exemple: \\
\hspace{1mm} \textbf{lvcreate -n lvol0 -L 100G vg} \\
 
\vspace{1cm}{\huge 1. créer CacheDataLV }
 
\
 
\hspace{1mm} 1. créer CacheDataLV \\
\hspace{1mm} \textbf{Créé le LV de métadonnées de cache. Ce LV maintient les blocks depuis OriginLV. La taille de ce LV est la taille du cache. Exemple:} \\
\hspace{1mm} lvcreate -n Cache0meta -L 12M vg /dev/fast \\
 
\vspace{1cm}{\huge 2. créer CachePoolLV }
 
\
 
\hspace{1mm} Combine les 2 LV en un LV pool. \\
\hspace{1mm} \textbf{lvconvert --type cache-pool --poolmetadata vg/cache0meta vg/cache0} \\
 
\vspace{1cm}{\huge 3. Créer CacheLV }
 
\
 
\hspace{1mm} Créé un LV cache en liant le LV pool au LV origine. \\
\hspace{1mm} \textbf{lvconvert --type cache --cachepool vg/cache0 vg/lvol0} \\
 
\vspace{1cm}{\huge Suppression du cache }
 
\
 
\hspace{1mm} Un LV pool peut être déconnecté d'un LV Cache, laissant un LV pool inutilisé, et un LV origine sans cache: \\
\hspace{1mm} \textbf{lvconvert --splitcache vg/cache0} \\
\hspace{1mm} Supprimer un LV pool sant supprimer sont LV origine lié: \\
\hspace{1mm} \textbf{lvremove vg/CachePoolLV} \\
\hspace{1mm} Une commande alternative déconnecte également le pool du cache, et supprime le pool: \\
\hspace{1mm} \textbf{lvconvert --uncache vg/cacheLV} \\
\hspace{1mm} Supprimer un LV cache supprime le LV origine et le LV pool lié \\
\hspace{1mm} \textbf{lvremove vg/CacheLV} \\
 
\vspace{1cm}{\huge Tolérance d'erreurs dans un LV pool. }
 
\
 
\hspace{1mm} 0. Créer un LV origine: \\
\hspace{1mm} \textbf{lvcreate -L 10G -n lv1 vg /dev/slow\_devs} \\
\hspace{1mm} 1. Créer un cache LV data RAID1: \\
\hspace{1mm} \textbf{lvcreate --type raid1 -m 1 -L 1G -n cache1 vg /dev/fast1 /dev/fast2} \\
\hspace{1mm} 2. Créer un cache LV métadonnée RAID1: \\
\hspace{1mm} \textbf{lvcreate --type raid1 -m 1 -L 8M -n cache1meta vg /dev/fast1 /dev/fast2} \\
\hspace{1mm} 3. Créer un LV pool combinant le LV data et le LV metadata: \\
\hspace{1mm} \textbf{lvconvert --type cache-pool --poolmetadata vg/cache1meta vg/cache1} \\
\hspace{1mm} 4. Créer un LV cache en combinant le LV pool et le LV origine \\
\hspace{1mm} \textbf{lvconvert --type cache --cachepool vg/cache1 vg/lv1} \\
 
\vspace{1cm}{\huge Mode de cache }
 
\
 
\hspace{1mm}  Le mode de cache par défaut est "writethrough". Ce mode s'assure que toute donnée écrite sera stocké dans le pool et dans l'origine. La perte d'un périphérique associé avec le pool dans ce cas ne signifie pas la perte d'une donnée.
\vspace{5mm} \\
 
 
\hspace{1mm}  Un autre mode de cache, "writeback" retarde l'écriture des blocks de données du pool dans l'origine. Ce mode augmente les performances, mais la perte d'un périphériques du pool peut résulter de pertes de données.
\vspace{5mm} \\
 
 
\hspace{1mm}  Avec l'options --cachemode, le mode peut être définis en créant un cache, ou changé sur un cache existant.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Exemples }
 
\
 
\hspace{1mm} Créer un LV origin: \\
\hspace{1mm} \textbf{lvcreate -L 10G -n lv1 vg /dev/slow} \\
\hspace{1mm} Créer un cache LV data: \\
\hspace{1mm} \textbf{vcreate -L 1G -n cache1 vg /dev/fast} \\
\hspace{1mm} Créer un cache LV metadata \\
\hspace{1mm} \textbf{lvcreate -L 8M -n cache1meta vg /dev/fast} \\
\hspace{1mm} Créer un cache LV pool \\
\hspace{1mm} \textbf{lvconvert --type cache-pool --poolmetadata vg/cache1meta vg/cache1} \\
\hspace{1mm} Créer le cache: \\
\hspace{1mm} \textbf{lvconvert --type cache --cachepool vg/cache1 --cachemode writethrough vg/lv1} \\
 
\vspace{1cm}{\huge Stratégie de cache }
 
\
 
\hspace{1mm}  Le sous-système de cache a des paramètres additionnels par LV: la stratégie de cache à utiliser. 3 stratégie sont actuellement disponible: smq est la stratégie par défaut, m. est une ancienne implémentation, et cleaner est utilisé pour forcer le cache à vider toutes les écritures en cache sur l'origin
\vspace{5mm} \\
 
 
\hspace{1mm}  La stratégie mq a des paramètres. Les défaut sont choisis pour être convenable pour la majorité des systèmes, mais dans des circonstances spéciales, changer ces paramètres peuvent améliorer les performances.
\vspace{5mm} \\
 
 
\hspace{1mm}  Avec les options --cachepolicy et --cachesettings, la stratégie de cache et les paramètres peuvent être définis en créant un cache, ou changé dans un cache existant.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Exemple }
 
\
 
\hspace{1mm} Changer la stratégie d'un cache existant: \\
\hspace{1mm} \textbf{lvchange --cachepolicy mq --cachesettings 'migration\_threshold=2048 random\_threshold=4' vg/lv1} \\
\hspace{1mm} Dans lvm.conf: \\
\hspace{1mm} \textbf{allocation/cache\_policy} \\
\hspace{1mm} \textbf{allocation/cache\_settings} \\
 
\vspace{1cm}{\huge Taille de chunk }
 
\
 
\hspace{1mm}  La taille de blocks de données gérés par un pool peut être spécifié avec l'option --chunksize à la création. La valeur doit être un multiple de 32KiO entre 32KiO et 1GiO.
\vspace{5mm} \\
 
 
\hspace{1mm}  Utiliser une taille de chunk qui est trop grande réduit l'utilité du cache. Cependant, une taille trop petite surcharge le travail de gestion des chunks qui sont mappés dans le cache.
\vspace{5mm} \\
 
 
\hspace{1mm} Pour afficher la taille de chunk du cache: \\
\hspace{1mm} \textbf{lvs -o+chunksize VG/CacheLV} \\
\hspace{1mm} Dans lvm.conf: \\
\hspace{1mm} \textbf{cache\_pool\_chunk\_size} \\
\hspace{1mm} Pour connaître la valeur par défaut: \\
\hspace{1mm} \textbf{lvmconfig --type default allocation/cache\_pool\_chunk\_size} \\
 
\vspace{1cm}{\huge Automatic pool metadata LV }
 
\
 
\hspace{1mm}  Un LV data peut être convertit au LV pool sans spécifier de LV métadonnée. LVM va automatiquement créer un LV métadonnées depuis le même VG.
\vspace{5mm} \\
 
 
\vspace{1cm}{\huge Créer un nouveau cache sans un LV origine existant }
 
\
 
\hspace{1mm} Un LV cache peut être créé en utilisant un pool sans un LV origine existant. Un nouveau LV origin est créé et lié au pool en une étape \\
\hspace{1mm} \textbf{lvcreate --type cache -L LargeSize -n CacheLV --cachepool VG/CachePoolLV VG SlowPVs} \\
 
\vspace{1cm}{\huge Création de LV pool en une seule étape }
 
\
 
\hspace{1mm} Un LV pool peut être créé en une seule commande, au lieu d'utiliser lvconvert sur des LV existant: \\
\hspace{1mm} \textbf{lvcreate --type cache-pool -L CacheSize -n CachePoolLV VG FastPVs} \\
 
\vspace{1cm}{\huge Convertir des LV existant en type cache }
 
\
 
\hspace{1mm} Quand un LV origine existant est convertis en LV cache, le pool spécifié peut être un LV normal, au lieu d'un LV pool. Dans ce cas, lvm convertis le LV normal en cache. Un LV metadata peut optionnellement être spécifié. \\
\hspace{1mm} \textbf{lvcreate -n OriginLV -L LargeSize VG} \\
\hspace{1mm} \textbf{lvcreate -n CacheDataLV -L CacheSize VG} \\
\hspace{1mm} \textbf{lvconvert --type cache --cachepool VG/CataDataLV VG/OriginLV} \\
\hspace{1mm} C'est équivalent à \\
\hspace{1mm} \textbf{lvcreate -n OriginLV -L LargeSize VG} \\
\hspace{1mm} \textbf{lvcreate -n CacheDataLV -L CacheSize VG} \\
\hspace{1mm} \textbf{lvconvert --type cache-pool VG/CacheDataLV} \\
\hspace{1mm} \textbf{lvconvert --type cache --cachepool VG/CachePoolLV VG/OriginLV} \\
\end{flushleft}
\end{document}
