6 votes

Test de stress de RAM

Je spécifie un nouveau MacBook Pro et je veux savoir combien de mémoire mon travail nécessite. Je fais mon travail de développement sur un iMac de 2011 avec 16 Go de RAM et je veux savoir si j'ai besoin de autant de mémoire pour mon nouveau MBP puisque la RAM n'est pas extensible.

J'ai créé un disque RAM de 8 Go et un fichier aléatoire de 7 Go pour voir la pression sur la mémoire de mon Mac:

diskutil erasevolume HFS+ 'RAM Disk' `hdiutil attach -nomount ram://16777216`
dd if=/dev/urandom of=temp_7gb bs=1 count=0 seek=7g

À ma grande surprise, cela n'a presque aucun impact sur le graphique de pression mémoire dans le Moniteur d'activité! Est-ce que je fais bien? Comment puis-je simuler que mon Mac actuel n'a que 8 Go de mémoire?

14voto

klanomath Points 63400

Ouvrez Terminal, entrez :

sudo nvram boot-args="maxmem=8192"

et redémarrez. Cela limitera la RAM à 8 GiB. Maintenant, commencez à utiliser votre Mac avec la charge de travail habituelle.

Pour réactiver les 16 GiB-RAM complets, entrez simplement sudo nvram -d boot-args et redémarrez à nouveau.


Votre commande dd ne fonctionnera pas comme prévu, car le nombre de blocs écrits est de 0 (count=0) et la taille de bloc serait de 1 octet (bs=1). À ce que je sache, seul un "fichier" de la taille de 7 GiB est créé dans le catalogue du système de fichiers mais aucune donnée n'est réellement écrite dans le fichier lui-même. Si le count était de 1 (count=1), 1 octet de données aléatoires serait ajouté au fichier temp_7gb (seek=7g).

La destination (de=temp_7gb) est douteuse. Cela crée un fichier dans le répertoire de travail. Vous devez soit vous rendre dans un système de fichiers sur le disque RAM (par exemple, cd /Volumes/RAM-Disk/) d'abord pour créer le fichier là-bas, soit écrire directement sur le périphérique du disque RAM (of=/dev/devX).

dd est un outil qui mesure plutôt les entrées/sorties disque que la charge/vitesse du CPU ou l'utilisation de la mémoire.

Avec une combinaison astucieuse d'opérandes dd, vous pouvez encore l'utiliser pour simuler la charge CPU/l'utilisation de la mémoire.

  1. if=/dev/urandom ou if=/dev/zero sont liés à la vitesse du CPU
  2. of=/dev/null le disque ne sera pas impliqué.
  3. bs=x détermine l'utilisation de la mémoire (x est presque proportionnel à l'utilisation de la mémoire)
  4. count=y vous donne du temps pour tester les choses

Exemples :

dd if=/dev/urandom of=/dev/null bs=1 count=1000 

mesure principalement le surdébit des appels système (y compris toutes les atténuations Spectre / Meltdown que votre noyau utilise, ce qui rend les appels système plus lents qu'auparavant). Les nombres aléatoires cryptographiquement forts nécessitent également des calculs importants, mais 1 appel système par octet dominera cela. L'empreinte mémoire est faible (sur mon système environ 400 ko)

dd if=/dev/urandom of=/dev/null bs=1g count=10

mesure principalement la vitesse du CPU car il doit calculer beaucoup de données aléatoires. L'empreinte mémoire est élevée (sur mon système environ 1 Go). bs=1m serait à peu près la même chose mais utiliserait beaucoup moins de mémoire.

dd if=/dev/zero of=/dev/null bs=1g count=10

mesure principalement la bande passante mémoire (ici ~7 Go/s) pour le pilote /dev/zero du noyau réalisant un memset dans l'espace noyau dans le tampon de dd. L'empreinte mémoire ~= taille du tampon, qui est beaucoup plus grande que tout cache. (Certains systèmes avec des graphiques Iris Pro auront 128 MiB ou 256 MiB de eDRAM ; tester avec bs=128m vs bs=512m devrait montrer cette différence.)

Le pilote /dev/null du noyau jette probablement les données sans même les lire donc vous mesurez simplement la bande passante d'écriture mémoire, pas d'écriture + lecture alternée. (Et le surdébit des appels système devrait être négligeable avec seulement une lecture + écriture pour 1 Go stocké.)

dd if=/dev/zero of=/dev/null bs=32k count=100000

mesure principalement la bande passante d'écriture de la mémoire cache CPU (ici ~13 Go/s) et le surdébit des appels système. Le CPU n'a pas grand-chose à calculer (des zéros !) ; l'empreinte mémoire est faible (sur mon système environ 470 ko).

La taille de la cache L1d est de 32 ko. Vous penseriez que bs=24k serait plus rapide (parce qu'il s'adapte facilement à la cache L1d au lieu d'avoir plus d'évictions car le tampon de dd n'est pas la seule chose dans la L1d), mais le surdébit des appels système par ko copié pourrait le rendre pire.

La cache L2 fait 256 ko, la L3 est de 3 à 8 MiB. bs=224k devrait avoir une très bonne bande passante. Vous pouvez exécuter dd sur chaque cœur en parallèle et la bande passante augmentera car les caches L2 sont privées par cœur, contrairement aux L3 partagées et à la DRAM. (Sur les systèmes Xeon à plusieurs cœurs, il faut plusieurs cœurs pour saturer la bande passante de la DRAM disponible, mais sur un bureau/portable, un cœur peut s'en approcher assez près.)

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