etmem内存分级扩展

    etmem内存分级扩展技术,通过DRAM+内存压缩/高性能存储新介质形成多级内存存储,对内存数据进行分级,将分级后的内存冷数据从内存介质迁移到高性能存储介质中,达到内存容量扩展的目的,从而实现内存成本下降。(当前暂时还没有对非易失内存介质的支持)

    etmem客户端通过socket通信机制与服务端进行交互,下发创建/删除工程、启动/停止工程、查询工程的命令,服务端通过客户端下发的配置文件,读取project管理配置信息,以及engine配置信息,并执行客户端下发的操作。启动工程之后,服务端会对业务进程进行扫描,并根据扫描统计结果以及淘汰策略,对页面进行分级淘汰,实现节省内存的目标。

    1. 下载etmem源码

    etmem的编译和运行依赖于libboundscheck组件。

    1. 编译
      1. # mkdir build
      2. # cd build
      3. # cmake ..
      4. # make

    使用方法

    通过运行etmemd二进制运行服务端进程,例如:

    1. # etmemd -l 0 -s etmemd_socket

    帮助信息

    1. options
    2. -l|--log-level <log-level> Log level
    3. -s|--socket <sockect name> Socket name to listen to
    4. -h|--help Show this message

    命令行参数说明

    在运行etmem进程之前,需要管理员预先规划哪些进程需要做内存扩展,将进程信息配置到etmem配置文件中,并配置内存扫描的周期、扫描次数、内存冷热阈值等信息。

    配置文件的示例文件在源码包中,放置在源码根目录的conf/example_conf.yaml,建议在使用时放置在/etc/etmem/目录下,示例内容为:

    配置文件各字段说明:

    置项 配置项含义 是否必须 是否有参数 参数范围 示例说明
    options project公用配置段起始标识 NA 每个配置文件有且仅有一个此字段,并且文件以此字段开始
    loop 内存扫描的循环次数 1~120 loop:3 //扫描3次
    interval 每次内存扫描的时间间隔 1~1200 interval:5 //每次扫描之间间隔5s
    sleep 每个内存扫描+操作的大周期之间时间间隔 1~1200 sleep:10 //每次大周期之间间隔10s
    policies project中各task任务配置段起始标识 NA 一个project中可以配置多个task,每个task以policies:开头
    type 目标进程识别的方式 pid/name pid代表通过进程号识别,name代表通过进程名称识别
    value 目标进程识别的具体字段 实际的进程号/进程名称 与type字段配合使用,指定目标进程的进程号或进程名称,由使用者保证配置的正确及唯一性
    max_threads etmemd内部线程池最大线程数,每个线程处理一个进程/子进程的内存扫描+操作任务 1~2 * core数 + 1,默认为1 对外部无表象,控制etmemd服务端内部处理线程个数,当目标进程有多个子进程时,配置越大,并发执行的个数也多,但占用资源也越多
    engine 扫描引擎类型 slide 声明使用slide引擎进行冷热内存识别
    param 扫描引擎私有参数配置起始标识 NA 引擎私有参数配置段以此标识起始,每个task对应一种引擎,每个引擎对应一个param及其字段
    T slide引擎的水线配置 1~3 * loop 水线阈值,大于等于此值的内存会被识别为热内存,反之为冷内存

    场景描述

    2)管理员查询已有的etmem工程

    3)管理员删除已有的etmem工程(删除工程前,会自动先停止该工程中的所有任务)

    使用方法

    通过etmem二进制执行工程创建/删除/查询操作,前提是服务端已经成功运行,并且配置文件(e.g. /etc/etmem/example_conf.yaml)内容正确。

    添加工程:

    1. # etmem project add -n test -f /etc/etmem/example_conf.yaml -s etmemd_socket

    删除工程:

    1. # etmem project del -n test -s etmemd_socket

    查询工程:

    1. # etmem project show -s etmemd_socket

    打印帮助:

    帮助信息

    1. etmem project add [options]
    2. etmem project del [options]
    3. etmem project show
    4. etmem project help
    5. -f|--file <conf_file> Add configuration file
    6. -n|--name <proj_name> Add project name
    7. -s|--sock <sock_name> Socket name to connect
    8. Notes:
    9. 1. Project name and socket name must be given when execute add or del option.
    10. 3. Socket name must be given when execute show option.

    命令行参数说明

    add命令:

    参数 参数含义 是否必须 是否有参数 示例说明
    -n或—name 指定project名称 project名称,与配置文件一一对应
    -s或—socket 与etmemd服务端通信的socket名称,需要与etmemd启动时指定的保持一致 必须配置,在有多个etmemd时,由管理员选择与哪个etmemd通信

    show命令:

    场景描述

    在已经通过etmem project add添加工程之后,在还未调用etmem project del删除工程之前,可以对etmem的工程进行启动和停止。

    1)管理员启动已添加的工程

    2)管理员停止已启动的工程

    在管理员调用project del删除工程时,如果工程已经启动,则会自动停止。

    使用方法

    通过etmem二进制执行任务启动/停止操作,前提是服务端已经成功运行,配置文件(e.g. /etc/etmem/example_conf.yaml)内容正确,且etmem工程已经创建。

    启动工程

    1. # etmem migrate start -n test -s etmemd_socket

    停止工程

    1. # etmem migrate stop -n test -s etmemd_socket

    帮助信息

    1. Usage:
    2. etmem migrate start [options]
    3. etmem migrate stop [options]
    4. etmem migrate help
    5. Options:
    6. -n|--name <proj_name> Add project name
    7. -s|--sock <sock_name> Socket name to connect

    命令行参数说明

    参数 参数含义 是否必须 是否有参数 示例说明
    -n或—name 指定project名称 project名称,与配置文件一一对应
    -s或—socket 与etmemd服务端通信的socket名称,需要与etmemd启动时指定的保持一致 必须配置,在有多个etmemd时,由管理员选择与哪个etmemd通信