3 votes

Beaucoup de mémoire inactive après avoir regardé des films HD/DVD

Je suis propriétaire d'un iMac de mi-2010 (core i7) avec 16 Go de mémoire installée.
Normalement, Mac OS X (SL et Lion) n'utilise jamais la fonction swap (c'est-à-dire que les entrées/sorties de pages = 0), il y a toujours 3 à 8 Go d'espace libre. gratuit la mémoire.
Mais après avoir regardé quelques films DVD/h264, il n'y a que 50-100*. MB * de gratuit la mémoire et swap est utilisé activement. On dirait que les fichiers vidéo sont mappés dans la mémoire système, puisque la quantité de inactif mémoire ~= taille des fichiers. La seule solution de contournement est d'utiliser purge utilitaire.

Je cherche une solution qui soit meilleure que d'exécuter purge à chaque fois que je regarde un film.

temps de fonctionnement :

4:08  up 3 days,  7:35, 5 users, load averages: 0,71 0,76 0,71

vm_stat :

Mach Virtual Memory Statistics: (page size of 4096 bytes)
Pages free:                         738409.
Pages active:                      1715722.
Pages inactive:                     536891.
Pages speculative:                  857329.
Pages wired down:                   344323.
"Translation faults":           1067897384.
Pages copy-on-write:               6068992.
Pages zero filled:               591232281.
Pages reactivated:                 1906255.
Pageins:                           5019598.
Pageouts:                           861857.
Object cache: 16 hits of 1354202 lookups (0% hit rate)

0 votes

Quels lecteurs vidéo utilisez-vous ? N'oubliez pas non plus que le système essaie toujours d'atteindre 50 à 100 Mo de mémoire libre, ce qui signifie que les choses fonctionnent correctement. Que voulez-vous dire également par "l'échange est utilisé activement" ?

0 votes

Lecteur DVD QuickTime/built-it/VLC/MPlayerX. Je veux dire que la date est écrite et lue à partir du swap pour presque chaque opération.

0 votes

QuickTime et le lecteur de DVD swapent très peu sur mes machines lion. Même sur un air avec 2 Go de RAM, la lecture d'une vidéo n'entraîne pas la création d'un deuxième fichier d'échange sur le disque.

3voto

Gareth Jenkins Points 1480

Ce que vous voyez est un comportement normal et souhaité.

OS X, comme Linux et BSD, possède un cache disque. Cela signifie que tout ce qui est lu ou écrit sur le disque est conservé en mémoire. La mémoire "inactive" comprend ce cache disque.

Cette réponse sur AskDifferent l'explique, tout comme cet article sur macosxhints.com :

