Exchange your Mind

"La connaissance ne vaut que si elle est partagée" / "An effective Knowledge is a shared one"

Exchange et le Stockage – Partie 1

Posted by Anthony Costeseque le juillet 16, 2011


Je vais réaliser une série de billets concernant l’importance du stockage au sein d’exchange (et plus particulièrement exchange 2010) et vous rappeler les bonnes pratiques à suivre.

 

Et pour bien commencer et partir sur une base commune de discussion vérifions ensemble la signification des termes que nous utiliserons.

 

Nous ne parlerons pour le moment que de disques durs mécaniques, nous verrons plus tard les disques Flash (FFD).

 

Un disque dur mécanique est composé (au niveau physique) :

  1. D’un Spindle (Axe)
  2. Sur lequel sont empilés des Platters (Plateaux)
  3. Sur chaque face d’un plateau on retrouve une Read/Write Head (tête de lecture/écriture)
  4. Les têtes sont reliées à un Actuator arm (bras actionneur)
  5. Tout cela étant enfermé dans un Head Disk Assembly (HDA) (la boite du disque dur)
  6. Sur le boitier on retrouve 3 parties :
    1. Le contrôleur (circuits imprimés visibles ou protégés)
    2. Le connecteur d’alimentation
    3. Et l’interface (ATA/SATA/SAS/FC etc)

 



 

Un disque dur mécanique est composé (au niveau logique) :

  1. Au niveau d’un Platter (Plateau) on retrouve :
    1. Des Sectors (Secteurs) ou Block dont la taille fait en règle générale 512 bytes
    2. Des Tracks (composés de Sectors)
    3. Des Zones (composés de Tracks) (mécanisme du Zoned-Bit Recording (ZBR))
  2. Au niveau des X Platters composant le disque on retrouve :
    1. Des Cylinders (Cylindres composés de Tracks)

 



 

Adressage

Historiquement pour adresser le disque (se positionner au bon endroit) ont utilisé CHS (Cylinder, Head, et Sector) sous forme de coordonnées mais pour cela le Host (le serveur raccordé aux disques) devait connaitre la Géométrie du disque.

 

Pour simplifier tout cela, de nos jours nous utilisons LBA (Logical Block Addressing), le Host n’a plus besoin de connaitre la géométrie du disque (seulement sa taille (le nombre de blocks)), c’est le contrôleur (du disque) qui s’occupe de la translation LBA -> CHS.

 


 

Dans cet exemple nous avons 8 sectors par track, 8 heads et 4 cylinders, ce qui nous donne un total de 8x8x4 = 256 blocks adressables de 0 à 255 (cela ne correspond à rien de réel, c’est juste pour l’exemple).

En réalité un disque de 500GB contient environ 976000000 blocks :)

 

Les performances d’un disque sont mesurées par 2 informations :

  1. Throughput (débit)
    1. Nombre d’I/O par seconde (IOPS) terminés
    2. Nombre de megabytes par seconde (MB/s) transférés
      1. Ces 2 valeurs sont liées sont liées à la taille des I/O
  2. Response Time (temps de réponse)
    1. Pour 1 I/O
    2. Pour X I/O sur un intervalle de temps pour avoir une moyenne

 

Le RAID :

Maintenant passons à la complexité en ajoutant du RAID (Redundant Array of Independent Disks).

 

Une RAID Array est composé de :

  1. Un contrôleur RAID
  2. Une array physique (tous les disques physiques reliés au contrôleur)
  3. Des array logiques (RAID Set ou RAID Group) (des groupes de disques reliés ensembles (consommés de l’array physique))

 


 

On retrouve ensuite des Niveaux de RAID pour chaque array logiques (RAID Group) :

Nous parlerons principalement de RAID 5.

 

Répartition des donnés dans une array logiques (RAID Group) :

Nous allons maintenant parler de :

  1. Strips, un Strip est un groupe de blocks contigus adressés au sein d’un disque de l’array logique (RAID Group).
    1. la taille d’un Strip (Strip size) représente le nombre de blocks dans un Strip MAIS surtout la quantité totale de données (nombre de blocks) qui sera écrite ou lue sur 1 disque dur avant de passer au suivant (dans l’array logique (RAID Group)).
  2. Stripes, un Stripe et l’ensemble de Strips (datas) alignées qui s’étend sur tous les disques dans une array logique (RAID Group).
    1. la taille d’un Stripe (Stripe size) représente le nombre de blocks de datas dans un Stripe.
    2. la largeur d’un Stripe (Stripe width) représente le nombre de Strips de datas dans un Stripe (on peut aussi dire représente le nombre de disques de datas dans un Stripe).

 


 

Prenons un exemple avec un RAID Group en RAID5 4+1 (ce qui veut dire 5 disques durs dans l’array logique (RAID Group) dont 4 disques de datas et 1 disque de parité)

Rappel : un serctor ou block est en règle générale égal à 512 bytes

Le Strip size dépend des constructeurs, pour EMC² par défaut cela sera 128 blocks (64KB)

Le Stripe size sera de 4xStrip size (puisque nous avons 4 disques de datas) donc 4×128=512 blocks (256KB)

Le Stripe width sera de 4

Nous pourrons donc en condition optimale lire ou écrire 512 blocks soir 256KB de données simultanément.

 

Le meilleur pour la fin,

Nous allons maintenant parler d’I/O (Input / Output) (en français entrée / sortie)

Un I/O correspond à la plus petite quantité de données transférées depuis ou vers une application.

    Sa taille peut être de 8/16/32/64/128/256KB

 

Les performances d’une application sont donc directement liées à sa capacité à soutenir son profil de charge (workload).

 

Un workload est défini par :

    I/O size (La taille des requêtes I/O)

    Access pattern (Sequential ou Random ou encore entre les deux)

    Footprint (La quantité totale de données disponible accédée dans le disque)

    Command type (Read ou Write ou encore les deux)

 

L’équipe d’Exchange a, au travers des versions, essayé de toujours plus optimiser les I/O générés sur les bases de données de boites aux lettres.

Toutes les performances globales d’Exchange sont là, liées à la charge générée par toutes les requêtes des utilisateurs de boites aux lettres sur leurs bases de données associées.

Plus les I/O sont optimisés et mieux gérés, plus les temps de réponse sont bons, plus les utilisateurs sont content.

Ce qui au final est le plus important.

(Mais aussi plus on peut augmenter la charge sur un serveur et là, ce sera l’administrateur d’exchange qui sera content (ce qui, aussi, est important :))

 

Nous verrons donc dans les prochains billets comment, en plus des optimisations faites sur Exchange 2010, nous pouvons aussi de notre côté les optimiser.

 

Nous avons donc vu aujourd’hui comme termes :

Spindle

Platters

Read/Write Heads

Actuator arm

Head Disk Assembly (HDA)

Controller

Alimentation

Interface

Sector = Block

Track

Cylinder

Zones

CHS

LBA

I/O

IOPS

RAID

RAID Array

Controller RAID

Physical Array

Logical Array = RAID Group

Strip

Stripe

Strip size = Stripe unit size = Element size

Stripe size

Stripe width

Workload

 

NOTE : les images sont tirées de slides EMC².

Pour toutes questions n’hésitez pas.

Anthony COSTESEQUE.

About these ads

Une Réponse to “Exchange et le Stockage – Partie 1”

  1. […] Partie 1 – Vocabulaire […]

Laisser un commentaire

Choisissez une méthode de connexion pour poster votre commentaire:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

 
Suivre

Recevez les nouvelles publications par mail.

Rejoignez 224 autres abonnés

%d bloggers like this: