web-dev-qa-db-fra.com

Puis-je mettre en cache un raid mdadm avec un ssd?

J'ai un tableau de 1 To configuré dans raid 1 en utilisant mdadm sur Ubuntu 8, pour stocker des fichiers critiques. J'aimerais accélérer la lecture/écriture, en particulier pour les gros fichiers, en mettant en cache sur un SSD. Est-ce possible? Est-ce que mdadm contient une installation pour mettre en cache sur un autre lecteur?

Sinon, y a-t-il quelque chose que je devrais faire pour affecter le RAM ordinaire à la mise en cache? Il y a 4 Go RAM et les fichiers à écrire dépassant rarement 1 Go, je pense donc que l'écriture devrait être assez rapide avec juste RAM mise en cache.

Toute aide sera fortement appréciée.

5
Robert Frost

Mdadm contient-il une installation à mettre en cache sur un autre lecteur?

Non, le raid logiciel Linux (géré par mdadm) sert uniquement à créer un ensemble de disques à des fins de redondance .1

Je connais deux projets qui vont vous permettre de faire ceci: dm-cache et flashcache (tous deux relativement expérimentaux). Il vous permet d’utiliser votre disque SSD en tant que cache (lecture et écriture) pour vos disques durs plus lents ou tout autre périphérique en mode bloc, tel qu’un périphérique md. Les deux offrent un gain de performance énorme et sont très faciles à ajuster pour trouver un équilibre entre durabilité et performance.

Malheureusement, cela n’a pas encore été empaqueté ni inclus dans le noyau à ce moment. Par conséquent, ce n’est pas une tâche très simple à faire dans Ubuntu. N'hésitez pas à vous salir les mains, mais rappelez-vous qu'il s'agit d'un logiciel expérimental sur lequel il est difficile d'obtenir de l'aide.

Questions connexes:

1Cependant, vous pouvez indiquer au noyau d'utiliser l'un des lecteurs pour la lecture, afin d'améliorer les performances de lecture, mais ce n'est pas tout à fait la même chose qu'un vrai cache SSD. Voir cette réponse de Gilles pour savoir comment faire cela.


dois-je faire quelque chose pour assigner RAM ordinaire à la mise en cache?

Ceci est déjà activé dans tous les noyaux Linux! Vous pouvez voir la quantité de pages en cache en utilisant free:

free -m
             total       used       free     shared    buffers     cached
Mem:         24047      17703       6343          0       6492       3550
-/+ buffers/cache:       7660      16386
Swap:         3811          0       3811

Ici, vous voyez qu'il a maintenant 3550 Mo de pages (niveau du système de fichiers) en cache et 6492 Mo de pages (niveau de périphérique en bloc) sur ma machine. Les lectures sur l'un d'entre eux n'entraîneront aucune lecture du disque.

Pour illustrer cela, utilisez la commande suivante:

hdparm -Tt /dev/md127  # replace with your device - try both disks and md devices!

/dev/md127:
 Timing cached reads:   8624 MB in  2.00 seconds = 4313.50 MB/sec
 Timing buffered disk reads: 282 MB in  2.93 seconds =  96.31 MB/sec

Le premier résultat provient clairement des caches en mémoire, alors que le second est lu directement à partir du disque.

Pour illustrer la mise en cache basée sur le système de fichiers à l'aide de dd:

# first time
dd if=/home/gert/bigfile.img of=/dev/null 
5927206912 bytes (5.9 GB) copied, 25.9253 s, 229 MB/s

# second time
dd if=/home/gert/bigfile.img of=/dev/null 
5927206912 bytes (5.9 GB) copied, 4.91444 s, 1.2 GB/s

# third time, with file system cache disabled using iflag=direct
# yields results similar to first one
# Try using a bigger blocksize (bs=10M for example) if you're seeing very low speeds
dd if=/home/gert/bigfile.img of=/dev/null iflag=direct
7
gertvdijk