Dans Windows 7, en utilisant le Gestionnaire de périphériques, en affichant les propriétés d'un disque et en accédant à l'onglet Stratégies, il y a 2 éléments de commutation. Le cache d'écriture, dont il ne s'agit pas de cette question.
et
[X] Désactiver le vidage du tampon de cache d'écriture Windows sur le périphérique <--- celui-ci uniquement!
Microsoft met une clause de non-responsabilité sur l'onglet de cet élément. "Pour éviter toute perte de données, ne cochez cette case que si l'appareil dispose d'une alimentation séparée qui lui permet de vider sa mémoire tampon en cas de coupure de courant."
En termes simples, qu'est-ce que cela change pour l'écriture de fichiers, l'enregistrement de fichiers, la copie de fichiers?
1. Changer les actions d'écriture pour les programmes paranoïaques: (réalité ou fiction)
Cela change-t-il la façon dont les vidages d'écriture fonctionnent pour un programme qui force un vidage du cache à se produire? Certains programmes sont très déterminés à terminer l'écriture, sans spéculer, ces programmes sont-ils capables de poursuivre leur écriture protectrice, ou cela change-t-il également pour ces programmes?
2. Types de programmes effectués:
Quels sont les types d'actions / programmes qui seraient ou ne seraient pas affectés par le changement? Tapez, certains flux de programmes, certains font des écritures rapides, certains sont continus, certains sont protecteurs (ou tout autre type que vous pourriez définir en termes simples).
3. Avez-vous vu quelque chose, ou même une référence:
si le réglage est activé, quels sont les changements observables par écrit? Tout exemple lâche d'un changement de comportement observé. ou observé aucun changement de comportement?
4. Quel est le retard ou le retard:
Nous savons que la plupart de ces actions sont très rapides sur la plupart des ordinateurs, les données seront éventuellement écrites. Par rapport à la vitesse du variateur, la durée est-elle significative?
Aux fins de ma question, le risque qui existe ne fait pas partie des questions, si vous voulez le couvrir, il ne gênerait pas.
Qu'est-ce que cela signifie "écrire le vidage du tampon de cache" est presque une dupe, mais le lien est pour un système d'exploitation différent. Bien que le A contienne des informations, même le terme utilisé dans le lien n'est pas le même. Il ne répond pas non plus aux choses les plus importantes qu'un utilisateur voudrait savoir, que j'ai essayé de décrire ici.
la source
Réponses:
Votre affirmation dans la première question est une fiction. Appelle l' API Windows, comme s'assurer encore que les données obtient tout le chemin vers les médias physiques, même avec écriture tampon de rinçage désactivé. Ainsi, les programmes qui sont «sûrs» et savent ce qu'ils font vont très bien. Des appels comme dans .NET, etc. finissent par appeler cette API.
FlushFileBuffers()
FileStream.Flush()
Les programmes qui font beaucoup d'E / S disque sans appeler
FlushFileBuffers()
directement, ou toute API d'assistance qui l'appelle éventuellement, verraient l'augmentation des performances la plus notable. Par exemple, si vous exécutiez des E / S non essentielles où tout va bien si des données sont perdues, comme BOINC (si elles se perdent, vous téléchargez à nouveau le fichier ou essayez de recalculer les calculs), vous pourriez éviter d'appelerFlushFileBuffers()
, et appelez simplement une API commeWriteFile()
- les données seront mises en mémoire tampon pour être écrites, mais elles ne seront pas écrites pendant longtemps, par exemple lorsque le descripteur de fichier est fermé ou lorsque le programme se ferme. Malheureusement, il est également possible que si le système plante (comme un BSOD), toutes les données soient perdues, il est donc très importantque si vous faites affaire avec tout type de données précieuses / non remplaçables que vous ne faites appelFlushFileBuffers()
, si le rinçage de la mémoire tampon est activé ou non! Sinon, un simple bug de pilote (par exemple dans votre pilote graphique) pourrait vous faire perdre beaucoup de données.Impossible de trouver des repères, mais vous le remarquerez davantage avec les programmes qui correspondent à la description du deuxième élément ci-dessus.
La synchronisation des données sur le disque n'est pas vraiment aussi rapide, surtout si elle est effectuée fréquemment dans une boucle étroite. Par défaut, si je me souviens bien de la lecture des livres Windows Internals, NTFS par défaut synchronise tous les tampons de système de fichiers sales sur le disque toutes les 5 secondes . Il s'agit apparemment d'un compromis décent entre stabilité et performances. Le problème avec la synchronisation fréquente des données est qu'elle oblige le disque dur à effectuer de nombreuses recherches et écritures.
Considérez le pseudocode suivant:
Avec automatique 5 secondes de rinçage tampon sur :
Avec automatique à 5 second tampon de rinçage hors (l'effet de la case à cocher dans votre question):
Étant donné qu'un système occupé peut subir entre des centaines et des dizaines de milliers d'écritures sur des fichiers par seconde, c'est excellent pour les performances, en particulier sur les disques durs traditionnels (c'est moins impressionnant sur les SSD). La RAM est 20 fois plus rapide que les disques durs en général, bien que cet écart soit moindre avec les SSD.
La raison pour laquelle ils disent que vous devriez utiliser une sauvegarde sur batterie est que vous ne voulez pas avoir 35 minutes de données écrites en mémoire tampon qui ne sont pas écrites sur le disque simplement parce que votre programmeur était paresseux et n'a pas appelé
FlushFileBuffers()
, puis une panne de courant. Bien sûr, une batterie de secours ne vous protège pas contre les bugs du pilote qui provoquent un BSOD ....la source
À l'appui de la réponse de ChatBot John Cavil , j'ai écrit un petit programme de test:
Et exécutez-le sur un disque Samsung 950pro NVMe avec l'option «Désactiver le vidage du tampon de cache d'écriture Windows sur l'appareil».
Le résultat est:
Ainsi, vous pouvez voir que la
FlushFileBuffers
demande n'est pas omise par le système (Windows n'ignore pas l'FlushFileBuffers
appel même si les options sont activées).la source
swTest
(et pourquoi n'est-il pas déclaré)? (2) Êtes-vous en train de dire que vous avez fait deux copies de votre programme, une comprenant l'sfTest.Flush()
appel et une non (c.-à-d. Avec le commentaire), et les avez comparées? S'il vous plaît, expliquez. (3) Je connais l'anglais, mais je ne comprends pas votre dernière phrase.FlushFileBuffers
appel même si les options sont activées (j'ai vu d'autres sources tristes que l'appel soit ignoré lorsque cette option a été activée ). Je vais ajouter quelques commentaires dans la réponse, merci :-)