linux zram cpu开销,在cgroup下进行zram性能测试

注意到zram有几个月时间了,据资料显示,最早使用内存压缩作为swap的,应该是苹果,从10.9开始支持,而Linux,有几种内存压缩的方法,分别是:

zram,CentOS 6支持,但默认没有开启,Android方面,华为P8也支持并默认启用

zswap

zcache

网上鲜有性能测试的文章,这也是本人一块心病,上周日抽空测试了下,本文测试的是zram

测试目的

对比磁盘swap设备和内存swap设备的性能差异

学习cgroup的使用

学习ArchLinux

学习systemd

使用CubieTruck进行装逼

测试难点

如何让程序产生swap操作

测试环境

硬件

CubieTruck(多谢老婆的圣诞礼物)

A20,双核

2G内存

64G的tf卡

系统环境

ArchLinuxARM-armv7-latest

内核版本:4.3.0-2-ARCH

系统装在一张64G的tf卡上,用以下代码测试得到读写速度如下,比较差,会影响磁盘swap设备的数据

sudo dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc

1024+0 records in

1024+0 records out

1073741824 bytes (1.1 GB) copied, 87.9956 s, 12.2 MB/s

测试方法

mbw,这个不详细说了,可以参考Linux内存带宽的一些测试笔记,如果系统是2G内存,则复制1G的数据,会导致程序使用swap

cgroup限制内存大小 + 网络搜索的一个程序,本文使用这个进行测试,在分配内存超过cgroup限制时,系统会把数据交换到swap

内存分配代码

代码来自:cgroup–内存 限制内存测试,做了一点点修改,加入了开始和结束时间,请原谅我不懂C

源码

#include

#include

#define MEGABYTE (1024*1024)

int main(int argc, char *argv[])

{

system("date");

void *myblock = NULL;

int count = 0;

int i,n=300; /// 分配300M

while (n--)

{

myblock = (void *) malloc(MEGABYTE);

if (!myblock)

break;

for(i = 0;i < MEGABYTE / 4;i ++) /// 由于操作系统的某些机制,申请的内存只有在用到的时候才

{ /// 真正申请内存,所以这里需要写内存操作。

((unsigned int*)myblock)[i] = i;

}

count++;

printf("%d \n",count);

}

system("date");

exit(0);

}

编译

gcc malloc_zram.c -o malloc_zram

cgroup设置

安装服务运行方式软件

如果单纯用这个,需要修改cgroup.config,比较麻烦一点

sudo pacman -Sy cgmanager

安装命令行方式软件

安装libcgroup,提供了cgcreate、cgexec等命令,针对单次执行,测试会比较方便

sudo pacman -Sy --noconfirm byacc flex

cd /dist/dist

wget http://downloads.sourceforge.net/libcg/libcgroup-0.41.tar.bz2

cd ../src

tar xf ../dist/libcgroup-0.41.tar.bz2

cd libcgroup-0.41

./configure

make

sudo make install

命令行设置cgroup

# 新增一个mysql的内存组

sudo cgcreate -g memory:mysql

# 切换到root,设置内存限制大小为50M

sudo su -

echo 50M > memory.limit_in_bytes

设置磁盘swap

sudo fallocate -l 512M /swapfile

sudo chmod 600 /swapfile

sudo mkswap /swapfile

sudo swapon /swapfile

设置zram

sudo su -

modprobe zram

echo lz4 > /sys/block/zram0/comp_algorithm

echo 500M > /sys/block/zram0/disksize

mkswap --label zram0 /dev/zram0

swapon --priority 100 /dev/zram0

测试指令和结果

先测试磁盘swap,然后关闭磁盘swap,启用zram,再测试zram,忙活了一天,本来是要测试MySQL的,后来发现设置后,MySQL的内存并没有受限制,所以转战简单的内存测试程序,时间限制,只测试了一次

# 从源码看出,是分配300M内存

# 使用memory:mysql这个内存组

cgexec -g memory:mysql /dist/src/malloc_mem

测试的时候,可以用top或者htop观察swap的使用情况

可以看到swap是每50M,50M地增加

磁盘swap的数据

共耗时80s

# 开始

Sun Dec 13 17:06:16 CST 2015

# 结束

Sun Dec 13 17:07:36 CST 2015

zram的数据

共耗时8s

# 开始

Sun Dec 13 17:12:28 CST 2015

# 结束

Sun Dec 13 17:12:36 CST 2015

结论

性能提升了90%

本测试存在问题

未测试zram下MySQL的性能,MySQL测试感觉更接地气

TF卡比较影响性能,要在服务器上测试

只测了一次数据,没有多次测试进行取平均值

未监控CPU的变化

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值