Pseudocode où pseudo try-catch incomplet après le commentaire de cas
#!/usr/bin/env bash # http://askubuntu.com/q/799834/25388 # Use: `sh myScript`; sudo does not work with Matlab. #set -e # no rudimentary error checking # https://stackoverflow.com/a/69808/54964 SWAP_FILE="/media/masi/SamiSwapVirtual/.swap_file_20.7.2016" SIZE_MB="1000" TO_RUN="matlab" sudo dd if="/dev/zero" of="${SWAP_FILE}" bs="1M" count="${SIZE_MB}" status="progress" sudo mkswap "${SWAP_FILE}" sudo chmod 0600 "${SWAP_FILE}" sudo chown root:root "${SWAP_FILE}" # http://unix.stackexchange.com/a/297153/16920 # TODO error-handling if any error, do swap # Error-trapping here as here https://stackoverflow.com/a/185900/54964 ? # # My proposal where I am not sure about how to connect the commands inside the first block in braces # # https://stackoverflow.com/a/22010339/54964 { sudo swapon -v "${SWAP_FILE}" echo "Swap enabled. Press enter to continue"; read "${TO_RUN}" } || { echo "I will remove the swap. Press enter to continue"; read sudo swapoff -v "${SWAP_FILE}" rm -vf "${SWAP_FILE}" exit 1 } echo "I will remove the swap. Press enter to continue"; read sudo swapoff -v "${SWAP_FILE}" rm -vf "${SWAP_FILE}"
Sortie
dd: failed to open '/media/masi/SamiSwapVirtual/.swap_file_20.7.2016': Permission denied mkswap: cannot open /media/masi/SamiSwapVirtual/.swap_file_20.7.2016: Permission denied chmod: changing permissions of '/media/masi/SamiSwapVirtual/.swap_file_20.7.2016': Operation not permitted [sudo] password for masi:
Ouvrir
dd
et mkswap
donne Permission denied
parfois en fonction du disque donc sudo
là. Système: Linux Ubuntu 16.04 64 bits Noyau Linux: 4.6
Matériel: Macbook Air 2013-mid
Thread associé: Gestion des erreurs dans BASH
Exécuter matlab est, ou devrait être, entièrement distinct de la gestion de l'espace de swap. Vous devez séparer les parties swap-creation / deletion en un script distinct, puis exécuter ce script avec sudo
, que ce soit depuis la command line ou depuis votre script principal matlab.
Vous devriez également citer vos variables lorsque vous les utilisez, pas seulement lorsque vous les définissez. BTW, puisque vos variables sont des strings fixes sans aucune variable etc interpolation, vous devriez utiliser des guillemets simples lors de leur définition. La même chose est vraie pour votre command dd
– seuls les arguments of=
et count=
ont besoin de double-citation. Les autres n'ont pas besoin de citation, mais les guillemets simples sont plus appropriés si vous choisissez de les citer.
Utilisez des guillemets doubles lorsque vous souhaitez intégrer d'autres variables ou substitution de command dans une variable ou un argument, des guillemets simples pour les strings fixes. BTW pour les dates, YMD sortinge correctement. DMY ne fait pas.
par exemple
SWAPFILE="/$swappath/.swap_file_$(date +%Y%m%d)"
SWAP_FILE='/media/masi/SamiSwapVirtual/.swap_file_20.7.2016'
Vous ne devriez pas avoir besoin d'append de l'espace d'échange simplement parce que vous utilisez matlab. Ou tout autre programme. Si vous avez besoin ou pourriez avoir besoin de plus d'espace de swap, ajoutez-le simplement au système, par exemple dans /etc/fstab
et oubliez-le.
Si vous pouvez resize vos partitions de manière à ce que la partition de swap soit légèrement plus grande que vous ne le pensez, alors faites-le. Sinon, ajoutez un file d'échange dans /etc/fstab
.
Si vous permutez sur un SSD, vous devez utiliser l'option de discard
afin que les blocs soient ajustés à chaque redémarrage. par exemple
/dev/sda4 none swap defaults,discard 0 0
L'option de discard
fonctionne certainement sur les partitions. Je ne suis pas sûr si cela fonctionne aussi sur les files d'échange (je pense que c'est le cas mais je n'ai pas vu de documentation qui le dit)
Mieux encore que d'append de l'espace de swap est d'installer plus de RAM dans le système si le matériel le permet. Vous avez mentionné dans un autre post que vous utilisez un Macbook Air, qui a soudé sur la RAM, donc ne permet pas les mises à niveau de RAM.
Pour les autres machines, c'est la meilleure option. Les systèmes à base de DDR3 dotés de 4 connecteurs DIMM peuvent être facilement et à peu de frais mis à niveau à 32 Go (modules DIMM 4x8GB à environ 50 $ chacun). Les systèmes basés sur DDR4 avec 4 sockets DIMM peuvent facilement être mis à niveau à 64 Go (DIMM 4x16GB à environ 100 $ chacun).
(les prix sont approximatifs, en AUD, pour les produits disponibles en .au, et en cours au moment de la rédaction)
Il est possible, mais plus difficile à find et plus coûteux, d'installer des modules DIMM DDR3 de 16 Go … la différence de prix est assez importante pour que la mise à niveau de la carte mère et du processeur pour get de la DDR4 soit sans doute utile.
zram
peut utiliser une partie de votre RAM en tant que périphérique de bloc de RAM compressé. Par exemple, pour un périphérique swap zram qui utilise jusqu'à 4 Go de RAM:
modprobe zram num_devices = 1 echo $ ((4 * 1024 * 1024 * 1024))> / sys / block / zram0 / disksize mkswap / dev / zram0 swapon -p 100 / dev / zram0
Vous pouvez utiliser ceci si vous avez aussi une partition swap ou un file swap, mais il est plus logique d'utiliser zswap
car il n'y a pas de "renseignement" sur ce qui est conservé dans le swap ZRAM et ce qui est échangé sur le disque. Lorsque la permutation ZRAM est remplie, toutes datatables permutées suivantes vont sur le disque jusqu'à ce qu'il y ait de nouveau de l'espace libre dans la ZRAM.
Si vous avez déjà une partition de swap, vous pouvez utiliser zswap
pour append un cache dynamic de redimensionnement dynamic avec compression à votre espace de swap existant. Vous pouvez lui indiquer l'algorithm de compression à utiliser et le pourcentage maximum de RAM qu'il est autorisé à utiliser. Par exemple:
echo 1> / sys / module / zswap / parameters / enabled echo lz4> / sys / module / zswap / parameters / compresseur echo 50> / sys / module / zswap / parameters / max_pool_percent
Cela permet de compresser datatables échangées et, lorsque la taille de la memory RAM est proche, la partition de swap est utilisée sur la base LRU (Least-Recently-Used), de sorte que datatables les plus récemment utilisées sont plus susceptibles de restr dans RAM.
zram
et zswap
ont été dans le kernel principal depuis plusieurs années maintenant.
zram
ou zswap
peut être particulièrement utile si vous mettez à jour votre RAM. Par exemple, j'ai récemment mis à niveau mon système principal vers 32 Go de DDR3 et j'utilise également une partition de swap SSD avec zswap
configuré pour permettre l'utilisation de 25% de RAM pour le swap.