Existe-t-il une fonction noyau qui renvoie la quantité de mémoire du noyau disponible (pas liée à vmalloc).mémoire disponible dans le noyau
Répondre
D'abord, permettez-moi de dire que si vous allez prendre des décisions politiques (dois-je procéder à cette opération?) Sur la base de ces informations, ARRÊT. Comme WGW l'a souligné, il y a des races inévitables ici; la mémoire peut être utilisée entre quand vous vérifiez et quand vous l'utilisez. Testez simplement les erreurs sur vos allocations de mémoire et disposez d'un chemin d'échec approprié. De plus, si vous demandez de la mémoire quand il n'y a pas assez de mémoire libre, le noyau peut obtenir plus de mémoire libre en nettoyant la mémoire cache, en échangeant sur le disque, en libérant des galettes, etc. allocations lorsqu'il n'est pas fait par vmalloc même avec beaucoup de mémoire libre. Cela dit, il existe des API pour interroger la disponibilité de la mémoire du noyau. Vous devriez noter que le noyau a plusieurs pools de mémoire, donc même si l'une de ces API indique que vous n'avez pas de RAM libre, elle pourrait être disponible dans le pool de mémoire qui vous intéresse.
D'abord, nous avons si_meminfo. C'est l'appel qui fournit les données de disponibilité pour /proc/meminfo
, entre autres choses, et des rapports sur l'état actuel de l'allocateur de page de contact. Notez que la RAM mise en cache et la mémoire tampon peuvent être converties en RAM libre très rapidement.
global_page_state(NR_SLAB_RECLAIMABLE)
peut également être utilisé pour obtenir des comptes de combien de mémoire de dalle peut être rapidement récupéré. Si vous demandez une allocation, cette mémoire peut et sera libérée à la demande. L'allocateur SLUB (utilisé pour kalloc()
et similaires, entre autres) fournit également des statistiques pour ses pools de mémoire interne qui peuvent également refléter la mémoire disponible dans chaque pool de mémoire. Cela peut ne pas être disponible avec la même API en fonction de l'allocateur sélectionné dans votre configuration - veuillez n'utilisez pas ces données sauf pour le débogage. Le code correspondant (implémentant /proc/slabinfo
) peut être trouvé dans mm/slub.c
S'il vous plaît corrigez-moi si je me trompe, mais ne serait même pas très difficile et race informations vulnérables sur la mémoire du noyau disponible être utile lorsqu'il s'agit de fuites de mémoire dans l'espace noyau? Je veux dire vérifier la mémoire disponible, puis exécuter X fois un pilote ou quoi que ce soit qui alloue de la mémoire et enfin vérifier quelle sera la différence. – user1723095
Quelle est l'utilisation de la mémoire disponible pour vous? Dans le pire des cas, vous exécutez une condition de concurrence en vérifiant la mémoire disponible:
- Vous obtenez la mémoire disponible. C'est assez.
- Multitâche, c'est-à-dire le planificateur du noyau, arrête votre processus et continue avec un autre qui alloue un bouquet de la mémoire disponible.
- Le planificateur poursuit votre processus.
- Vos allocations échouent bien que l'étape 1 ait montré assez de mémoire disponible.
S'il vous plaît corrigez-moi si je me trompe, mais AFAIK simplement que kmalloc() peut toujours montrer le succès.Mais ils ne signifient pas que cette mémoire est actuellement allouée. Les pages de la mémoire sont créées lorsque la tâche accède réellement à la mémoire que vous avez créée. –
- 1. Espace mémoire des tableaux dans le noyau CUDA
- 2. Comment obtenir la mémoire disponible dans IOS?
- 3. Récupérer la mémoire contiguë disponible
- 4. Tableau dynamique dans le module noyau Linux
- 5. Détection d'une mémoire iphones disponible
- 6. Gestion de la mémoire du noyau Linux
- 7. Noyau Linux - Récupère le dernier bloc de mémoire écrit
- 8. Comment charger le noyau en mémoire, à partir d'un ISO
- 9. Protection de la mémoire du noyau Windows
- 10. ida64 accès à la mémoire pendant le débogage du noyau
- 11. Le noyau gdb ne peut pas accéder à la mémoire
- 12. noyau lié à la mémoire et noyau lié de calcul dans les GPU
- 13. Comment rendre une fonction noyau Linux disponible pour ftrace?
- 14. Afficher la mémoire physique disponible sur le périphérique (iphone/ipad)
- 15. Liste liée dans la mémoire partagée, noyau Linux
- 16. Cassandra SSTables génération mémoire consommation/compression disponible?
- 17. Taille de fichier d'échange disponible/mémoire virtuelle
- 18. La mémoire est beaucoup plus petite que la mémoire disponible
- 19. Détermination de la mémoire disponible sur Android
- 20. MySQL PAS d'utiliser la mémoire disponible
- 21. Valeur étrange pour la mémoire physique disponible
- 22. Installer des modules de noyau dans le noyau Android
- 23. Chargement du module du noyau dans le noyau Android
- 24. setscheduler() dans le noyau Linux
- 25. asm__volatile() dans le noyau Linux
- 26. Profilage CUDA dans le noyau
- 27. Structure PTE dans le noyau linux
- 28. Blocage de l'accès à plus de mémoire dans R malgré la mémoire disponible dans mon système
- 29. Taille de mémoire disponible dans Visual Studio C++
- 30. Comment mesurer de manière fiable la mémoire disponible sous Linux?
Vous avez déjà une très bonne indication de manque de mémoire (l'allocation retourne 'NULL'), pourquoi en cherchez-vous une autre? – delnan
La vérification de la quantité de mémoire disponible, en particulier dans les situations de mémoire insuffisante, ne fonctionnerait pas. Un autre thread pourrait avoir alloué ce qui restait entre le moment où vous vérifiez et le temps que vous allouez. – Mat
Peut-être que vous essayez d'allouer zéro octets? Vérifiez pour cela aussi. –