1

Lorsque nous stockons de la mémoire malloc, seule la mémoire virtuelle est disponible, et elle pointe vers zéro-page. La vraie mémoire physique sera allouée quand nous essayons d'écrire dans la mémoire malloced, à ce moment, il y aura copy-on-wright que copier zéros de zéro-page à la mémoire physique qui est mappé par défaut de page. Mon problème est, comment/où la demande zero-fill-on est implémentée dans le code source de Linux, je veux désactiver cette fonctionnalité pour faire un peu de test. Je suppose que cela peut se produire dans la procédure page-fault, plutôt que brk() ou mmap().Comment la demande zero-fill-on est implémentée dans le noyau Linux, et où je peux la désactiver?

Sujets similaires liés à zéro-remplissage à la demande. ZFOD et COW.

+0

Pourquoi voulez-vous le désactiver? Si c'est pour des tests de timing, peut-être pourriez-vous forcer la copie sur écriture à se produire dans la mémoire malléable avant de faire les tests de timing. –

+0

La mémoire Malloc s'est produite dans l'espace utilisateur, mais la copie sur écriture s'est produite dans l'espace noyau. Je ne pense pas que je puisse avoir une telle capacité à le contrôler quand cela arrive. – Qinchen

+1

Voir la fonction 'prep_new_page()' dans 'mm/page_alloc.c'. Si vous mettez en commentaire l'appel (conditionnel) à 'prep_zero_page()', les pages doivent rester non initialisées. – Ctx

Répondre

0

Si vous voulez que votre processus de l'espace utilisateur à allouer de la mémoire réelle chaque * appel alloc, je pense que dans les options suivantes:

  • Si elle est pour des raisons de performances, vous pouvez remplacer tous les appels calloc pour malloc + memset Les processus auront donc toujours une vraie page de mémoire. Cependant, le noyau pourrait toujours être capable de fusionner certaines pages de mémoire.

  • Désactiver la mémoire overcommit afin que chaque malloc retourne la page pour le moment. De cette façon, votre programme ne pourra pas allouer plus de mémoire que disponible (RAM + échange). Voir https://www.kernel.org/doc/Documentation/vm/overcommit-accounting

+0

La réponse donnée par @Ctx correspond plus à ma réponse, mais toujours merci pour votre message. – Qinchen

+0

Bien sûr, de rien! – eugenioperez