J'utilise mmap call pour lire à partir d'un très gros fichier en utilisant l'arithmétique du pointeur simple en C++. Le problème est que lorsque je lis plusieurs fois de petits blocs de données (dans l'ordre des Ko), chaque lecture prend le même temps que la précédente. Comment puis-je savoir si le disque est accédé pour répondre à ma demande ou si la demande est en cours de la mémoire principale (cache de page) dans les appels après le premier.Mise en cache en mmap
Répondre
Le problème est le suivant: les deux lectures ont été effectuées à partir du cache. Je suppose que la mise en cache commence lorsque le fichier est ouvert ou mmapped, avant de demander les données. Pour vérifier cela, j'ÉMISSION:
echo 3 > /proc/sys/vm/drop_caches
qui débusque le cache, puis, si je lance deux itérations pour obtenir les mêmes données, la première manche est (dans mon cas) 10 fois plus lent que la seconde .
Vous obtiendrez les meilleures performances de cache si vous exploitez locality of reference. C'est-à-dire que si vous accédez à des variables proches les unes des autres en mémoire (par exemple en progressant d'une unité dans les variables) et que vous effectuez ces accès dans le temps (ie pas d'autres accès mémoire entre ces éléments) vous obtiendrez les meilleures performances de cache. Si chaque lecture prend à peu près le même laps de temps, il est très probable qu'elle soit mise en cache; Si les choses ne sont pas servies à partir du cache, cela est généralement indiqué par plusieurs lectures rapides (cache hits) suivies d'un pic (cache miss) suivi de lectures plus rapides. Sur presque tous les systèmes, un cache manquant provoque un bloc dans lequel les données résident à charger dans le cache, donc si vous accédez à des variables proches (qui sont dans le même bloc), ils seront dans le cache.
- 1. Mise en cache et conversion pendant la mise en cache
- 2. Mise en cache en HTML5
- 3. Mise en cache Type.GetXYZ
- 4. Mise en cache et évitement du contenu mis en cache
- 5. problème de mise en cache
- 6. Mise en cache dans urllib2?
- 7. Mise en cache automatique web.config
- 8. Optimize APC Mise en cache
- 9. Solutions de mise en cache
- 10. intervalle rails mise en cache
- 11. Mise en cache de WebConfigurationManager.AppSettings?
- 12. Rails - Mise en cache ACL9 en session
- 13. Mise en œuvre pour la mise en cache des requêtes
- 14. mmap (2) vs mmap (3)
- 15. Question de mise en cache de Symfony (mise en cache partielle)
- 16. Désactiver la mise en cache eclipselink et la mise en cache des requêtes - ne fonctionne pas?
- 17. Rose :: DB :: Object :: Mémoire mise en cache est-elle mise en cache via différents processus?
- 18. .htaccess pour la compression, la mise en cache du navigateur, la mise en cache proxy, etc.
- 19. C# Mise en cache de la dépendance du cache
- 20. Mise en cache des requêtes avec HttpModule
- 21. Mise en cache du navigateur via java
- 22. Mise en cache des bonnes pratiques
- 23. Mise en cache distribuée sur mono
- 24. Mise en cache hors ligne HTML5
- 25. Aide à la mise en cache distribuée
- 26. Mise en cache de fragments avec Memcached
- 27. objectdatasource et la mise en cache
- 28. Mise en cache Django pour un blog
- 29. rails mise en cache pour application.rb
- 30. Mise en cache des retours sans affichage
Pourquoi est-ce important? –
Vitesse! Je veux savoir pourquoi les appels suivants ne sont pas plus rapides que le premier quand je m'attends à ce qu'ils soient remplis du cache plutôt que par un accès au disque. – myahya
avez-vous également profilé le temps qu'il a fallu pour l'appel mmap? Il est possible qu'il ait déjà mis en cache la première page lorsque vous avez invoqué mmap. Tous les principaux systèmes d'exploitation de bureau modernes seront mis en cache, car l'accès au disque est très coûteux, mais si vous avez un schéma d'accès très étrange, vous risquez de forcer des échecs de cache sur chaque accès (votre modèle d'accès est-il séquentiel?). –