web-dev-qa-db-fra.com

Comment puis-je remplacer Zram Swap avec un fichier de swap?

Je suis en train d'exécuter un Jetson nano avec Jetpack 4.4 qui (Ubuntu 18.04), par défaut, contient 4x495 MEG ZRAM partitions pour un espace d'échange. Le problème est que pour un projet de science de données, j'ai besoin de plus RAM que le 4GIG installé sur le Jetson (et tout ce que je reçois de zram compressé - pas beaucoup). Donc, je voudrais aussi faire un Fichier d'échange de 8 Go au lieu de l'échange de ZRAM.

enter image description here

Comment puis-je désactiver l'échange ZRAM pour que je puisse créer un fichier d'échange?

J'ai essayé

Sudo apt remove --purge zram-config
Sudo dpkg --purge zrawmswap-enabler
Sudo dpkg --purge zram-config
Sudo service zramswap stop

Mais rien de ça ne fonctionne. Zram Swap est toujours activé sur le redémarrage: -enter image description here

Vous pouvez également créer un fichier de swap de disque et vous pouvez vous attendre à ce qu'il remplace ZRAM?

2
Thomas Browne

Avec ZRAM, vous avez échangé dans RAM et compressé. Chaque fois que votre système sonne, il le fera très vite, de même que la RAM.

Vous n'avez pas besoin d'arrêter le ZRAM pour remplacer par un autre swap. Vous pouvez simplement ajouter plus d'échange et laisser le système le gérer.

Si vous souhaitez modifier le ratio de configuration de ZRAM Modifier: /etc/systemd/nvzramconfig.sh

Afin de créer un nouveau swap sur disque, vous avez soit deux options:

  • Créer une partition pour Swap, dédié
  • Créez un fichier dans un lecteur et utilisez-le pour le swap.

Si vous attendez beaucoup de mouvements d'échange de bélier et de vexera:

  • Vous pouvez utiliser le 16 Go EMMC 5.1 dans le Jet Nano, mais cela mourra bientôt. Ils ne sont pas faits pour la réécriture de l'échange comme le système est affamé de mémoire. La vitesse sera aussi lente.
  • Vous pouvez connecter un lecteur externe à l'aide de l'interface USB 3.0.
  • Si vous utilisez SSD, l'écriture Beaucoup peut conduire à une matrice prématurée du SSD que vous pouvez utiliser SAS SSD Enterprise Grade, mais je pense que cela serait surchargé pour un ordinateur dont le coût est faible et de toute façon La vitesse sera limitée à la vitesse du port USB 3.0.
  • Si vous utilisez un disque dur, un échange sera très lent. Dans les deux cas, vous serez limité à la vitesse de la USB 3.0

Pour ce que vous commenciez, je pense que vous allez courir ce programme scientifique à quelques reprises, disons un maximum de 100 fois, alors même si l'échange est fortement utilisé ne peut pas être un problème pour un SSD national. Vous pouvez également joindre une NVME à l'aide d'un boîtier externe, mais vous ne verrez pas une vitesse élevée, car la contrainte de vitesse est dans la USB 3.0. La série Samsung Pro offre une double écriture avant de mourir.

Faites attention à utiliser le 3.0 et non une 2,0 accidentellement.

Si vous avez besoin d'utiliser ce programme scientifique, vous pouvez vous assembler un PC bon marché avec 16 Go ou 32 Go de RAM et vous n'avez pas besoin d'échange du tout.

Mise à jour 2020-11-04: Dans jetpack-4.4 NvzramConfig est un service SystemD, donc dans /etc/systemd/system Vous avez un fichier appelé nvzramconfig. service

#
# Copyright (c) 2019, NVIDIA CORPORATION.  All rights reserved.
#

[Unit]
Description=ZRAM configuration
; Everything depends on the NVIDIA per-boot script
After=nv.service
; TPC power gating must be enabled before anything touching gpu
After=nvpmodel.service

[Service]
Type=simple
ExecStart=/etc/systemd/nvzramconfig.sh

[Install]
WantedBy=multi-user.target

Vous pouvez empêcher complètement ce service de commencer en le désactivant:

Sudo systemctl disable nvzramconfig

C'est la façon préférée de le faire. Mais si, pour une raison quelconque, vous ne voulez pas désactiver le service, ce n'est pas si agréable option consiste à simplement commenter toutes les lignes du fichier /etc/systemd/nvzramconfig.sh comme ceci:

#!/bin/bash
#
# Copyright (c) 2019, NVIDIA CORPORATION.  All rights reserved.
#

# NRDEVICES=$(grep -c ^processor /proc/cpuinfo | sed 's/^0$/1/')
# if modinfo zram | grep -q ' zram_num_devices:' 2>/dev/null; then
#   MODPROBE_ARGS="zram_num_devices=${NRDEVICES}"
# Elif modinfo zram | grep -q ' num_devices:' 2>/dev/null; then
#   MODPROBE_ARGS="num_devices=${NRDEVICES}"
# else
#   exit 1
# fi
# modprobe zram "${MODPROBE_ARGS}"

# Calculate memory to use for zram (1/2 of ram)
# totalmem=`LC_ALL=C free | grep -e "^Mem:" | sed -e 's/^Mem: *//' -e 's/  *.*//'`
# mem=$((("${totalmem}" / 2 / "${NRDEVICES}") * 1024))

# initialize the devices
# for i in $(seq "${NRDEVICES}"); do
#   DEVNUMBER=$((i - 1))
#   echo "${mem}" > /sys/block/zram"${DEVNUMBER}"/disksize
#   mkswap /dev/zram"${DEVNUMBER}"
#   swapon -p 5 /dev/zram"${DEVNUMBER}"
# done

Tant que l'exécution sort avec le niveau d'erreur 0 (donc aucune erreur ou aucun code de sortie différent de 0), il sera considéré comme fonctionne.

Dans les deux sens, le module du noyau ne sera pas chargé (Modprobe Zram).

Acclamations

3
Carles Mateo