Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

caches et dsques durs

14 réponses
Avatar
Gilles Berger Sabbatel
Les disques durs disposent de cache de tailles diverses, avec souvent la
possibilité pour une dizaine d'euros de plus, de passer d'un cache 2MO à
un cache 8MO. La question que je me pose est de savoir si cette dizaine
d'euros est bien employée, autrement dit, si ce cache peut apporter un
réel gain de performances sous Linux...

Je comprend à peu près comment ces caches fonctionnennt et peuvent,
théoriquement apporter un gain de performances, mais ne font-ils pas
double emploi avec le cache du système (souvent bien plus gros), et
l'intelligence déjà incluse dans les systèmes de fichiers (lectures
anticipées, etc...)? Qu'apporte-t-ils de plus, éventuellement?

Par ailleurs, qu'en est-il de la tolérance aux arrêts brutaux, en
particulier avec les systèmes de fichiers journalisés? L'ordre des
écritures sur le disque est-il préservé? Si oui, il me semble que le
cache n'introduit pas réellement de nouveau problème (il ne fait que
décaler les écritures dans le temps). Sinon, le risque d'incohérence
en cas d'arrêt brutal est sérieux.

Commentaires, explications, et retours d'expériences seraient les
bienvenus sur ces questions...

--
Pour contacter l'équipe de modération : moderateurs-fcolm@efrei.fr
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.

10 réponses

1 2
Avatar
Erwann ABALEA
Bonjour,

On Tue, 31 Jan 2005, Gilles Berger Sabbatel wrote:

Par ailleurs, qu'en est-il de la tolérance aux arrêts brutaux, en
particulier avec les systèmes de fichiers journalisés? L'ordre des
écritures sur le disque est-il préservé? Si oui, il me semble que le
cache n'introduit pas réellement de nouveau problème (il ne fait que
décaler les écritures dans le temps). Sinon, le risque d'incohérence
en cas d'arrêt brutal est sérieux.



Il me semble avoir lu (mais je ne sais plus où) qu'un disque IDE qui a
accepté un ordre d'écriture (au sens IDE/ATAPI du terme) garantit de la
réaliser, *quoi qu'il arrive* (c'est à dire y compris en cas de coupure de
courant). Ca peut être accompli de 2 façons différentes:
- on garde assez de courant dans un accumulateur pour continuer à écrire
(avec 8M de cache, je doute, mais sans cache c'est faisable)
- on garde ce courant pour conserver la mémoire, voire en s'aidant d'une
petite pile, et on réalise les écritures la prochaine fois qu'on sera
sous tension

--
Erwann ABALEA - RSA PGP Key ID: 0x2D0EABD5
-----
Press Control-Alt-$ to appease spirits.

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
Basile Starynkevitch [news]
On 2005-01-31, Gilles Berger Sabbatel wrote:
Les disques durs disposent de cache de tailles diverses, avec souvent la
possibilité pour une dizaine d'euros de plus, de passer d'un cache 2MO à
un cache 8MO. La question que je me pose est de savoir si cette dizaine
d'euros est bien employée, autrement dit, si ce cache peut apporter un
réel gain de performances sous Linux...



A mon avis, le seul moyen de savori est de mesurer effectivement deux
modèles les plus similaires possibles (et c'est difficile à savoir),
l'un avec un cache de 2Mo l'autre avec un cache de
8Mo. Personnellement, quand je changerais de disque, je pense que je
dépenserais 10 euros de plus pour un cache plus gros...


Je comprend à peu près comment ces caches fonctionnennt et peuvent,
théoriquement apporter un gain de performances, mais ne font-ils pas
double emploi avec le cache du système (souvent bien plus gros), et
l'intelligence déjà incluse dans les systèmes de fichiers (lectures
anticipées, etc...)? Qu'apporte-t-ils de plus, éventuellement?



Je n'y connais pas grand chose, mais j'imagine que le cache du disque
connait la géometrie physique réelle des secteurs du disque (de nos
jours les pistes physiques ont des capacités variant avec leur
rayon). J'imagine donc que le cache permet de mieux tenir compte de la
latence de rotation. Mais en réalité, je ne sais rien sur le
fonctionnement interne d'un disque récent.

Par ailleurs, qu'en est-il de la tolérance aux arrêts brutaux, en
particulier avec les systèmes de fichiers journalisés? L'ordre des
écritures sur le disque est-il préservé? Si oui, il me semble que le
cache n'introduit pas réellement de nouveau problème (il ne fait que
décaler les écritures dans le temps). Sinon, le risque d'incohérence
en cas d'arrêt brutal est sérieux.



En fait, la question est: est-ce que le disque "sait" que le courant
est coupé, et qu'il lui reste quelques millisecondes pour ....?


Commentaires, explications, et retours d'expériences seraient les
bienvenus sur ces questions...




Et j'imagine même que deux modèles de même référence commerciale
puissent avoir un firmware différent et se comporter différemment....

Cela étant dit, est-ce si important? Un disque va tomber un jour ou
l'autre en panne et il faut de toute façon sauvegarder ses données
importantes....

--
Basile STARYNKEVITCH http://starynkevitch.net/Basile/
email: basile<at>starynkevitch<dot>net
aliases: basile<at>tunes<dot>org = bstarynk<at>nerim<dot>net
8, rue de la Faïencerie, 92340 Bourg La Reine, France

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
JRD
Bonjour,

Erwann ABALEA wrote:
Bonjour,
On Tue, 31 Jan 2005, Gilles Berger Sabbatel wrote:



Pour un usage personnel, je ne pense pas que le cache disque physique
change les performances "perceptibles" (entre 2Mo et 8Mo).

Pour un usage professionnel, en fonction de l'usage du serveur, il
peut être intéressant de faire un comparatif de performance (avec
l'aide d'un revendeur qui veut bien préter deux machines en sachant
qu'il va en vendre une!). Dans le cas de nombreuses écritures, la
différence est peut-être vraiment sensible.

Par ailleurs, qu'en est-il de la tolérance aux arrêts brutaux, en
particulier avec les systèmes de fichiers journalisés? L'ordre des
écritures sur le disque est-il préservé? Si oui, il me semble que le
cache n'introduit pas réellement de nouveau problème (il ne fait que
décaler les écritures dans le temps). Sinon, le risque d'incohérence
en cas d'arrêt brutal est sérieux.





Un système "journalisé" (par définition) sert à être sûr que les
écritures sur le disque sont cohérentes. Donc, une façon simpliste de
le faire est de procéder de cette façon :
1. écriture dans le journal de la mise à jour à effectuer (données +
emplacement)
2. écriture des données à l'emplacement prévu
3. comparaison des données entre le journal et l'emplacement
4. suppression du journal

Avec ce genre d'algo, le système est "journalisé" convenablement.

En cas de crash (arrêt brutal), il suffit de lire le journal.
- S'il est vide, tout est OK.
- S'il n'est pas vide :
alors vérification à partir du point 3. puis retour au point 2. si
nécessaire.

Si le plantage à eu lieu pendant le point 1., le système prévient
qu'une écriture est manquante mais ne peut pas la faire. Elle est
supprimée du journal par 4.

Il me semble avoir lu (mais je ne sais plus où) qu'un disque IDE qui a
accepté un ordre d'écriture (au sens IDE/ATAPI du terme) garantit de la
réaliser, *quoi qu'il arrive* (c'est à dire y compris en cas de coupure de
courant). Ca peut être accompli de 2 façons différentes:
- on garde assez de courant dans un accumulateur pour continuer à écrire
(avec 8M de cache, je doute, mais sans cache c'est faisable)
- on garde ce courant pour conserver la mémoire, voire en s'aidant d'une
petite pile, et on réalise les écritures la prochaine fois qu'on sera
sous tension



- l'acceptation de l'ordre d'écriture est envoyé après l'écriture.

JRD.
--
jerome (dot) drapeau <at> free (dot) fr
http://jerome.drapeau.free.fr
La critique est aisée, l'art est difficile.

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
yves
Gilles Berger Sabbatel a écrit :
Par ailleurs, qu'en est-il de la tolérance aux arrêts brutaux, en
particulier avec les systèmes de fichiers journalisés? L'ordre des
écritures sur le disque est-il préservé? Si oui, il me semble que le
cache n'introduit pas réellement de nouveau problème (il ne fait que
décaler les écritures dans le temps). Sinon, le risque d'incohérence
en cas d'arrêt brutal est sérieux.



