它似乎是由 52a468aeea9e00f3f1763e96a05adbe48b0a644d 引起的,但我没有平分。 可能是由最近的安全更改引起的吗?
/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
你能说出你的 linux 版本(如果 arch 是 zen 还是普通的)、发行版和文件系统?
(这不会发生在运行 arch zen 5.7 和 f2fs 的我身上)
ArchLinux 5.7.2 带有 zen 修改和 ext4。
是否创建了交换文件? (也就是说,这只是一个警告吗?)
我重新启动了:/ 有没有办法将 ram 快速填充到特定百分比以触发交换?
您可以使用stress-ng stress-ng --vm-bytes $(awk '/MemAvailable/{printf "%d\n", $2 * 0.90;}' < /proc/meminfo)k --vm-keep -m 1
(最多分配90% 的内存)。
解决此问题的另一种方法是设置swapfc_priority=100
或/etc/systemd/swap.conf.d/overrides.conf
某些内容
好吧,还是可以重现的。
仍会创建交换文件。
即使我想我可以通过分配 > -1 来修复它,这个警告是否正常? 如果是这种情况,那么使用这个默认值是没有意义的,而是使用 0 我猜。
在使用stress-ng
进行测试时,我注意到的一些奇怪之处在于,当我使用* 0.50
,确实创建了我配置的 1GB 交换块,但是当我将其更改为* 0.90
不再添加交换块尽管有 700MB 可用内存。
我的配置:
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+)
第二个交换文件仅在第一个交换文件内存不足时创建
喔好吧。 为什么它不交换呢? 我只看到使用了 32MB。
您将不得不向 Linus Torvalds 询问那个 ^^,简而言之,仅当需要更多内存时才使用交换,因此如果没有应用程序要求更多内存,您将不会看到正在使用交换。
您可以自己调整交换参数(swappiness 等),但请注意 systemd-swap 的默认值已针对默认设置进行了调整。
啊,我明白了,谢谢你的好解释:+1:
我们如何处理最初的“问题”?
我会看看自己在虚拟机中重现它,如果我们可以消除警告(在我们的 swapon 命令中使用2>/dev/null
)。 由于这只会产生警告,因此我不会立即将其排队等待新版本,但我会将其与其他修复/更新捆绑在一起。
所以警告是错误的,我们可以用 -2 创建交换?
我做了cat /proc/swaps
并且它似乎说它确实有 -2 优先级:
Filename Type Size Used Priority
/var/lib/systemd-swap/swapfc/1 file 1048572 33024 -2
所以也许这是一个上游错误并且需要报告?
呃,内核说只有它可以创建低于 -1 的优先级,这似乎是真的(根据我读过的文档),它更像是 f2fs 的一个错误或其他东西,所以我不能看到那个警告....
systemd-swap 默认为-2
的原因是它一直是这样配置的,我不想破坏人们的设置。
好的,我明白了,谢谢。 我会让它打开,直到你可以复制和静音我猜。
无法在 Fedora 和 Arch 上复制。 你能提供更多信息吗?
仍然可以使用您的最新提交进行重现。
您还需要哪些其他信息?
我不知道,但如果不能复制,我就无法真正诊断。 由于这只是您报告的,我觉得您那边可能有什么原因导致了这种情况。
/var/lib/systemd-swap/swapfc/
rw,noatime,lazytime
我当前的 systemd-swap 配置:
################################################################################
# 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
啊哈,别介意。 我可以重现这个,它不是由 systemd-swap 而是由 systemd 记录的
有解决方案吗? - 在 Manjaro 测试分支上得到这个
6 月 25 日 10:20:55 工作站 systemd[1]:/run/systemd/system/var-lib-systemd\x2dswap-swapfc-1。 swap:11 :抱歉,小于 -1 的交换优先级只能由内核自己分配,忽略:-2
6 月 25 日 10:20:56 工作站 systemd[1]:无法激活交换交换文件。
在 systemd 245.6-3 上没问题
有解决方案吗? - 在 Manjaro 测试分支上得到这个
6 月 25 日 10:20:55 工作站 systemd[1]:/run/systemd/system/var-lib-systemd\x2dswap-swapfc-1。 swap:11 :抱歉,小于 -1 的交换优先级只能由内核自己分配,忽略:-2
6 月 25 日 10:20:56 工作站 systemd[1]:无法激活交换交换文件。在 systemd 245.6-3 上没问题
是的,您可以将优先级设置为 100 之类的
有解决方案吗? - 在 Manjaro 测试分支上得到这个
6 月 25 日 10:20:55 工作站 systemd[1]:/run/systemd/system/var-lib-systemd\x2dswap-swapfc-1。 swap:11 :抱歉,小于 -1 的交换优先级只能由内核自己分配,忽略:-2
6 月 25 日 10:20:56 工作站 systemd[1]:无法激活交换交换文件。
在 systemd 245.6-3 上没问题是的,您可以将优先级设置为 100 之类的
不能解决我的问题:
哦,我误读了你的评论。 优先级永远不会导致交换文件失败,它只是发出警告,因此您的问题无关紧要。
请为此开一个新问题
我不知道它什么时候再次发生,但我在 5.9.7 使用最新的 master、arch 内核和 zen modifs(linux-tkg) 并且我仍然重现这个问题,除非它更糟,因为它不断增加优先级:
/var-lib-systemd\x2dswap-swapfc-3.swap:11: Sorry, swap priorities smaller than -1 may only be assigned by the kernel itself, ignoring: -474
这是我目前的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
这是我使用的配置(没有更改/etc/systemd/swap.conf
,使用插入文件:
################################################################################
# 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
这是 systemd-swap 日志日志(减去 systemd 交换优先级错误)
systemd-swap-log.txt
@vilgotf
这是您的配置错误(尽管应为此进行检查)。
您的配置问题是创建了一个新的交换文件,因为您使用了超过 50% 的交换。 这在少数交换文件上可以正常工作,但是当分配下一个交换文件时,空闲交换的数量现在大于 55%,因此它立即尝试删除交换文件,然后(因为我们已经删除了交换文件),可用交换量少于 50%,因此它会尝试创建新的交换文件(无限期)
降低swapfc_free_swap_perc
值(推荐,出于某种原因,默认值为 15)或增加swapfc_remove_free_swap_perc
值。
就是这样,谢谢! 是的,我正在尝试使用这些值,因为新的交换文件来得不够快,而且内存杀手被触发了。
最有用的评论
啊哈,别介意。 我可以重现这个,它不是由 systemd-swap 而是由 systemd 记录的