Systemd-swap: Sorry, Swap-Prioritäten kleiner als -1 dürfen nur vom Kernel selbst vergeben werden

Erstellt am 14. Juni 2020  ·  31Kommentare  ·  Quelle: Nefelim4ag/systemd-swap

Es scheint durch 52a468aeea9e00f3f1763e96a05adbe48b0a644d verursacht zu werden, aber ich habe nicht halbiert. Könnte es an den letzten Sicherheitsänderungen liegen?

/run/systemd/system/var-lib-systemd\x2dswap-swapfc-1.swap:11: Sorry, swap priorities smaller than -1 may only be assigned by the kernel itself, ignoring: -2

Hilfreichster Kommentar

Ahhh, egal. Ich kann das reproduzieren, es wird nur nicht von systemd-swap protokolliert, sondern von systemd

Alle 31 Kommentare

Können Sie Ihre Linux-Version (ob Arch, ob Zen oder normal), Distribution und Dateisystem sagen?

(das passiert mir nicht, wenn ich arch zen 5.7 und f2fs verwende)

ArchLinux 5.7.2 mit Zen-Modifikationen und ext4.

Wird die Auslagerungsdatei erstellt? (das heißt, ist das nur eine Warnung?)

Ich habe neu gestartet :/ Gibt es eine Möglichkeit, den RAM schnell zu einem bestimmten Prozentsatz zu füllen, um den Austausch auszulösen?

Sie können stress-ng stress-ng --vm-bytes $(awk '/MemAvailable/{printf "%d\n", $2 * 0.90;}' < /proc/meminfo)k --vm-keep -m 1 (weist bis zu 90% des Speichers zu).

Eine andere Möglichkeit, dieses Problem zu beheben, besteht darin, swapfc_priority=100 oder etwas in /etc/systemd/swap.conf.d/overrides.conf

Ok ja, kann noch reproduzieren.
Die Auslagerungsdatei wird weiterhin erstellt.
Obwohl ich denke, dass ich es beheben kann, indem ich > -1 zuweisen, ist diese Warnung normal? Wenn dies der Fall ist, macht es keinen Sinn, diesen Standard zu verwenden und stattdessen 0 zu verwenden, denke ich.

Etwas Seltsames, das mir beim Testen mit stress-ng auffällt, ist, dass, wenn ich * 0.50 der 1-GB-Swap-Chunk, den ich konfiguriert habe, tatsächlich erstellt wird, aber wenn ich ihn in * 0.90 ändere, wird kein weiterer Swap hinzugefügt Trotz 700 MB freiem Speicher.

meine Konfig:

swapfc_enabled=1
swapfc_force_use_loop=0          # Force usage of swapfile + loop
swapfc_frequency=1               # How often to check free swap space in seconds
swapfc_chunk_size=1G           # Size of swap chunk
swapfc_max_count=32              # Note: 32 is a kernel maximum
swapfc_min_count=0               # Minimum amount of chunks to preallocate
swapfc_free_swap_perc=25         # Add new chunk if free < 15%
swapfc_remove_free_swap_perc=55  # Remove chunk if free > 55% && chunk count > 2

zswap_enabled=1
zswap_compressor=zstd     # lzo lz4 zstd lzo-rle lz4hc
zswap_max_pool_percent=25 # 1-99
zswap_zpool=z3fold        # zbud z3fold (note z3fold requires kernel 4.8+)

Die zweite Auslagerungsdatei wird nur erstellt, wenn der Speicher der ersten zur Neige geht

Ah okay. Und warum wird dann nicht getauscht? Ich sehe nur 32 MB verwendet.

Sie müssen Linus Torvalds danach fragen ^^, kurz gesagt, Swap wird nur verwendet, wenn mehr Speicher angefordert wird. Wenn also keine Anwendung mehr Speicher anfordert, wird Swap nicht verwendet.
Sie können die Swap-Parameter selbst abstimmen (swappiness usw.), aber beachten Sie, dass die Standardeinstellungen von systemd-swap auf Standardeinstellungen abgestimmt sind.