Ca dépend si le cache est utilisé en lecture/écriture ou seulement en
lecture. Par définition, un cache à l'écriture est dangereux, et en
général on le désactive surtout avec des systèmes de fichiers
journalisés (je crois me souvenir dun problème fut une époque avec le
ext3 à cause des caches en écriture).

Maintenant, en lecture, c'est très utile. Je ne connais pas la gestion
exacte de ces caches, mais si on suppose qu'ils chargent l'intégralité
d'une piste (ou environ, mais de manière à ce que ça tienne dans les 8
ou 2Mo) chaque fois qu'on accède à une donnée, dès qu'une autre donnée
est demandée, elle sera renvoyée plus vite si elle est dans le cache.
C'est bien là tout l'intérêt de ces caches. En effet, sur les machines
"modernes" on tourne à environ 133Mo/s sur le bus ATA. Seulement un
disque ne peut pas envoyer des données à cette vitesse là, et le bus ATA
ne traitant qu'une seule information à la fois, un deuxième disque ne
peut pas en profiter pour lui aussi envoyer des informations au
contrôleur (gros défaut du ATA vis à vis du SCSI sur ce point). Si on
n'avait pas ces caches, on en serait quites à attendre que le disque
envoie ses informations à la vitesse d'un escargot par rapport à ce que
peut faire le bus. Tout l'intérêt est donc de s'arranger pour que le
cache contienne les données demandées (ou une partie), car là, la
mémoire cache est assez rapide pour utiliser toute la bande passante du
bus ATA. Et du coup, on a gagné du temps non seulement en entrées
sorties, mais également en temps de réaction du système...

Mes 2 cts d'€ ;). Bien entendu, tout celà ne reflète que ma
compréhension du tout, corrigez moi si je me trompe.


Yves

--
http://wiki.rougy.net -- Wiki Unix/Linux

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
Michel Arboi
On Tue Feb 01 2005 at 16:00, yves wrote:

Par définition, un cache à l'écriture est dangereux



