# 如何在Linux上启用zRAM模块以获得更高效的swap

# 如何在Linux上启用zRAM模块以获得更高效的swap,第1张

发现玩客云镜像无zram,故在内核配置zram后,添加zram功能。

转自 https://www.a5idc.net/helpview_815.html

如果您发现Linux系统的性能不能达到标准,请启用zRAM以获得更高效的swap系统。

swap的问题在于它通常驻留在比系统上安装的RAM慢的驱动器上。当然,在Linux上总是有解决办法的。这个方法就是zRAM模块,这样做的目的是将RAM的一部分用作swap空间。swap的目的不就是为了解决内存不足的问题吗?

存储在zRAM分区中的数据被压缩,因此更多的数据可以存储在RAM中。虽然CPU时间的一小部分用于这种压缩,但是性能上的权衡通常是值得的。

如果这听起来像您要使用的模块,您将如何使用它呢?

1、由于在所有Linux发行版中都可以使用zRAM,因此您唯一需要做的是:运行中的Linux系统服务器、具有sudo特权的用户。

这里将在Ubuntu Server 18.04上进行演示。如果您使用其他发行版,则只需修改systemd单位文件以适合您选择的发行版。

2、如何启用zRAM

zRAM模块由systemd控制,因此不需要fstab条目。由于所有的东西都已经安装好了,我们只需要创建几个文件并修改一个即可。

打开一个终端窗口,并使用以下命令创建一个新文件:

sudo nano /etc/modules-load.d/zram.conf

在该文件中,添加单词:

zram

保存并关闭文件。

接下来,使用命令创建另一个新文件:

sudo nano /etc/modprobe.d/zram.conf

在该文件中,粘贴以下行:

options zram num_devices=1

保存并关闭文件。

接下来,我们需要配置zRAM分区的大小。使用以下命令创建一个新文件:

sudo nano /etc/udev/rules.d/99-zram.rules

在该文件中,粘贴以下内容(修改disksize属性以适合您的需要):

KERNEL=="zram0", ATTR{disksize}="512M",TAG+="systemd"

保存并关闭文件。

3、如何禁用传统swap

为了使zRAM正常运行,您将需要禁用传统的swap。这在fstab文件中处理。使用以下命令打开该文件:

sudo nano /etc/fstab

在该文件中,注释掉/swap.img开头的行(添加#号)。

保存并关闭文件。

4、如何创建一个systemd单位文件

为了运行zRAM,我们需要创建一个systemd单位文件。使用以下命令创建此文件:

sudo nano /etc/systemd/system/zram.service

在该文件中,粘贴以下内容:

[Unit]

Description=Swap with zram

After=multi-user.target

[Service]

Type=oneshot

RemainAfterExit=true

ExecStartPre=/sbin/mkswap /dev/zram0

ExecStart=/sbin/swapon /dev/zram0

ExecStop=/sbin/swapoff /dev/zram0

[Install]

WantedBy=multi-user.target

保存并关闭文件。

使用以下命令启用新设备:

sudo systemctl enable zram

重新启动机器。

5、如何确定zRAM是否正常工作

系统重启后,重新登录。在终端窗口中,发出以下命令:

cat /proc/swaps

现在,您应该看到/ dev / zram0正在处理您的swap。

恭喜你,zRAM现在可以工作了。当应用程序或服务开始在系统上使用swap时,您应该会看到性能的提升。

不会。

_ram(也称为 zRAM,先前称为 compcache)是 Linux 内核的一项功能,可提供虚拟内存压缩。zram 通过在 RAM 内的压缩块设备上分页,直到必须使用硬盘上的交换空间,以避免在磁盘上进行分页,从而提高性能。由于 zram 可以用内存替代硬盘为系统提供交换空间的功能,zram 可以在需要交换 / 分页时让 Linux 更好利用 RAM ,在物理内存较少的旧电脑上尤其如此。

1,同目录下的makefile,如

#

# Makefile for industrial I/O Magnetometer sensors

#

obj-$(CONFIG_SENSORS_AK8975)+= ak8975.o

obj-$(CONFIG_SENSORS_HMC5843)+= hmc5843.o

2,同目录下的kconfig

#

# Magnetometer sensors

#

comment "Magnetometer sensors"

config SENSORS_AK8975

tristate "Asahi Kasei AK8975 3-Axis Magnetometer"

depends on I2C

help

Say yes here to build support for Asahi Kasei AK8975 3-Axis

Magnetometer.

To compile this driver as a module, choose M here: the module

will be called ak8975.

3,总的config(配置变量为Y)

各项目配置文件的位置不同,

coffee:kernel/arch/arm/configs/M7023Q-debug-perf_defconfig

juice:common/customer/configs

配置信息如下:

# CONFIG_CFG80211 is not set

CONFIG_EXPERIMENTAL=y

CONFIG_LOCALVERSION="$(KERNEL_LOCAL_VERSION)-perf"

CONFIG_SWAP=y

CONFIG_ZRAM=m

CONFIG_SYSVIPC=y

CONFIG_SENSORS_AK8975=y

......

查看变量是否在编译时配置成功:

out/target/product/m7023q/obj/KERNEL_OBJ/include/generated/Autoconf.h

查找CONFIG_SENSORS_AK8975

若在编译时有配置成功,将找到这一行:

#define CONFIG_SENSORS_AK8975 1

4、修改板级文件:

4.0及后续项目统一在:kernel/arch/arm/mach-msm/board-qrd7627a.c

注意juice中,很多配置(如tp)写在kernel/arch/arm/mach-msm/board-msm7627a-io.c

在代码中增加新模块的内容,应该有两处,第一处设置函数和结构体,第二处实际调用,注意引用上述第3步新增的编译开关将代码限制起来。

这些内容大多可以拷贝其它模块,但是名字要和driver中的相同,注意要改的地方除了名字之外,还有中断脚和I2C脚。其中固定模块的中断脚大部分时候不会改变(如tp就是int:48,reset:26),除非板子的datasheet特别注明才需要改变。但是I2C脚是会随着slaver device的改变而改变的,需要查清楚。

配置platform_data:

一般需要初始化一个xxx_platform_data结构体(这个结构体的声明应该让驱动文件可视,probe中才知道去读某个platformdata.yyy),并在i2c_board_info结构体中用.platform_data指向它,然后这个i2c_board_info将在板级文件中被注册(作为函数i2c_register_board_info()的参数)。而这个.platform_data很有可能在驱动的probe函数中调用到,例如:

static struct msg2133_ts_platform_data msg2133_platformdata= {

.irq = 0,

.reset = GPIO_TP_RESET,

}

static struct i2c_board_info i2c_info_msg2133_dpt = {

I2C_BOARD_INFO("msg2133", 0x27),

.platform_data = &msg2133_platformdata,

}

i2c_info_msg2133_dpt.platform_data->irq = gpio_to_irq(GPIO_TP_INT)//结构体初始化的时候只能以常量赋值,因为此处需要做GPIO到irq的映射,所以要在此处赋值。

i2c_register_board_info(MSM_GSBI1_QUP_I2C_BUS_ID, &i2c_info_msg2133_dpt, 1)

在驱动的probe中:pdata =client->dev.platform_data

...... = pdata.yyy......//(msg2133_ts_platform_data在该文件中可见)


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11393335.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存