Cependant, les fondements de X (c'est-à-dire le noyau UN*X) fournissent ces deux fonctionnalités sans que l'utilisateur ait à intervenir. fonctionnalités sans que l'utilisateur n'ait à intervenir. C'est ce qu'on appelle la cache tampon du système de fichiers. La différence la plus significative est que la taille de ce cache tampon est dynamique. Il commence avec une petite taille et peut augmenter ou diminuer en fonction des demandes d'entrées/sorties et de la mémoire des applications. des applications varient dans le temps.

On l'appelle "cache tampon" parce qu'il met en mémoire tampon les données d'entrée/sortie sur leur chemin vers/depuis le disque. Lorsqu'une application écrit des données, elles sont d'abord déposées dans la région de mémoire tampon du fichier de l'application et seront et seront ensuite demandées via des routines de bibliothèque pour que le noyau (le OS) les copie du tampon de l'application vers le disque. Le noyau s'exécutera et le copiera d'abord dans son tampon -- le cache tampon du système de fichiers. Si le noyau a besoin de plus de place dans son cache tampon, il l'obtiendra de la mémoire libre. Dans ce cas, la valeur de la mémoire libre, dans disons dans la commande supérieure du terminal, montrera immédiatement une réduction de la de la mémoire libre. A un moment ultérieur, le noyau copiera ces données (appelées données (appelées tampons sales) vers l'emplacement disque approprié. Je pense que la Je crois que la fréquence de cette opération est de 30 secondes, c'est ce qu'on appelle la synchronisation avec le disque.

Notez que le fait d'avoir de la mémoire paginée sur le disque n'est pas toujours une mauvaise chose . Si les pages de mémoire sont complètement inactives, leur pagination sur le disque peut améliorer les performances car ils gaspillent de la RAM qui pourrait être utilisée pour le cache du disque. Une fois qu'ils sont sortis et que vous arrêtez de regarder des films, ils seront remis en mémoire lorsque vous en aurez besoin, remplaçant automatiquement les tampons et le cache disque. Vous n'avez pas besoin d'exécuter purge à chaque fois. Laissez simplement OS X gérer le cache du disque comme il a été conçu pour le faire.

Pour plus d'informations à ce sujet, consultez l'article de wikipedia sur la pagination y l'article sur le cache de la page .


Information TL;DR :

Voici un article décrivant le fonctionnement du swap sous Linux . Bien qu'il ne soit pas applicable à 100% à OS X, le concept est le même. Je vais citer la partie pertinente :

Lorsqu'une application a besoin de mémoire et que toute la RAM est entièrement occupée, le noyau a deux façons de libérer de la mémoire à sa disposition : il peut soit réduire le cache disque dans la RAM en éliminant les données les plus anciennes soit il peut échanger certaines portions (pages) moins utilisées des programmes vers la partition d'échange sur le disque. Il n'est pas facile de prédire quelle méthode sera plus efficace. Le noyau choisit en devinant approximativement l'efficacité des deux méthodes à un moment donné. l'efficacité des deux méthodes à un instant donné, en se basant sur l'histoire l'historique récent de l'activité

Puisque vous regardez un DVD ou un film, les pages de mémoire les plus récemment actives sont le cache du disque, OS X décide donc de les conserver en RAM et de remplacer les pages de mémoire inactives depuis que vous avez commencé à accéder aux fichiers vidéo. Dès que vous cessez d'accéder aux fichiers vidéo et que vous accédez aux programmes utilisant les pages de mémoire qui ont été échangées, l'inverse est vrai : OS X éliminera le cache disque contenant les données vidéo et le remplacera par les pages de mémoire qui ont été échangées. Votre utilisation de l'échange diminuera.

Voici un peu plus d'informations spécifique à FreeBSD (qui est similaire à Mac OS X) :

FreeBSD utilisera 'toute la mémoire' pour le cache disque. Ce que cela signifie c'est que la partie 'libre' ne contient typiquement que quelques pages. Si le système est à court de mémoire, il peut libérer plus de pages depuis le cache seau.

L'activité du système fonctionne comme suit : Lorsqu'un programme fait activement référence à une page dans un fichier sur le disque (etc...), la page est amenée dans le cache tampon via une opération d'entrée/sortie physique. Elle est généralement placée dans le seau "actif". Si un programme cesse de référencer la page, la page la page migre lentement vers le bas dans le seau inactif ou le seau de cache (selon (selon qu'elle est sale ou non). Les pages sales sont lentement "nettoyées" par en les écrivant dans leur magasin de sauvegarde et en les déplaçant de l'inactif au cache, et les pages du cache sont libérées si nécessaire pour maintenir un nombre minimum de de pages réellement libres dans le seau libre. Ces pages peuvent encore être être "nettoyées" en allouant du swap comme magasin de sauvegarde, ce qui leur permet de de migrer à travers les seaux et d'être éventuellement réutilisées.

[...]

Le cache tampon de la VM met en cache tout le stockage sous-jacent, de sorte que, pour Ainsi, par exemple, il mettra en cache les blocs de données associés à un fichier mais aussi les blocs d'inode et les blocs de bitmap. La plupart des opérations du système de fichiers de la plupart des opérations du système de fichiers sont donc très rapides, même pour les de blocs et autres

[...]

FreeBSD a sans doute l'un des meilleurs codes d'échange qui existe. I Je l'aime personnellement plus que celui de Linux. Linux est plus léger sur l'espace de pagination, mais mais n'équilibre pas bien l'utilisation des ressources de la mémoire système en fonction des variations conditions de charge variables. FreeBSD le fait.

FreeBSD constate l'inutilité des pages existantes en mémoire, et décide qu'il pourrait être avantageux de libérer de la mémoire (ce qui est possible en poussant les pages vers l'espace de pagination), afin qu'elle puisse être utilisée à des fins plus actives (comme la mise en tampon de fichiers, ou plus d'espace programme). la mise en mémoire tampon de fichiers, ou plus d'espace programme). C'est un terrible gaspillage de garder des pages inutilisées, dans le but d'économiser de l'espace disque (bon marché). disque (bon marché). Puisque les E/S SWAP de bas niveau peuvent être plus rapides, avec moins de frais de CPU. que l'entrée/sortie de fichier, il est probablement souhaitable de pousser ces pages inutilisées vers l'extérieur. afin qu'elles puissent être libérées pour être utilisées par des mécanismes plus rapides. (note 1)

(C'est moi qui souligne, vérifiez la partie en gras pour savoir précisément ce que vous demandez, à savoir "Pourquoi le swap est-il utilisé alors que ma mémoire est inactive ?)

0 votes

Je ne veux pas dire que la mise en cache est une mauvaise chose et je connais son utilité. Le problème, c'est que j'ai 16 Go de mémoire (ce qui est suffisant pour conserver en mémoire la quasi-totalité des données/codes que j'utilise) et qu'OSX utilise le swap parce que la moitié de cette mémoire contient d'énormes fichiers vidéo mis en cache. J'aimerais définir une politique de mise en cache pour libérer les fichiers du cache lorsque la quantité de mémoire disponible approche, par exemple, 100-200 Mo.

3 votes

Excellente réponse Josh ! Dommage qu'elle semble avoir été perdue pour le PO. Je n'ai jamais compris les utilisateurs qui ne comprennent pas bien le fonctionnement du système mais qui veulent tout de même en modifier le comportement. @Kentzo, vous ne pouvez pas régler de telles choses. Elles ne sont pas ouvertes au contrôle de l'utilisateur.

0 votes

Je n'ai jamais dit que je cherchais un userland. S'il existe des fonctions côté noyau pour contrôler la politique de mise en cache, indiquez-le moi, je ferai le reste. L'idée était que quelqu'un avait déjà rencontré ce problème et avait déjà écrit un daemon/script.

1voto

slolife Points 6528

Pour ce que j'en sais (et ce que j'ai remarqué), vous n'avez pas à vous soucier de cette mémoire "inactive". Le système la réaffecte à la demande. Cela arrive lorsque le système a un énorme transfert de fichiers à traiter. Ce type d'opération utilise autant de mémoire que possible pour accélérer le processus. Lorsque le transfert est terminé, l'état de la mémoire reste "inactif", mais on peut tout aussi bien la considérer comme libre...

0 votes

Quel processus le système d'exploitation essaie-t-il d'accélérer si je quitte correctement tous les lecteurs vidéo après avoir regardé un film ? Pourquoi le système d'exploitation utilise-t-il le disque dur (où se trouve le swap) au lieu de réutiliser les données du disque dur ? inactif la mémoire ?

0 votes

@Kentzo : Le système d'exploitation met automatiquement en cache les lectures de disque dans la RAM libre. Les pages de mémoire qui ont été inactives pendant une longue période sont transférées sur le disque pour faire de la place pour le cache/tampon du disque, car cela peut en fait augmentation de performance. C'est ce que j'ai mis dans ma réponse et je cherche une référence pour l'étayer.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X