Nous utilisons des cookies pour améliorer votre expérience.

MacBidouille

Comprendre les SSD

SartMatt dévoile tout sur le fonctionnement des SSD, et partage des conseils pour optimiser les performances


Secteurs, pages, blocs...

Ces trois mots sont la principale cause des chutes de performances lors de petits accès aléatoires. Le secteur est l'unité d'adressage de base d'un disque dur. Il fait quasiment toujours 512 octets, et la norme ATA a donc repris cette taille de 512 octets comme l'unité de base pour les transferts : avec les disques durs traditionnels (magnétiques), c'est idéal, puisqu'on a alors un mapping 1:1 entre les secteurs logiques vus de l'extérieur et les secteurs physiques gérés par le contrôleur du disque. Ainsi, quand on envoie un secteur à écrire sur le disque, le contrôleur n'a pas à se poser de questions, il a simplement à écrire le secteur à l'endroit demandé, sans se préoccuper des données existantes, qui sont écrasées.

Mais sur un SSD, ce mapping 1:1 n'existe plus car le contrôleur n'utilise pas les mêmes unités d'adressage physique qu'un contrôleur de disque dur : adieu les secteurs, bonjour les pages et les blocs.

Les pages sont les unités de base pour la lecture et l'écriture. Leurs tailles sont généralement comprises entre 1 Ko et 4 Ko (plus quelques octets pour stocker le code de contrôle et de correction d'erreurs). Il s'agit donc de la taille minimale qui peut être lue ou écrite lors d'une opération. L'interface SATA travaillant avec des secteurs de 512 octets, on se rend vite compte que, si la taille "élevée" des pages n'est pas problématique en séquentiel (on va accéder à plusieurs secteurs consécutifs, donc au final, on va demander des pages complètes, et toutes les données accédées par le SSD seront utiles), elle le devient vite en aléatoire : si on accède à 512 octets à un endroit, puis 512 octets à un autre, puis encore 512 octets ailleurs, le contrôleur va à chaque fois devoir accéder à une page complète, alors que seule une partie des données est utile. Avec des pages de 4 Ko, le volume de données traitées par le contrôleur sera dans ce cas jusqu'à 8 fois supérieur à celui demandé par le système. Les performances seront donc au mieux divisées par 8 par rapport au mode séquentiel.

Le bloc est encore plus problématique : il s'agit de l'unité de base pour l'effacement des données. Sa taille est généralement comprise entre 128 Ko et 512 Ko. À chaque fois que le contrôleur doit écrire des données dans une page qui a déjà été écrite, tout le bloc contenant cette page doit être effacé, pour permettre la réécriture de la page concernée. Mais comme les autres pages du bloc peuvent contenir des données qui ne doivent pas être effacées, il va, en fait, falloir lire toutes les pages non vierges du bloc, effacer le bloc, puis réécrire toutes les pages non vierges. Sur un SSD doté de pages de 2 Ko et de blocs de 512 Ko, la réécriture d'un secteur ATA de 512 octets va donc nécessiter la lecture de jusqu'à 512 Ko de données, puis l'effacement du même volume, et enfin l'écriture de ce même volume. Dans le pire des cas, on va donc avoir à traiter 1024 Ko de données (on néglige l'effacement), soit 20 fois plus que sur un disque dur qui se contenterait d'écraser un secteur de 512 octects. Pour le mapping entre les secteurs et les pages de la mémoire flash, la plupart des SSD affectent un groupe de secteurs consécutifs aux pages d'un même bloc. Cette solution a l'avantage d'être relativement simple, mais la réécriture d'un secteur appartenant à un bloc entièrement écrit va nécessiter la réécriture de tout le bloc. C'est pourquoi certains SSD haut de gamme commencent à réaliser un mapping plus fin, se faisant au niveau des pages, ce qui permet d'augmenter fortement les performances en écriture aléatoire, puisqu'il n'est plus nécessaire de déplacer tout un bloc pour réécrire simplement un secteur. C'est ainsi que fonctionnent par exemple les contrôleurs SandforceSF-1200 et SF-1500.

On notera également qu'en plus de l'état programmé et de l'état vierge, les pages peuvent être dans un troisième état : l'état effaçable. Cet état signifie que la page contient des données, mais que ces données ne sont plus valides et donc qu'elles n'auront pas besoin d'être réécrites après effacement du bloc. Ainsi, si un bloc de 512 Ko contient 100 Ko de pages programmées, 200 Ko de pages vierges et 212 Ko de pages effaçables, le contrôleur du SSD sait que ce bloc pourra être utilisé pour écrire jusqu'à 412 Ko, car après effacement il ne contiendra que 100 Ko de pages programmées.

Partager sur

Sondage

Est-ce qu'Apple vous fait encore rêver ?