C'est pourtant là où il est utile !
Les prédictions apocalyptiques de certains (comme Theo de Raadt) ne se
sont jamais réalisées chez moi.
J'imagine que ces caches sont bien conçus et conservent l'ordre
des opérations, ce qui garantit un fonctionnement correct avec les FS
journalisés.
Il parait qu'en cas de coupure de courant, le moteur se transforme en
générateur (grâce à l'inertie des plateaux) et alimente l'électronique
le temps de vider le cache.

général on le désactive



Ah non.

Maintenant, en lecture, c'est très utile.



J'en doute fort. Je ne vois pas comment il serait meilleur que le
buffer cache du système.

--
http://arboi.da.ru
NASL2 reference manual http://michel.arboi.free.fr/nasl2ref/

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
Dominique ROUSSEAU
Dans l'article , Michel Arboi a écrit :
On Tue Feb 01 2005 at 16:00, yves wrote:

Par définition, un cache à l'écriture est dangereux



C'est pourtant là où il est utile !
Les prédictions apocalyptiques de certains (comme Theo de Raadt) ne se
sont jamais réalisées chez moi.



Mais ce n'est pas pour ça que ça n'arrivera jamais.
Le tout est pour chacun d'évaluer le risque qu'il peut/veut prendre.

J'imagine que ces caches sont bien conçus et conservent l'ordre des
opérations, ce qui garantit un fonctionnement correct avec les FS
journalisés.



Par forcément. Si ils "profitent" de la présence de la tête de
lecture/écriture à proximité d'une zone où une opération d'écriture doit
être effectuée, l'ordre peut ne pas être repsecté, aboutissant à des
données incohérentes si la totalité des données du journal n'est pas
écrite.

Il parait qu'en cas de coupure de courant, le moteur se transforme en
générateur (grâce à l'inertie des plateaux) et alimente l'électronique
le temps de vider le cache.



« il parait » ?
Tu as une source pour cette info ?

général on le désactive



Ah non.



Quand on a des données auxquelles on tient vraiment, si.
(ceinture, bretelles, toussa)

Maintenant, en lecture, c'est très utile.



J'en doute fort. Je ne vois pas comment il serait meilleur que le
buffer cache du système.



Je ne suis pas spécialisé en gestion de cache disque, mais j'imagine que
le genre de gains apportés par les caches multiniveau sur les
microprocesseurs doit pouvoir se retrouver plus ou moins dans le
fonctionnement des disques durs, non ?


Dom

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
Vincent Bernat
OoO Lors de la soirée naissante du mercredi 02 février 2005, vers
18:25, Michel Arboi disait:

J'imagine que ces caches sont bien conçus et conservent l'ordre
des opérations, ce qui garantit un fonctionnement correct avec les FS
journalisés.



Sur du SCSI MegaRaid, on a dû désactivé le cache en écriture pour des
problèmes de corruption du système de fichiers justement. Cela dit, ce
n'est qu'un cas particulier, nous n'avons pas déterminé où était le
problème exactement.
--
BOFH excuse #92:
Stale file handle (next time use Tupperware(tm)!)

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
yves
Michel Arboi a écrit :
On Tue Feb 01 2005 at 16:00, yves wrote:


Par définition, un cache à l'écriture est dangereux




C'est pourtant là où il est utile !
Les prédictions apocalyptiques de certains (comme Theo de Raadt) ne se
sont jamais réalisées chez moi.
J'imagine que ces caches sont bien conçus et conservent l'ordre
des opérations, ce qui garantit un fonctionnement correct avec les FS
journalisés.



Ok, j'ai réinvestigué un peu sur le problème (ça m'avait été soumis il y
a quelques années, j'ai un peu oublié j'avoue ;-)). Donc, il se trouve
que justement, ça ne pose pas de problèmes avec les caches bien conçus,
mais c'est pas toujours le cas, notamment sur les portables. La norme
ATA ne spécifiait pas (ce fut le cas assez longtemps), de flusher les
données sur le disque sur demande... Et par conséquent, certains
constructeurs oubliaient de l'implémenter dans leurs disques. Pire,
certains disques durs (de portables) "oubliaient" leur cache sur un
reboot ou même sur mise en veille... Bilan, corruption du système de
fichiers, clairement dûs aux caches en écritures mal implémentés.

Il parait qu'en cas de coupure de courant, le moteur se transforme en
générateur (grâce à l'inertie des plateaux) et alimente l'électronique
le temps de vider le cache.



Alors là, je ne connaissais pas cette histoire, et me voilà un peu
curieux... Quelqu'un a plus d'info là dessus ?

Maintenant, en lecture, c'est très utile.




J'en doute fort. Je ne vois pas comment il serait meilleur que le
buffer cache du système.



Ben tout simplement parce qu'il n'agit pas au même niveau... Le cache du
système se base sur la vue des informations présentées par le controleur
du disque. Si ma mémoire ne me fait pas défaut cette fois, je crois me
souvenir qu'il (le cache système) charge les blocs contiguës même si non
demandés, car il y a une probabilité qu'ils soient demandés dans un
futur proche. Seulement, le contrôleur du disque, lui, peut aussi
anticiper une demande en faisant un travail équivalent sur le disque
(sans oublier qu'on ne sait pas comment sont agencées les données
physiquement sur le disque, c'est là le boulot du contrôleur), et donc
jouer un rôle complémentaire du cache système (c'est pas ça le
read-ahead activable en ATA ?)...

Quelques liens sur à propos du write cache
* http://www-106.ibm.com/developerworks/linux/library/l-fs8.html
paragraphe "write-cache" qui a rafraichi ma mémoire sur le sujet

* http://www.uwsg.indiana.edu/hypermail/linux/kernel/0110.0/0925.html
Avis de Linus sur l'intérêt du write cache (selon ses mots "HUGE" soit
énormes ;-))


Yves

--
http://wiki.rougy.net -- Wiki Unix/Linux

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
Dominique ROUSSEAU
Dans l'article <42021194$0$486$, yves a écrit :
* http://www.uwsg.indiana.edu/hypermail/linux/kernel/0110.0/0925.html
Avis de Linus sur l'intérêt du write cache (selon ses mots "HUGE" soit
énormes ;-))



