diff --git a/README.en.md b/README.en.md deleted file mode 100644 index c167b74..0000000 --- a/README.en.md +++ /dev/null @@ -1,36 +0,0 @@ -# etmem - -#### Description -etmem, the memory vertical expansion technology, uses DRAM and high-performance storage new media to form multi-level memory storage. By grading the stored data, etmem migrates the classified cold storage data from memory to the high-performance storage medium, so as to achieve the purpose of memory capacity expansion and memory cost reduction. - -#### Software Architecture -Software architecture description - -#### Installation - -1. xxxx -2. xxxx -3. xxxx - -#### Instructions - -1. xxxx -2. xxxx -3. xxxx - -#### Contribution - -1. Fork the repository -2. Create Feat_xxx branch -3. Commit your code -4. Create Pull Request - - -#### Gitee Feature - -1. You can use Readme\_XXX.md to support different languages, such as Readme\_en.md, Readme\_zh.md -2. Gitee blog [blog.gitee.com](https://blog.gitee.com) -3. Explore open source project [https://gitee.com/explore](https://gitee.com/explore) -4. The most valuable open source project [GVP](https://gitee.com/gvp) -5. The manual of Gitee [https://gitee.com/help](https://gitee.com/help) -6. The most popular members [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) diff --git a/README.md b/README.md index 8d41150..54e28f9 100644 --- a/README.md +++ b/README.md @@ -1,37 +1,216 @@ # etmem -#### 介绍 -etmem, the memory vertical expansion technology, uses DRAM and high-performance storage new media to form multi-level memory storage. By grading the stored data, etmem migrates the classified cold storage data from memory to the high-performance storage medium, so as to achieve the purpose of memory capacity expansion and memory cost reduction. +## 介绍 -#### 软件架构 -软件架构说明 +随着CPU算力的发展,尤其是ARM核成本的降低,内存成本和内存容量成为约束业务成本和性能的核心痛点,因此如何节省内存成本,如何扩大内存容量成为存储迫切要解决的问题。 +etmem内存垂直扩展技术,通过DRAM+内存压缩/高性能存储新介质形成多级内存存储,对内存数据进行分级,将分级后的内存冷数据从内存介质迁移到高性能存储介质中,达到内存容量扩展的目的,从而实现内存成本下降。 -#### 安装教程 +## 安装教程 -1. xxxx -2. xxxx -3. xxxx +1. 下载etmem源码 -#### 使用说明 + $ git clone https://gitee.com/src-openeuler/etmem.git -1. xxxx -2. xxxx -3. xxxx +2. 编译安装 -#### 参与贡献 + $ cd etmem -1. Fork 本仓库 -2. 新建 Feat_xxx 分支 + $ mkdir build + + $ cd build + + $ cmake .. + + $ make + + $ make install + +## 使用说明 + +### 启动etmemd进程 + +#### 使用方法 + +通过运行etmemd二进制运行服务端进程,例如: + +$ etmemd -l 0 -s etmemd_socket + +#### 帮助信息 + +options: + +-l|--log-level Log level +-s|--socket Socket name to listen to +-h|--help Show this message + +#### 命令行参数说明 + +| 参数 | 参数含义 | 是否必须 | 是否有参数 | 参数范围 | 示例说明 | +| --------------- | ---------------------------------- | -------- | ---------- | --------------------- | ------------------------------------------------------------ | +| -l或--log-level | etmemd日志级别 | 否 | 是 | 0~3 | 0:debug级别 1:info级别 2:warning级别 3:error级别 只有大于等于配置的级别才会打印到/var/log/message文件中 | +| -s或--socket | etmemd监听的名称,用于与客户端交互 | 是 | 是 | 107个字符之内的字符串 | 指定服务端监听的名称 | +| -h或--help | 帮助信息 | 否 | 否 | NA | 执行时带有此参数会打印后退出 | + +### etmem配置文件 + +在运行etmem进程之前,需要管理员预先规划哪些进程需要做内存扩展,将进程信息配置到etmem配置文件中,并配置内存扫描的周期、扫描次数、内存冷热阈值等信息。 + +配置文件的示例文件在安装etmem软件包后,放置在/etc/etmem/example_conf.yaml,示例内容为: + +``` +options: + loop : 3 + interval : 1 + sleep: 2 + policies: + type : pid/name + value : 123456/mysql + max_threads: 3 + engine : slide + param: + T: 3 +``` + +配置文件各字段说明: + +| **置项** | **配置项含义** | **是否必须** | **是否有参数** | **参数范围** | **示例说明** | +| ----------- | ------------------------------------------------------------ | ------------ | -------------- | ------------------------- | ------------------------------------------------------------ | +| 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 | 水线阈值,大于等于此值的内存会被识别为热内存,反之为冷内存 | + +### etmem工程创建/删除/查询 + +#### 场景描述 + +1)管理员创建etmem工程(一个工程可包含多个etmem任务) + +2)管理员查询已有的etmem工程 + +3)管理员删除已有的etmem工程(删除工程前,会自动先停止该工程中的所有任务) + +#### 使用方法 + +通过etmem二进制执行工程创建/删除/查询操作,前提是服务端已经成功运行,并且配置文件/etc/etmem/example_conf.yaml内容正确。 + +添加工程: + +etmem project add -n test -f /etc/etmem/example_conf.yaml -s etmemd_socket + +删除工程: + +etmem project del -n test -s etmemd_socket + +查询工程: + +etmem project show -s etmemd_socket + +打印帮助: + +etmem project help + +#### 帮助信息 + +Usage: + etmem project add [options] + etmem project del [options] + etmem project show + etmem project help + + Options: + -f|--file Add configuration file + -n|--name Add project name + -s|--sock Socket name to connect + + Notes: + \1. Project name and socket name must be given when execute add or del option. + \2. Configuration file must be given when execute add option. + \3. Socket name must be given when execute show option. + +#### 命令行参数说明 + +add命令: + +| 参数 | 参数含义 | 是否必须 | 是否有参数 | 示例说明 | +| ------------ | ------------------------------------------------------------ | -------- | ---------- | -------------------------------------------------------- | +| -n或--name | 指定project名称 | 是 | 是 | project名称,与配置文件一一对应 | +| -f或--file | 指定project的配置文件 | 是 | 是 | 需要指定路径名称 | +| -s或--socket | 与etmemd服务端通信的socket名称,需要与etmemd启动时指定的保持一致 | 是 | 是 | 必须配置,在有多个etmemd时,由管理员选择与哪个etmemd通信 | + +del命令: + +| 参数 | 参数含义 | 是否必须 | 是否有参数 | 示例说明 | +| ------------ | ------------------------------------------------------------ | -------- | ---------- | -------------------------------------------------------- | +| -n或--name | 指定project名称 | 是 | 是 | project名称,与配置文件一一对应 | +| -s或--socket | 与etmemd服务端通信的socket名称,需要与etmemd启动时指定的保持一致 | 是 | 是 | 必须配置,在有多个etmemd时,由管理员选择与哪个etmemd通信 | + +show命令: + +| 参数 | 参数含义 | 是否必须 | 是否有参数 | 示例说明 | +| ------------ | ------------------------------------------------------------ | -------- | ---------- | -------------------------------------------------------- | +| -s或--socket | 与etmemd服务端通信的socket名称,需要与etmemd启动时指定的保持一致 | 是 | 是 | 必须配置,在有多个etmemd时,由管理员选择与哪个etmemd通信 | + +### etmem任务启动/停止 + +#### 场景描述 + +在已经通过etmem project add添加工程之后,在还未调用etmem project del删除工程之前,可以对etmem的工程进行启动和停止。 + +1)管理员启动已添加的工程 + +2)管理员停止已启动的工程 + +在管理员调用project del删除工程时,如果工程已经启动,则会自动停止。 + +#### 使用方法 + +通过etmem二进制执行任务启动/停止操作,前提是服务端已经成功运行,配置文件/etc/etmem/example_conf.yaml内容正确,且etmem工程已经创建。 + +启动工程 + +etmem migrate start -n test -s etmemd_socket + +停止工程 + +etmem migrate stop -n test -s etmemd_socket + +打印帮助 + +etmem migrate help + +#### 帮助信息 + +Usage: + etmem migrate start [options] + etmem migrate stop [options] + etmem migrate help + + Options: + -n|--name Add project name + -s|--sock Socket name to connect + + Notes: + Project name and socket name must be given when execute start or stop option. + +#### 命令行参数说明 + +| 参数 | 参数含义 | 是否必须 | 是否有参数 | 示例说明 | +| ------------ | ------------------------------------------------------------ | -------- | ---------- | -------------------------------------------------------- | +| -n或--name | 指定project名称 | 是 | 是 | project名称,与配置文件一一对应 | +| -s或--socket | 与etmemd服务端通信的socket名称,需要与etmemd启动时指定的保持一致 | 是 | 是 | 必须配置,在有多个etmemd时,由管理员选择与哪个etmemd通信 | + +## 参与贡献 + +1. Fork本仓库 +2. 新建个人分支 3. 提交代码 -4. 新建 Pull Request - - -#### 特技 - -1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md -2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) -3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 -4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 -5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) -6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) +4. 新建Pull Request \ No newline at end of file diff --git a/etmem-1.0.tar.gz b/etmem-1.0.tar.gz new file mode 100644 index 0000000..50096c4 Binary files /dev/null and b/etmem-1.0.tar.gz differ diff --git a/etmem.spec b/etmem.spec new file mode 100644 index 0000000..dd9e650 --- /dev/null +++ b/etmem.spec @@ -0,0 +1,48 @@ +%global debug_package %{nil} + +Name: etmem +Version: 1.0 +Release: 1 +Summary: etmem +License: Mulan PSL v2 +Source0: etmem-%{version}.tar.gz + +#Dependency +BuildRequires: cmake +BuildRequires: libboundscheck +Requires: libboundscheck + +%description +etmem module + +#Build sections +%prep +%autosetup -n etmem-%{version} -p1 + +%build +mkdir -p build +cd build +cmake .. +make + +%install +mkdir -p $RPM_BUILD_ROOT%{_bindir} +install -d $RPM_BUILD_ROOT%{_sysconfdir}/etmem/ + +install -m 0700 build/bin/etmem $RPM_BUILD_ROOT%{_bindir} +install -m 0700 build/bin/etmemd $RPM_BUILD_ROOT%{_bindir} +install -m 0600 conf/example_conf.yaml $RPM_BUILD_ROOT%{_sysconfdir}/etmem/ + +%files +%defattr(-,root,root,0750) +%{_bindir}/etmem +%{_bindir}/etmemd +%dir %{_sysconfdir}/etmem +%{_sysconfdir}/etmem/example_conf.yaml + +%post -p /sbin/ldconfig +%postun -p /sbin/ldconfig + +%changelog +* Thu Mar 18 2021 louhongxiang +- Package init