UNE NOUVELLE VERSION D'INFOBIDOUILLE EST EN LIGNE CLIQUEZ-ICI POUR LA VISITER

Comprendre les SSD

Secteurs, pages et 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, c'est idéal, puisqu'on a alors un mapping 1:1 entres 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 des 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. Leur taille est généralement comprise 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 généralement 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 pourront donc être divisées par 8 par rapport au mode séquentiel, sans compter l'influence des temps d'accès.

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és 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 octets. 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 Sandforce SF-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.