Ah ich sehe danke für die nette Erklärung :+1:
Was tun wir gegen das anfängliche „Problem“?

Ich werde mich darum kümmern, es selbst in einer VM zu reproduzieren und ob wir die Warnung unterdrücken können (mit 2>/dev/null in unserem swapon-Befehl). Da dies nur eine Warnung erzeugt, werde ich es nicht sofort für eine neue Version in die Warteschlange stellen, sondern es mit anderen Fixes/Updates bündeln.

Die Warnung ist also falsch und wir können einen Swap mit -2 erstellen?

Ich habe cat /proc/swaps und es scheint zu sagen, dass es tatsächlich eine Priorität von -2 hat:

Filename                Type        Size    Used    Priority
/var/lib/systemd-swap/swapfc/1          file        1048572 33024   -2

Vielleicht ist es also ein Upstream-Fehler und muss gemeldet werden?

Ähh, der Kernel sagt, dass nur er Prioritäten unter -1 erstellen kann und das scheint wahr zu sein (laut der Dokumentation, die ich gelesen habe), es ist eher ein Fehler mit f2fs oder etwas, das dazu führt, dass ich es nicht kann siehe diese Warnung....
Der Grund dafür, dass systemd-swap standardmäßig auf -2 ist, ist, dass es immer so konfiguriert wurde und ich nicht die Einstellungen der Leute zerstören möchte.

Alles klar, danke. Ich lasse das offen, bis Sie es reproduzieren und zum Schweigen bringen können, denke ich.

Kann auf Fedora und Arch nicht reproduziert werden. Können Sie zusätzliche Informationen bereitstellen?

Kann immer noch mit Ihren neuesten Commits reproduzieren.
Welche weiteren Informationen benötigen Sie?

Ich weiß es nicht, aber ich kann nicht wirklich diagnostizieren, ohne reproduzieren zu können. Und da dies nur von Ihnen gemeldet wird, habe ich das Gefühl, dass an Ihrer Seite etwas dafür verantwortlich sein könnte.

  • Mein Swapfc-Pfad ist /var/lib/systemd-swap/swapfc/
  • Mount-Optionen des Laufwerks: rw,noatime,lazytime
  • Systemd 245,6

Meine aktuelle Systemd-Swap-Konfiguration:

################################################################################
# Defaults are optimized for general usage
################################################################################

################################################################################
# You can override any settings with files in:
# /etc/systemd/swap.conf.d/*.conf
################################################################################

################################################################################
# Zswap
#
# Kernel >= 3.11
# Zswap create compress cache between swap and memory to reduce IO
# https://www.kernel.org/doc/Documentation/vm/zswap.txt

zswap_enabled=1
zswap_compressor=zstd     # lzo lz4 zstd lzo-rle lz4hc
zswap_max_pool_percent=25 # 1-99
zswap_zpool=z3fold        # zbud z3fold (note z3fold requires kernel 4.8+)

################################################################################
# ZRam
#
# Kernel >= 3.15
# Zram compression streams count for additional information see:
# https://www.kernel.org/doc/Documentation/blockdev/zram.txt

zram_enabled=0
zram_size=$(( RAM_SIZE / 4 ))    # This is 1/4 of ram size by default.
zram_count=${NCPU}               # Device count
zram_streams=${NCPU}             # Compress streams
zram_alg=zstd                    # See $zswap_compressor
zram_prio=32767                  # 1 - 32767

