web-dev-qa-db-fra.com

Comment puis-je simuler la quantité d'installée RAM pour un programme spécifique de Linux?

Je cours BOINC sur mon ancien netbook, qui n'a que 2 Go de RAM à bord, ce qui ne suffit pas Pour certaines tâches de courir. Comme dans, ils refusent de voir à quel point le fichier est faible RAM l'appareil est.

J'ai zram avec Backing_Dev et Zstd Algorithm activé, donc en réalité, le manque de mémoire n'est jamais un problème et dans des cas particulièrement difficiles, je peux toujours simplement utiliser systemd-run --scope -p (J'ai rencontré avec succès des programmes qui ont exigé +16 Go de RAM en l'utilisant)

Comment puis-je faire penser que mon ordinateur portable a plus de 2 Go de RAM==) afin que je puisse exécuter ces tâches exigeantes?

Après quelques pensées, je l'ai fait:

Commencé avec nano /proc/meminfo

Changé MemTotal, MemFree, MemAvailable, SwapTotal et SwapFree aux valeurs souhaitées et enregistrées à ~./Meminfo

A donné le mot de passe de BOINC Sudo passwd boinc et shell - Sudo nano /etc/passwd, trouvé la ligne boinc:x:129:141:BOINC core client,,,:/var/lib/boinc-client:/usr/sbin/nologin et changé le /usr/sbin/nologin partie à /bin/bash

Ensuite, j'ai simulé RAM info en utilisant des exemples à partir d'ici récupérer de la simulation/proc/meminfo

unshare -m bash    #unshares mount spaces, for specific program "bash" only (and for whatever you want to launch from it)
mount --bind ~./meminfo /proc/meminfo      #substitutes real meminfo data with fake one

et confirmé avec free que cela a fonctionné

          total        used        free         shared     buff/cache  available
Mem:     2321456       21456     2300000           0           0     2300000
Swap:     5000000     1000000     4000000

Puis commuté à l'utilisateur su - boinc et vient de lancer le programme avec

boinc --check_all_logins --redirectio --dir /var/lib/boinc-client

Boinc Manager peut être lancé alors comme d'habitude

Succès total, tâches qui ont précédemment refusé de courir, ont commencé à télécharger, puis couru sans complications

Créez un faux meminfo et montez-le sur un original /proc/meminfo:

$ mkdir fake-meminfo && cd fake-meminfo
$ cp /proc/meminfo .
$ chmod +w meminfo
$ sed -Ei 's,^MemTotal:        [0-9]+ kB,MemTotal:        8839012 kB,' meminfo   # replace 8839012 with an amount of RAM you want to pretend you have
$ free -m  # check how much RAM you have now
              total        used        free      shared  buff/cache   available
Mem:           7655        1586        3770         200        2298        5373
$ Sudo mount --bind meminfo /proc/meminfo                                 
$ free -m  # check how much RAM you pretend to have after replacing /proc/meminfo
              total        used        free      shared  buff/cache   available
Mem:           8631        2531        3800         201        2299        5403
$ Sudo umount /proc/meminfo # restore an original /proc/meminfo
$ free -m
              total        used        free      shared  buff/cache   available
Mem:           7655        1549        3806         200        2299        5410

Vous pouvez également exécuter les commandes ci-dessus dans un espace de noms de montage isolé du reste du système. Références: Récupérer de la simulation/proc/meminfo

54
Arkadiusz Drabczyk