diff --git "a/docs/zh/docs/NVWA/\344\275\277\347\224\250\346\226\271\346\263\225.md" "b/docs/zh/docs/NVWA/\344\275\277\347\224\250\346\226\271\346\263\225.md" index 376249b51c1ed87906a60e3c8973bca4ba67db4a..f763e022b92abf48c665936c52c4bba2e6f8d0b7 100644 --- "a/docs/zh/docs/NVWA/\344\275\277\347\224\250\346\226\271\346\263\225.md" +++ "b/docs/zh/docs/NVWA/\344\275\277\347\224\250\346\226\271\346\263\225.md" @@ -1,39 +1,12 @@ -- [NVWA架构](#nvwa架构) -- [NVWA服务端用法](#nvwa服务端用法) -- [NVWA客户端用法](#nvwa客户端用法) +- [NVWA命令用法](#nvwa命令用法) - [NVWA的使用限制](#nvwa的使用限制) +- [NVWA加速特性说明及使用](#nvwa加速特性说明及使用) - [NVWA产生的日志信息](#nvwa产生的日志信息) - -## NVWA架构 - -NVWA分为客户端和服务端,通过端口进行通信和调用。实现上,客户端和服务端被编入一个二进制文件。用户需要通过systemd拉起NVWA服务进程,再通过nvwa程序发送命令,执行相应的流程。 - -## NVWA服务端用法 - -服务端支持以下用法: - -+ nvwa --help - - 打印帮助信息,打印的信息如下: - ``` - Usage of nvwa: - -ip string - specify server ip (default "localhost") - -mode int - set this value to 1 to start a server - -port string - specify server port (default "3232") - ``` - -ip和mode用于配置监听的网络端口,*当前客户端和服务端之间的通信并未加密*,因此仅适用于本地通信。 - -当前支持的模式有两种,mode指明为1,则只启动端口监听,等待命令; mode指明为2,则会受先执行现场的恢复,再启动端口监听,等待命令。 - -## NVWA客户端用法 +## NVWA命令用法 + nvwa help @@ -49,9 +22,7 @@ ip和mode用于配置监听的网络端口,*当前客户端和服务端之间 0.1 COMMANDS: - check check kexec and criu version update specify kernel version for nvwa to update - restore restore service init init nvwa running environment help, h Shows a list of commands or help for one command @@ -60,14 +31,6 @@ ip和mode用于配置监听的网络端口,*当前客户端和服务端之间 --version, -v print the version (default: false) ``` -+ nvwa check - - 检查当前环境是否符合nvwa的运行条件 - -+ nvwa restore - - 恢复之前保存的服务现场环境,该命令主要用于systemd通过nvwa恢复现场,用户一般使用中不涉及 - + nvwa update 热升级到内核某一版本,nvwa会去/boot目录下寻找内核镜像和ramfs,kernel的命名格式需为vmlinuz-, rootfs命名格式需为initramfs-.img @@ -76,7 +39,7 @@ ip和mode用于配置监听的网络端口,*当前客户端和服务端之间 + nvwa init - 清除nvwa产生的现场信息以及对systemd的配置修改 + 清除nvwa产生的现场信息以及对systemd的配置修改,用于nvwa执行前或者执行失败后,对现场进行清理 ## NVWA的使用限制 @@ -99,25 +62,40 @@ ip和mode用于配置监听的网络端口,*当前客户端和服务端之间 WantedBy=multi-user.target ``` -2. cmdline中需包含以下参数: +2. 使用加速特性需要修改cmdline以及分配合适的内存,参见[此处](#nvwa加速特性说明及使用) - ``` - quickkexec=128M - ``` +3. NVWA运行过程中需要关闭SELINUX - openEuler21.03的cmdline配置文件位于/boot/efi/EFI/openEuler/grub.cfg + 理论上,仅需要在执行nvwa update之后和系统重启nvwa恢复现场这段时间前需要关闭。稳妥起见,建议全程关闭SELINUX。 -## NVWA产生的日志信息 +## NVWA加速特性说明及使用 -nvwa产生的日志分为三部分: +1. cpu park(加速内核重启过程) -+ 服务端产生的日志 + cpu park,是在使用kexec过程,使cpu进入一种忙等的状态,更快的响应主核发送的中断请求,减少状态的变化。 - 通过service nvwa status查看 + 使用cpu park,需要在cmdline中加入"cpuparkmem=0x80000000",其中0x80000000是一段未被其他程序使用的内存起始地址,cpuparkmem将占用从该地址开始,size为1M左右的内存空间。 + +2. quick kexec(加速内核启动过程) + + quick kexec,是对kexec加载镜像过程中的一种加速。 + + 使用quick kexec,需要在配置文件中使能相关选项,更多信息参考<<安装与部署>>(配置介绍) + +3. pin_memory(加速现场保存恢复过程) -+ 客户端产生的日志 + pin memory,是对criu进行现场保存恢复过程中的一种加速。 - 直接输出到当前窗口 + 使用pin memory,需要在配置文件中使能相关选项,更多信息参考<<安装与部署>>(配置介绍) + + +## NVWA产生的日志信息 + +nvwa产生的日志分为两部分: + ++ 运行过程产生的日志 + + 通过service nvwa status查看 + 保留现场过程中产生的日志 diff --git "a/docs/zh/docs/NVWA/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" "b/docs/zh/docs/NVWA/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" index 231894d2278670d698e9d88c918839d9b1814f53..c7ebbe0023ef5ca44e746021651742770cc1911f 100644 --- "a/docs/zh/docs/NVWA/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" +++ "b/docs/zh/docs/NVWA/\345\256\211\350\243\205\344\270\216\351\203\250\347\275\262.md" @@ -24,13 +24,13 @@ ## 环境准备 -- 安装openEuler系统,安装方法参考 《openEuler 21.03 安装指南》。 +- 安装openEuler系统,安装方法参考 《openEuler 21.03 安装指南》 -- 安装NVWA需要使用root权限。 +- 安装NVWA需要使用root权限 ## 安装NVWA -本章介绍NVWA的安装方法。 +本章介绍NVWA的安装方法 安装NVWA的操作步骤如下: @@ -69,7 +69,7 @@ # yum install nvwa -y ``` -5. 验证是否安装成功。命令和回显如下表示安装成功。 +5. 验证是否安装成功。命令和回显如下表示安装成功 ``` # rpm -qa | grep nvwa @@ -79,7 +79,7 @@ ## 部署NVWA -本章介绍NVWA的配置部署。 +本章介绍NVWA的配置部署: ### 配置介绍 @@ -90,24 +90,35 @@ NVWA的配置文件位于/etc/nvwa,配置文件包括: + pids - pids用于指明nvwa热升级过程中需要保留和恢复的进程,此处的进程应该使用运行时二进制的文件名。需要注意的是,如果系统中存在多个重命名的进程,NVWA将会保存和恢复pid最小的进程。 + pids用于指明nvwa热升级过程中需要保留和恢复的进程,此处的进程通过进程号(pid)进行标识,需要注意的是,nvwa管理的进程在nvwa服务启动后,会被自动恢复。 + services - services用于指明nvwa热升级过程中需要保留和恢复的服务。与pids的区别在于,NVWA可以直接保存和恢复进程的状态,对于服务,NVWA则需要依赖systemd进行相关操作。此处的服务名称,应该使用systemd中使用的服务名称。 + services用于指明nvwa热升级过程中需要保留和恢复的服务。与pids的区别在于,NVWA可以直接保存和恢复进程的状态,对于服务,NVWA则需要依赖systemd进行相关操作。此处的服务名称,应该使用systemd中使用的服务名称。需要注意的是,对于nvwa管理的服务,是否要在nvwa启动时自动恢复,取决于systemd中有没有使能该服务,且当前支持的服务类型只有notify和oneshot。 + restore_net - restore_net用于指明是否需要NVWA保存和恢复网络配置,如果网络配置有误,有可能导致恢复后网络不可用,因此默认关闭。 + restore_net用于指明是否需要NVWA保存和恢复网络配置,如果网络配置有误,有可能导致恢复后网络不可用,默认关闭。 + + + enable_quick_kexec + + enable_quick_kexec用于指明是否需要使能quick kexec特性,quick kexec是nvwa社区推出的,加速内核重启过程的一个特性。使用该特性,需要在cmdline中,加入"quickkexec=128M"。128指分配给quick kexec特性的内存大小,该内存将用于在升级过程中加载kernel和initramfs,因此大小需要大于升级过程中涉及到的kernel,initramfs大小之和。该特性默认关闭。 + + + enable_pin_memory + + enable_pin_memory用于指明是否需要使能pin memory特性,pin memory是nvwa社区推出的,加速进程保存恢复过程的一个特性。使用该特性,需要在cmdline中,加入"max_pin_pid_num=10 redirect_space_size=2M pinmemory=200M@0x640000000"。 + + 其中,max_pin_pid_num代表支持pin memory恢复的最大进程数目,redirect_space_size代表pin memory过程中重定向物理页所需要的预留内存空间,建议配置为pin memory总预留内存的1/100,pinmemory指明这段内存的起点和大小。从0x640000000开始的200M空间,是pin memory使用的全部内存空间,这段空间不应该被其他程序使用。 - nvwa-restore.yaml的配置示例 ``` pids: - - flock_test + - 14109 services: - redis - - sshd restore_net: false +enable_quick_kexec: true +enable_pin_memory: true ``` - nvwa-server.yaml @@ -137,7 +148,7 @@ restore_net: false - nvwa-server.yaml的配置示例 ``` -criu_dir: /etc/nvwa/running/ +criu_dir: /var/nvwa/running/ criu_exe: /usr/sbin/criu kexec_exe: /usr/sbin/kexec systemd_etc: /etc/systemd/system/ @@ -150,6 +161,10 @@ NVWA的运行依赖配置文件,配置文件修改后应该重新运行NVWA程 安装成功后,可以通过systemd的相关命令来操作NVWA ++ 启动nvwa + + systemctl enable nvwa + + 启动nvwa systemctl start nvwa diff --git "a/docs/zh/docs/NVWA/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" "b/docs/zh/docs/NVWA/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" index aa47a4307c24879886bf626383db6bb2cd2ca8df..0c137c0869f3763fafea05a403608797b4eca8d1 100644 --- "a/docs/zh/docs/NVWA/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" +++ "b/docs/zh/docs/NVWA/\345\270\270\350\247\201\351\227\256\351\242\230\344\270\216\350\247\243\345\206\263\346\226\271\346\263\225.md" @@ -1,19 +1,21 @@ -# 常见问题与解决方法 +1. 执行nvwa update后未升级 -## **问题1:执行nvwa update后未升级** + 原因:保留现场或者内核替换过程中出现错误。 -原因:保留现场或者内核替换过程中出现错误 + 解决方法:查看日志,找出错误原因。 -解决方法:查看日志,找出错误原因 +2. 开启加速特性后,nvwa执行命令失败 -## **问题2:热升级后,相关现场未被恢复** + 原因:nvwa提供了诸多加速特性,包括quick kexec,pin memory,cpu park等等。这些特性都涉及到cmdline的配置和内存的分配,在选取内存时,通过cat /proc/iomemory确保选取的内存没有与其他程序冲突。必要时,通过dmesg查看使能特性后是否存在错误日志。 -原因:首先检查nvwa服务是否运行,运行情况下,可能存在两种情况,一种是服务恢复失败,一种是进程恢复失败。 +3. 热升级后,相关现场未被恢复 -解决方法:通过service nvwa status查看nvwa的日志,如果是服务启动失败,通过systemd查看对应服务的日志。进一步的日志,去criu_dir指定的路径对应命名的进程/服务文件夹中。其中dump.log为保存现场产生的日志,restore.log为恢复现场产生的。 + 原因:首先检查nvwa服务是否运行,运行情况下,可能存在两种情况,一种是服务恢复失败,一种是进程恢复失败。 -## **问题3:恢复失败,日志显示Can't fork for 948: File exists ** + 解决方法:通过service nvwa status查看nvwa的日志,如果是服务启动失败,首先确认是否使能了该服务,再通过systemd查看对应服务的日志。进一步的日志,去criu_dir指定的路径对应命名的进程/服务文件夹中。其中dump.log为保存现场产生的日志,restore.log为恢复现场产生的。 -原因:NVWA在恢复程序过程中,发现程序的pid已经被占用 +4. 恢复失败,日志显示Can't fork for 948: File exists -解决方法:当前内核没有提供保留pid的机制,相关策略正在开发,预计会在将来的内核版本中解决这一限制,当前仅能手动重启相关进程。 + 原因:NVWA在恢复程序过程中,发现程序的pid已经被占用。 + + 解决方法:当前内核没有提供保留pid的机制,相关策略正在开发,预计会在将来的内核版本中解决这一限制,当前仅能手动重启相关进程。