################################################################################
# Swap File Chunked
# Allocate swap files dynamically
# For btrfs fallback to swapfile + loop will be used
# ex. Min swap size 256M, Max 32*256M
swapfc_enabled=1
swapfc_force_use_loop=0          # Force usage of swapfile + loop
swapfc_frequency=1               # How often to check free swap space in seconds
swapfc_chunk_size=1G           # Size of swap chunk
swapfc_max_count=32              # Note: 32 is a kernel maximum
swapfc_min_count=0               # Minimum amount of chunks to preallocate
swapfc_free_swap_perc=25         # Add new chunk if free < 15%
swapfc_remove_free_swap_perc=55  # Remove chunk if free > 55% && chunk count > 2
swapfc_priority=0               # Priority of swapfiles (decreasing by one for each swapfile). Jumps from 0 to -2.
swapfc_path=/var/lib/systemd-swap/swapfc/
# Only for swapfile + loop
swapfc_nocow=1              # Disable CoW on swapfile
swapfc_directio=1           # Use directio for loop dev
swapfc_force_preallocated=0 # Will preallocate created files

################################################################################
# Swap devices
# Find and auto swapon all available swap devices
swapd_auto_swapon=1
swapd_prio=1024

Ahhh, egal. Ich kann das reproduzieren, es wird nur nicht von systemd-swap protokolliert, sondern von systemd

Gibt es eine Lösung? - Holen Sie sich dies auf Manjaro Test Branch
25. Juni 10:20:55 Workstation systemd[1]: /run/systemd/system/var-lib-systemd\x2dswap-swapfc-1. swap:11 : Sorry, Swap-Prioritäten kleiner als -1 dürfen nur vom Kernel selbst vergeben werden, ignoriert: -2
25. Juni 10:20:56 Workstation systemd[1]: Swap Swap File konnte nicht aktiviert werden.

auf systemd 245.6-3 kein problem

Gibt es eine Lösung? - Holen Sie sich dies auf Manjaro Test Branch
25. Juni 10:20:55 Workstation systemd[1]: /run/systemd/system/var-lib-systemd\x2dswap-swapfc-1. swap:11 : Sorry, Swap-Prioritäten kleiner als -1 dürfen nur vom Kernel selbst vergeben werden, ignoriert: -2
25. Juni 10:20:56 Workstation systemd[1]: Swap Swap File konnte nicht aktiviert werden.

auf systemd 245.6-3 kein problem

Ja, Sie können die Priorität auf etwa 100  einstellen

Gibt es eine Lösung? - Holen Sie sich dies auf Manjaro Test Branch
25. Juni 10:20:55 Workstation systemd[1]: /run/systemd/system/var-lib-systemd\x2dswap-swapfc-1. swap:11 : Sorry, Swap-Prioritäten kleiner als -1 dürfen nur vom Kernel selbst vergeben werden, ignoriert: -2
25. Juni 10:20:56 Workstation systemd[1]: Swap Swap File konnte nicht aktiviert werden.
auf systemd 245.6-3 kein problem

Ja, Sie können die Priorität auf etwa 100  einstellen

Behebt mein Problem nicht:
grafik

Oh, ich habe deinen Kommentar falsch gelesen. Die Priorität führt nie dazu, dass eine Auslagerungsdatei fehlschlägt, sondern warnt nur, sodass Ihr Problem nicht in Zusammenhang steht.
Bitte eröffne hierfür eine neue Ausgabe

Ich weiß nicht, wann es wieder passiert ist, aber ich bin auf dem neuesten Master, Arch-Kernel mit Zen-Modifs (linux-tkg) bei 5.9.7 und reproduziere dieses Problem immer noch, außer dass es noch schlimmer ist, weil es die Priorität weiter erhöht:

/var-lib-systemd\x2dswap-swapfc-3.swap:11: Sorry, swap priorities smaller than -1 may only be assigned by the kernel itself, ignoring: -474

Hier ist mein aktuelles free -hm :

              total        used        free      shared  buff/cache   available
Mem:           15Gi       4,2Gi       907Mi       668Mi        10Gi       9,2Gi
Swap:         4,0Gi       2,3Gi       1,7Gi

