我在计算机上将zram用作支持RAM的压缩交换。当系统需要交换某些内容时,将其交换到zram支持的交换文件中或多或少等同于在内存中压缩该数据以释放空间。相对于磁盘支持的交换,这使得交换在大多数情况下都非常快。因此,我想知道是否可以通过鼓励系统更积极地交换未使用的东西来获得某些性能,因为它可以这样做而不实际打磁盘?
那么有没有人vm.swappiness
在使用zram时搞乱设置为100?这是可取的吗?
sysctl -w vm.swappiness=100
我在计算机上将zram用作支持RAM的压缩交换。当系统需要交换某些内容时,将其交换到zram支持的交换文件中或多或少等同于在内存中压缩该数据以释放空间。相对于磁盘支持的交换,这使得交换在大多数情况下都非常快。因此,我想知道是否可以通过鼓励系统更积极地交换未使用的东西来获得某些性能,因为它可以这样做而不实际打磁盘?
那么有没有人vm.swappiness
在使用zram时搞乱设置为100?这是可取的吗?
sysctl -w vm.swappiness=100
Answers:
我真的不建议将交换性提高。内核中的一种常见机制是,它将页面(内存块)放在交换中,以释放一些内存以供其他正在运行的任务使用。
当内核要释放n个页面时,第一个“问题”是m(其中m <n,m是保存n所需的压缩页面数)是在RAM中新创建的,我不确定这是否会干扰内核或不。
然后,无论如何,当交换中有页面时,以后可能会在交换中使用应用程序及其某些页面。内核所做的是将这些页面带回到物理内存中,但并没有将它们从交换中删除(通过标准交换可以将其视为缓存,因此当应用程序回到后台时,内核不必写回这些页面进入慢速交换)。但是,使用zram可能不是明智的选择,因为您在内存中拥有zram中的m页+内存中又有n页!
内核通常具有一个“总内存”,可以用来完成其业务。当您添加zram时,它仅计入“交换”内存,就像任何基于磁盘的交换一样,但是它减少了实际的“总内存”,并且内核不希望这样做。因此,有时您可能会有怪异而不想要的行为!
使用zram时,最好让内核在处于内存压力下时不要过多交换该区域。而且,您应该始终拥有一个至少大于zram最大大小的实际硬盘交换分区,以使系统不会出现OOM,而同时,您将看到free
!所报告的大量可用空间!
简短的答案:对于zram vm.swappiness=100
是合适的值(至少在Linux 4.9的Debian Stretch上,我认为这是最好的值)
我已经vm.swappiness=100
为我测试。
我认为您可以做一些简单的测试来确定哪个值最适合您。
我也制作了另一个简单的程序来测试这个问题。x在我的机器上,一个非常低的vm.swappiness
值(例如vm.swappiness=1
)将导致明显的响应性问题。
关于SwapCached
在/proc/meminfo
:
首先,尝试一下vm.page-cluster=0
,这可能会减少一些无用SwapCached
的交换。
SwapCached可以加快与非zram交换设备相同的zram
SwapCached
是否可以在必要时重用(免费):
./linux-4.9/mm$ grep -rn delete_from_swap_cache
memory-failure.c:715: delete_from_swap_cache(p);
shmem.c:1115: delete_from_swap_cache(*pagep);
shmem.c:1645: * unaccounting, now delete_from_swap_cache() will do
shmem.c:1652: delete_from_swap_cache(page);
shmem.c:1668: delete_from_swap_cache(page);
vmscan.c:673: __delete_from_swap_cache(page);
swap_state.c:137:void __delete_from_swap_cache(struct page *page)
swap_state.c:218:void delete_from_swap_cache(struct page *page)
swap_state.c:227: __delete_from_swap_cache(page);
swapfile.c:947: delete_from_swap_cache(page);
swapfile.c:987: delete_from_swap_cache(page);
swapfile.c:1023: delete_from_swap_cache(page);
swapfile.c:1571: delete_from_swap_cache(page);
./linux-4.9/mm$
当内存已满时,页面需要换出(到磁盘)。如果您使用内存来创建在内存已满时换出页面的位置,那么人们会认为这超出了目的,除非压缩产生了不同(然后自然直接压缩内存而不是通过压缩是很自然的)交换)。猜猜这将是基准测试,因为与内存速度相比,计算机在压缩和解压缩方面的速度越来越快。
vm.swappiness
针对磁盘支持的交换调整了该值,如果我主要使用zram支持的交换,是否应该更改它。