« We (as in Linux) should make sure that we explicitly tell the disk
when we need it to flush its disk buffers. We don't do that right, and
because of _our_ problems some people claim that writeback caching is
evil and bad. »

Quelqu'un sait si les choses ont évolué depuis ?


Dom

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
Gilles Berger Sabbatel
On Wed, 02 Feb 2005 22:19:26 +0000, Dominique ROUSSEAU wrote:

Par forcément. Si ils "profitent" de la présence de la tête de
lecture/écriture à proximité d'une zone où une opération d'écriture
doit être effectuée, l'ordre peut ne pas être repsecté, aboutissant à
des données incohérentes si la totalité des données du journal n'est
pas écrite.



Si le constructeur du disque privilégie les performances (ce qui fait
vendre), le disque se comportera effectivement ainsi. S'il privilégie la
sécurité, non. Mais comme les gros crash dévastateurs se produisent
rarement pendant les tests de performances, le constructeur peut être
tenté d'opter pour la première solution...

D'un autre côté, l'ordre d'écriture n'est critique que pour certaines
étapes du processus. Si le système veille à ce que le cache soit
"flushé" (voire désactivé) dans ces moments critiques, il ne devrait
pas y avoir de problème. Mais est-ce le cas? Cela ne semble pas
évident actuellement en ce qui concerne Linux.

Quand on a des données auxquelles on tient vraiment, si. (ceinture,
bretelles, toussa)



Je serais assez prêt à adopter la stratégie ceinture et bretelles à la
maison, où mon seul support de sauvegardes est le graver de CD. Au
bureau, ou les sauvegardes se font automatiquement toutes les nuits, je
suis prêt à prendre plus de risques, même si les données y sont
certainement plus importantes. D'un autre côté, les crash se produisent
toujours à la fin d'une journée où on a fait des tas de trucs
fastidieux qu'on ne voudrait surtout pas refaire. C'est une loi
fondamentale de l'informatique...

Maintenant, en lecture, c'est très utile.



J'en doute fort. Je ne vois pas comment il serait meilleur que le
buffer cache du système.



Je ne suis pas spécialisé en gestion de cache disque, mais j'imagine
que le genre de gains apportés par les caches multiniveau sur les
microprocesseurs doit pouvoir se retrouver plus ou moins dans le
fonctionnement des disques durs, non ?



Et bien, je crois pouvoir répondre non, parce que les situations sont
très différentes. Dans le cas des caches processeurs, on a des caches
de taille décroissante mais de performances croissantes quand on se
rapproche du processeur. L'empilement des caches vient tout simplement du
fait qu'un cache suffisement rapide pour suivre la vitesse du processeur
ne peut pas être assez gros, on rajoute donc un ou plusieurs caches
intermédiaires. Même si les progrès de la techno permettent
d'intégrer des caches L1 de plus en plus gros, c'est compênsé par le
fait que les mémoires (et leur utilisation par les logiciels) sont de
plus en plus grosses, et que l'écart de perfs entre les processeurs et
les mémoires augmente toujours.

Avec les caches disques, la situation est différente, le gros cache,
c'est le cache système. C'est aussi, probablement, le plus rapide, et
c'est là qu'on peut avoir le plus d'intelligence.

D'où ma question initiale... En lecture, le disque peut essayer
d'anticiper les besoins dans la mesure où ça ne coûte rien (pas de
déplacement de bras, et on ne lui a pes encore envoyé de nouvelle
requête), mais il lira souvent des choses qui sont déjà dans le cache
système, et d'autres qui ne seront jamais demandées.

En écriture, l'intérêt est plus clair, mais d'une part les écritures
ne représentent généralement qu'une petite proportion des accès
disques, et d'autre part si les contraintes de sécurité amènent à
désactiver le cache, ou à le flusher fréquement, cela en réduit
l'intérêt.

En tout cas, le moins que l'on puisse dire jusqu'ici est que les réponses
sont assez contrastées!

Merci à ceux qui ont déjà répondu, mais le débat n'est certainement
pas clos...

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
1 2