J'ai lu un article et il a utilisé les termes cache froid et cache chaud . J'ai recherché ces termes sur Google, mais je n'ai pas trouvé quelque chose d'utile (seulement un fil ici ).
Que veulent dire ces termes?
TL; DR Il y a une analogie avec un moteur froid et un moteur chaud de la voiture. Cache froid - n'a aucune valeur et ne peut vous donner aucune accélération car, eh bien, il est vide. Le cache chaud a certaines valeurs et peut vous donner cette accélération.
Un cache est une structure qui contient certaines valeurs (inodes, pages mémoire, blocs de disques, etc.) pour une recherche plus rapide.
Le cache fonctionne en stockant une sorte de références courtes dans une structure de données de recherche rapide (table de hachage, arbre B +) ou des supports d'accès plus rapides (mémoire RAM vs disque dur, SSD vs disque dur).
Pour pouvoir effectuer cette recherche rapide, vous avez besoin que votre cache contienne des valeurs. Regardons un exemple.
Disons que vous avez un système Linux avec un système de fichiers. Pour accéder aux fichiers du système de fichiers, vous devez savoir où commence votre fichier sur le disque. Ces informations stockées dans l'inode. Pour simplifier, nous disons que la table d'inode est stockée quelque part sur le disque (partie dite "superbloc").
Imaginez maintenant que vous devez lire le fichier/etc/fstab. Pour ce faire, vous devez lire la table d'inode du disque (10 ms), puis l'analyser et obtenir le bloc de démarrage du fichier, puis lire le fichier lui-même (10 ms). Total ~ 20 ms
C'est beaucoup trop d'opérations. Vous ajoutez donc un cache sous la forme d'une table de hachage en RAM. RAM l'accès est de 10ns - c'est 1000 (!) Fois plus rapide. Chaque ligne de cette table de hachage contient 2 valeurs.
(inode number or filename) : (starting disk block)
Mais le problème est qu'au début, votre cache est vide - ce cache est appelé cache froid. Pour exploiter les avantages de votre cache, vous devez le remplir avec quelques valeurs. Comment ça se passe? Lorsque vous recherchez un fichier, vous recherchez dans votre cache d'inode. Si vous ne trouvez pas d'inode dans le cache ( manque de cache ) vous dites "OK" et effectuez un cycle de lecture complet avec la lecture de la table d'inode, l'analyse et lire le fichier lui-même. Mais après avoir analysé la partie, vous enregistrez le numéro d'inode et le bloc de disque de départ analysé dans votre cache. Et cela continue encore et encore - vous essayez de lire un autre fichier, vous regardez dans le cache, vous obtenez un cache manquant (votre cache est froid), vous lisez à partir du disque, vous ajoutez une ligne dans le cache.
Le cache froid ne vous donne donc aucune accélération car vous lisez toujours à partir du disque. Dans certains cas, le cache froid ralentit votre système car vous effectuez un travail supplémentaire (étape supplémentaire de recherche dans une table) pour réchauffer votre cache.
Après un certain temps, vous aurez des valeurs dans votre cache, et après un certain temps, vous essayez de lire le fichier, vous recherchez dans le cache et BAM! vous avez trouvé l'inode ( hit cache )! Maintenant que vous avez démarré le bloc disque, vous sautez la lecture du superbloc et commencez à lire le fichier lui-même! Vous venez de gagner 10 ms!
Ce cache est appelé cache chaud - cache avec quelques valeurs qui vous donnent des accès de cache.
Contexte:
Cache
est un memory
petit et plus rapide, qui permet d'éviter CPU
d'accéder à main memory
(plus grand et plus lent) pour gagner du temps (cache
les lectures sont ~100 x
plus rapide que la lecture de main memory
). Mais cela n'aide que si les données dont votre programme a besoin ont été cached
(lues depuis main memory
dans cache
) et est valide. De plus, cache
est rempli de données au fil du temps. Ainsi, cache
peut être:
1. Vide, ou
2. peut contenir des données non pertinentes , ou
3. peut contenir des données pertinentes .
Maintenant, à votre question:
Cold cache: Lorsque le cache
est vide ou contient des données non pertinentes, de sorte que CPU
doit effectuer une lecture plus lente à partir de main memory
pour vos besoins en données de programme.
Hot cache: Lorsque le cache
contient des données pertinentes et que toutes les lectures de votre programme sont satisfaites à partir du cache
lui-même.
Ainsi, les caches chaudes sont souhaitables, les caches froides ne le sont pas.
Très belle réponse @avd.
Cold Cache est juste un cache vide ou un avec des données périmées.
Hot Cache d'autre part, conserve les données utiles dont votre système a besoin. Il vous aide à accélérer le traitement; il est principalement utilisé pour le traitement des demandes en temps quasi réel. Il existe des systèmes/processus qui ont besoin de certaines informations à portée de main avant de commencer à répondre aux demandes des utilisateurs; comme une plate-forme de négociation qui nécessiterait des données de marché/informations sur les risques/informations de sécurité, etc. avant de pouvoir traiter une demande d'utilisateur. Cela prendra du temps si, pour chaque demande, le processus doit interroger une base de données/service pour obtenir ces informations critiques. Ce serait donc une bonne idée de le mettre en cache; et ce serait faisable via Hot Cache. Ce cache doit être maintenu régulièrement (mises à jour/suppressions, etc.); sinon, au cours de la période, votre cache peut augmenter de taille avec des données inutiles et vous pourriez remarquer une dégradation des performances.
Pour créer Hot Cache, une méthode serait une population paresseuse de cache, ce que je veux dire par là, c'est qu'au fur et à mesure que vous recevez des demandes, vous remplissez le cahce; dans ce cas, les demandes initiales seraient lentes, mais les demandes ultérieures seraient plus rapides. Une autre approche consisterait à charger les données au démarrage du processus (ou avant que les demandes des utilisateurs ne commencent à arriver) et à maintenir le cache jusqu'à la fin du processus.