Und hier ist die Konfiguration, die ich verwende (keine Änderung an /etc/systemd/swap.conf , mit einer Drop-In-Datei:

################################################################################
# Defaults are optimized for general usage
################################################################################

################################################################################
# You can override any settings with files in:
# /etc/systemd/swap.conf.d/*.conf
################################################################################

################################################################################
# Zswap
#
# Kernel >= 3.11
# Zswap create compress cache between swap and memory to reduce IO
# https://www.kernel.org/doc/Documentation/vm/zswap.txt

zswap_enabled=1
zswap_compressor=zstd     # lzo lz4 zstd lzo-rle lz4hc
zswap_max_pool_percent=25 # 1-99
zswap_zpool=z3fold        # zbud z3fold (note z3fold requires kernel 4.8+)

################################################################################
# ZRam
#
# Kernel >= 3.15
# Zram compression streams count for additional information see:
# https://www.kernel.org/doc/Documentation/blockdev/zram.txt

zram_enabled=0
zram_size=$(( RAM_SIZE / 4 ))    # This is 1/4 of ram size by default.
zram_count=${NCPU}               # Device count
zram_streams=${NCPU}             # Compress streams
zram_alg=zstd                    # See $zswap_compressor
zram_prio=32767                  # 1 - 32767

################################################################################
# Swap File Chunked
# Allocate swap files dynamically
# For btrfs fallback to swapfile + loop will be used
# ex. Min swap size 256M, Max 32*256M
swapfc_enabled=1
swapfc_force_use_loop=0          # Force usage of swapfile + loop
swapfc_frequency=1               # How often to check free swap space in seconds
swapfc_chunk_size=2G           # Size of swap chunk
swapfc_max_count=16              # Note: 32 is a kernel maximum
swapfc_min_count=0               # Minimum amount of chunks to preallocate
swapfc_free_swap_perc=50         # Add new chunk if free < 50%
swapfc_remove_free_swap_perc=55  # Remove chunk if free > 55% && chunk count > 2
#swapfc_priority=0               # Priority of swapfiles (decreasing by one for each swapfile). Jumps from 0 to -2.
swapfc_path=/var/lib/systemd-swap/swapfc/
# Only for swapfile + loop
swapfc_nocow=1              # Disable CoW on swapfile
swapfc_directio=1           # Use directio for loop dev
swapfc_force_preallocated=0 # Will preallocate created files

################################################################################
# Swap devices
# Find and auto swapon all available swap devices
swapd_auto_swapon=1
swapd_prio=1024

Hier ist das Systemd-Swap-Journalprotokoll (abzüglich der Systemd-Swap-Prioritätsfehler)
systemd-swap-log.txt

@vilgotf

Dies ist ein Konfigurationsfehler Ihrerseits (obwohl dies überprüft werden sollte).

Das Problem mit Ihrer Konfiguration besteht darin, dass eine neue Auslagerungsdatei erstellt wird, da Sie mehr als 50 % Ihres Auslagerungsmaterials verwenden. Dies funktioniert bei wenigen Auslagerungsdateien in Ordnung, aber wenn die nächste Auslagerungsdatei zugewiesen wird, ist die Menge an freiem Auslagerung jetzt größer als 55%, sodass sofort versucht wird, die Auslagerungsdatei zu entfernen, und dann (da wir die Auslagerungsdatei entfernt haben) die Die Menge an freiem Swap beträgt weniger als 50%, daher wird versucht, eine neue Swap-Datei zu erstellen (ad infinitum).

Verringern Sie den swapfc_free_swap_perc (empfohlen, 15 ist aus einem bestimmten Grund die Standardeinstellung) oder erhöhen Sie den swapfc_remove_free_swap_perc .

Das war's, danke! Ja, ich habe versucht, mit den Werten zu spielen, weil die neue Auslagerungsdatei nicht früh genug kam und der Speicherkiller ausgelöst wurde.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

Nefelim4ag picture Nefelim4ag  ·  3Kommentare

TeslaBargain picture TeslaBargain  ·  7Kommentare

switchpants picture switchpants  ·  16Kommentare

Navneet-Suresh picture Navneet-Suresh  ·  11Kommentare

cerebrux picture cerebrux  ·  4Kommentare