From d9003e3e5b1f7ee1b63f2f49c67b037b5f58bc66 Mon Sep 17 00:00:00 2001
From: Yang Xiaohe <yangxiaohe2@huawei.com>
Date: Wed, 23 Sep 2020 11:56:43 +0800
Subject: [PATCH] StratoVirt: update docs

1. Delete README.en.md
2. Refactor README.md
3. Update docs/
4. Refactor log-level env to "STRATOVIRT_LOG_LEVEL"

Signed-off-by: Yang Xiaohe <yangxiaohe2@huawei.com>
---
 README.md                                     | 45 +++++----
 ...oVirt-Guidebook.md => config_guidebook.md} | 99 ++++++++++---------
 docs/default.json                             |  4 +-
 docs/design.md                                | 37 ++++---
 docs/mk_initrd.md                             |  2 +-
 docs/quickstart.md                            | 59 ++++++-----
 util/src/logger.rs                            |  2 +-
 7 files changed, 127 insertions(+), 121 deletions(-)
 rename docs/{StratoVirt-Guidebook.md => config_guidebook.md} (76%)

diff --git a/README.md b/README.md
index 0810b3f..7ac2445 100644
--- a/README.md
+++ b/README.md
@@ -1,34 +1,32 @@
 # StratoVirt
-
 StratoVirt is an opensource VMM(Virtual Machine Manager) which aims to perform
-next generation virtualization.StratoVirt is based on Rust programming
-language.StratoVirt is lightweight, efficient and safe.It also has features like
-Full Sence Support and Modules Flexible Splitting.
+next generation virtualization.
 
-StratoVirt is based on Rust language, which ensures the high performance in 
-safety and efficiency.
+Based on Rust programming language, StratoVirt is lightweight, efficient and safe.
+StratoVirt reduces memory resource consumption and improves VM startup speed while
+retains isolation capability and security capability of traditional virtualization.
 
-StratoVirt supports live-time remote control with qmp commands.
+StratoVirt supports communicating with external systems using OCI compatible Interface, 
+and can be applied to microservices or serverless scenarios.
 
-In the future, StratoVirt would be capable of virtualizing normal machines
-with specific hardware emulators.
+StratoVirt reserves interface and design for importing more features, even standard virtualization.
 
 ## How to start
 
 ### Preparation
 Before building StratoVirt, make sure that Rust language and Cargo have already
-been installed, if not, you can install Rust and cargo from following links:
+been installed. If not, you can find installation guidance from the following link:
 
 https://www.rust-lang.org/tools/install
 
 ### Build StratoVirt
-To build StratoVirt, go to the project's directory and make use of Cargo:
+To build StratoVirt, clone the project and build it first:
 ```sh
-$ git clone https://gitee.com/src-openeuler/stratovirt.git
+$ git clone https://gitee.com/openeuler/stratovirt.git
 $ cd stratovirt
 $ cargo build --release
 ```
-Now you can find StratoVirt binary in `target/debug/stratovirt`
+Now you can find StratoVirt binary in `target/release/stratovirt`.
 
 ### Run a VM with StratoVirt
 To run StratoVirt quickly, requires
@@ -36,6 +34,7 @@ To run StratoVirt quickly, requires
 * An EXT4-format rootfs image
 
 ```shell
+# If the socket of api-channel exists, remove if first.
 $ ./target/release/stratovirt \
     -kernel /path/to/kernel \
     -append console=ttyS0 root=/dev/vda reboot=k panic=1 \
@@ -44,19 +43,25 @@ $ ./target/release/stratovirt \
     -serial stdio
 ```
 
-Running a VM with json configuration file is also supported,
-please refer to [quickstart guide](./docs/quickstart.md) for more details.
+The detailed guidance of making rootfs, compiling kernel and building StratoVirt can be found
+in [StratoVirt QuickStart](./docs/quickstart.md).
+
+StratoVirt supports much more features, the detailed guidance can be found in [Configuration Guidebook](docs/config_guidebook.md).
+
+## Design
+
+To get more details about StratoVirt's core architecture design, refer to [StratoVirt design](./docs/design.md).
 
 ## How to contribute
-We welcome new contributors! If you want to join us, please
-take a glance at the Rust formatting guidance first:
+We welcome new contributors! And we are happy to provide guidance and help for new contributors.
+StratoVirt follows Rust formatting conventions, which can be found at:
 
 https://github.com/rust-dev-tools/fmt-rfcs/tree/master/guide
+https://github.com/rust-lang/rust-clippy
 
-Use `cargo clippy` to check and improve your code, the installation guidance
-and usage is as below:
+You can get more information about StratoVirt at:
 
-https://github.com/rust-lang/rust-clippy
+https://gitee.com/openeuler/stratovirt/wikis
 
 ## Licensing
 StratoVirt is licensed under the Mulan PSL v2.
diff --git a/docs/StratoVirt-Guidebook.md b/docs/config_guidebook.md
similarity index 76%
rename from docs/StratoVirt-Guidebook.md
rename to docs/config_guidebook.md
index 5e94eb6..00641e8 100644
--- a/docs/StratoVirt-Guidebook.md
+++ b/docs/config_guidebook.md
@@ -10,10 +10,9 @@ StratoVirt supports json configuration file and cmdline arguments. If you set th
 
 StratoVirt supports to set the number of VCPUs(**nr_vcpus**).
 
-This allows you to set the maximum number of VCPUs that VM will support. The maximum supported
- value is 254 and the minimum value that makes sense is 1.
+This allows you to set the maximum number of VCPUs that VM will support. The maximum value is 254 and the minimum value that makes sense is 1.
 
-By default, after booted, VM will online all cpu you set.
+By default, after booted, VM will online all CPUs you set.
 
 ```shell
 # cmdline
@@ -31,11 +30,12 @@ By default, after booted, VM will online all cpu you set.
 
 ### 1.2 Memory Size
 
-StratoVirt supports to set the size of VM's memory.
+StratoVirt supports to set the size of VM's memory in cmdline.
 
 This allows you to set the size of memory that VM will support.
-If you use cmdline arguments to set it, you can give `M` or `G` as units (default units is `Kib`).
-For json configuration file, memory unit is not supported.
+You can choose `M` or `G` as unit (default unit is `Kib`).
+
+But unfortunately, in json configuration file, only `byte` are supported as unit.
 
 ```shell
 # cmdline
@@ -56,12 +56,12 @@ For json configuration file, memory unit is not supported.
 
 ### 1.3 Kernel and Kernel Parameters
 
-StratoVirt supports to launch (PE format) linux kernel 4.19 and can also set kernel
+StratoVirt supports to launch PE-format linux kernel 4.19 and can also set kernel
  parameters for VM.
 
-This allows you to give a path to linux kernel, the path can be absolute path or relative path.
+This allows you to give a path to linux kernel, the path can be either absolute path or relative path.
 
-And given kernel parameters will be actually interpreted by boot loader.
+And the given kernel parameters will be actually analyzed by boot loader.
 
 ``` shell
 # cmdline
@@ -81,20 +81,19 @@ And given kernel parameters will be actually interpreted by boot loader.
 
 ### 1.4 Initrd Configuration
 
-StratoVirt supports to launch VM by a initrd (boot loader initialized RAM disk).
+StratoVirt supports to launch VM by a initrd (boot loader initialized RAM disk) as well.
 
-This allows you to give a path to initrd image. This image will be loaded to ram by boot loader.
+If the path to initrd image is configured, it will be loaded to ram by boot loader.
 
-If you want to use initrd as rootfs, you can add `root=` and `rdinit=` in Kernel Parameters.
+If you want to use initrd as rootfs, `root=/dev/ram` and `rdinit=/bin/sh` must be added in Kernel Parameters.
 
 ```shell
 # cmdline
--initrd /Images/initrd
+-initrd /path/to/initrd
 
 # json
 {
     "boot-source": {
-        "boot_args": "console=ttyS0 reboot=k panic=1 pci=off tsc=reliable ipv6.disable=1 root=/dev/ram rdinit=/bin/sh",
         "initrd_fs_path": "/path/to/initrd",
         ...
     },
@@ -104,20 +103,19 @@ If you want to use initrd as rootfs, you can add `root=` and `rdinit=` in Kernel
 
 ## 2. Device Configuration
 
-StratoVirt supports to deploy one kind of legacy device and four kinds of virtio-mmio device.
+StratoVirt supports to deploy one kind of legacy device and four kinds of virtio-mmio devices.
 
-The max number of device is 16 in x86_64 platform and 32 in aarch64 platform.
+The max number of devices is 16 on x86_64 platform and 32 on aarch64 platform.
 
 ### 2.1 Virtio-blk
 
-Virtio block device is a virtual block device, instead of placing write and read requests with the
- actual device.
+Virtio block device is a virtual block device, which process read and write requests in virtio queue from guest.
 
-Five properties are supported for virtio block device you can set.
+Five properties are supported for virtio block device.
 
-* drive_id: unique device-id presented for StratoVirt
+* drive_id: unique device-id in StratoVirt
 * path_on_host: the path of block device in host
-* serial_num: serial number for virtio block (Optional)
+* serial_num: serial number of virtio block (Optional)
 * read_only: whether virtio block device is read_only or not
 * direct: open block device with `O_DIRECT` mode or not
 
@@ -146,11 +144,11 @@ If you want to boot VM with a virtio block device as rootfs, you should add `roo
 
 ### 2.2 Virtio-net
 
-Virtio-net is a virtual Ethernet card in VM. It can enable VM network capability.
+Virtio-net is a virtual Ethernet card in VM. It can enable the network capability of VM.
 
 Three properties are supported for virtio net device.
 
-* iface_id: unique device-id presented for StratoVirt
+* iface_id: unique device-id in StratoVirt
 * host_dev_name: name of tap device in host
 * mac: set mac address in VM (Optional)
 
@@ -171,7 +169,7 @@ Three properties are supported for virtio net device.
 }
 ```
 
-StratoVirt also supports vhost-net to get a higher-performance in network.
+StratoVirt also supports vhost-net to get a higher performance in network.
 
 It can be set by given `vhost` property.
 
@@ -199,7 +197,7 @@ It can be set by given `vhost` property.
 # In host
 $ brctl addbr qbr0
 $ ip tuntap add tap0 mode tap
-$ brctl addif qbr0
+$ brctl addif qbr0 tap0
 $ ifconfig qbr0 up; ifconfig tap0 up
 $ ifconfig qbr0 1.1.1.1
 
@@ -217,12 +215,12 @@ $ ping 1.1.1.1
 ### 2.3 Virtio-console
 
 Virtio console is a general-purpose serial device for data transfer between the guest and host.
- Character devices at /dev/hvc0 to /dev/hvc7 in guest will be created once setting it. In host,
- it will be presented as a UnixSocket.
+Character devices at /dev/hvc0 to /dev/hvc7 in guest will be created once setting it.
+In host, it will be presented as a UnixSocket.
 
 Two properties can be set for virtio console device.
 
-* console_id: unique device-id presented for StratoVirt
+* console_id: unique device-id in StratoVirt
 * socket_path: the path of virtio console socket in the host
 
 ```shell
@@ -243,7 +241,7 @@ Two properties can be set for virtio console device.
 
 ### 2.4 Virtio-vsock
 
-Virtio vsock is a host/guest communications device like virtio console, but higher performance.
+Virtio vsock is a host/guest communication device like virtio console, but it has higher performance.
 
 If you want use it, need:
 
@@ -254,7 +252,7 @@ And `modprobe vhost_vsock` in the host.
 
  Two properties can be set for virtio vsock device.
 
-* vsock_id: unique device-id presented for StratoVirt
+* vsock_id: unique device-id in StratoVirt
 * guest_cid: a unique Context-ID in host to each guest, it should satisfy `3<=guest_cid<u32:MAX`
 
 ```shell
@@ -285,13 +283,13 @@ $ nc-vsock guest_cid port_num
 
 ### 2.5 Serial
 
-Serial is a legacy device for VM, it is a communication interface for the guest to host.
+Serial is a legacy device for VM, it is a communication interface which bridges the guest and host.
 
 Commonly, we use serial as ttyS0 to output console message in StratoVirt.
 
-In StratoVirt, we can set *one* serial and can bind it with host's stdio or not.
+In StratoVirt, we can set *one* serial and decide whether to bind it with host's stdio or not.
 
-Only one argument for serial device:
+There is only one argument for serial device:
 
 * stdio: whether bind serial with stdio or not(optional)
 
@@ -319,7 +317,7 @@ StratoVirt controls VM's lifetime and external api interface with [QMP](https://
 
 When running StratoVirt, you must create api-channel in cmdline arguments as a management interface.
 
-StratoVirt supports UnixSocket type api-channel, you can set it by:
+StratoVirt supports UnixSocket-type api-channel, you can set it by:
 
 ```shell
 # cmdline
@@ -352,7 +350,7 @@ With QMP, you can control VM's lifecycle by command `stop`, `cont`, `quit` and c
 
 #### 3.3.1 Command `stop`
 
-Stop all guest VCPU execution.
+Stop all guest VCPUs execution.
 
 ```json
 <- {"execute":"stop"}
@@ -362,7 +360,7 @@ Stop all guest VCPU execution.
 
 #### 3.3.2 Command `cont`
 
-Resume all guest VCPU execution.
+Resume all guest VCPUs execution.
 
 ```json
 <- {"execute":"cont"}
@@ -400,7 +398,7 @@ Receive a file descriptor via SCM rights and assign it a name.
 
 ### 3.4 Device Hot-replace
 
-StratoVirt supports hot-replace some virtio-mmio device such as virtio-blk and virtio-net with QMP.
+StratoVirt supports hot-replacing virtio-blk and virtio-net devices with QMP.
 
 #### 3.4.1 Hot-replace Virtio-blk
 
@@ -413,10 +411,10 @@ StratoVirt supports hot-replace some virtio-mmio device such as virtio-blk and v
 
 **`node-name` in `blockdev-add` should be same as `id` in `device_add`.**
 
-For `addr`, it start at `0x0` mapping in guest with `vda` in x86_64 platform, and start at `0x1`
- mapping in guest with `vdb` in aarch64 platform.
+For `addr`, it start at `0x0` mapping in guest with `vda` on x86_64 platform, and start at `0x1`
+ mapping in guest with `vdb` on aarch64 platform.
 
-You can also remove the replaced block device by:
+You can also remove the replaceable block device by:
 
 ```json
 <- {"execute": "device_del", "arguments": {"id": "drive-0"}}
@@ -435,7 +433,7 @@ You can also remove the replaced block device by:
 
 For `addr`, it start at `0x0` mapping in guest with `eth0`.
 
-You can also remove the replaced net device by:
+You can also remove the replaceable net device by:
 
 ```json
 <- {"execute": "device_del", "arguments": {"id": "net-0"}}
@@ -446,7 +444,7 @@ You can also remove the replaced net device by:
 
 When some events happen, connected client will receive QMP events.
 
-Now StratoVirt supports `SHUTDOWN`, `STOP`, `RESUME`, `DEVICE_DELETED` four events.
+Now StratoVirt supports four events: `SHUTDOWN`, `STOP`, `RESUME`, `DEVICE_DELETED`.
 
 ## 4. Other Features
 
@@ -470,11 +468,16 @@ And you can also restore StratoVirt's **pid number** to a file by:
 
 ### 4.2 Seccomp
 
-StratoVirt use [prctl(2)](https://man7.org/linux/man-pages/man2/prctl.2.html) to limit the syscall
-in StratoVirt process by default. StratoVirt use only 32 syscalls(33 in x86_64) after running. It 
-will make a slight influence on performance to StratoVirt. If you want to disable seccomp, you can
+StratoVirt use [prctl(2)](https://man7.org/linux/man-pages/man2/prctl.2.html) to limit the syscalls
+in StratoVirt process by default. StratoVirt use only 32 syscalls in aarch64 (33 syscalls in x86_64) after running. 
+It will make a slight influence on performance to StratoVirt. If you want to disable seccomp, you can
 run StratoVirt with `-disable-seccomp`.
 
+```shell
+# cmdline
+-disable-seccomp
+```
+
 ### 4.3 Logging
 
 StratoVirt supports to output log to stderr and log file.
@@ -488,12 +491,12 @@ You can enable StratoVirt's logging by:
 -D /path/to/log/file
 ```
 
-StratoVirt's log output level is dependent on env `QUANTVISOR_LOG_LEVEL`. Logging levels are `trace`
-, `debug`, `info`, `warn`, `error`. The default level is `error`.
+StratoVirt's log-level depends on env `STRATOVIRT_LOG_LEVEL`.
+StratoVirt supports four log-levels: `trace`, `debug`, `info`, `warn`, `error`. The default level is `error`.
 
 ### 4.4 Omit_vm_memory
 
-When StratoVirt aborts unexpectedly, you may get a related core file in which the guest machine's
+When StratoVirt aborts unexpectedly, you can get a related core file in which the guest machine's
 whole memory are dumped. However, in most cases, such memory dumping is worthless and may consume
 a lot of system memory for storing.
 
diff --git a/docs/default.json b/docs/default.json
index d004d2a..fe2106b 100644
--- a/docs/default.json
+++ b/docs/default.json
@@ -1,10 +1,10 @@
 {
   "boot-source": {
     "kernel_image_path": "/path/to/kernel",
-    "boot_args": "console=ttyS0 reboot=k panic=1 pci=off tsc=reliable ipv6.disable=1 root=/dev/vda quiet"
+    "boot_args": "console=ttyS0 reboot=k panic=1 pci=off tsc=reliable ipv6.disable=1 root=/dev/vda"
   },
   "machine-config": {
-    "vcpu_count": 5,
+    "vcpu_count": 1,
     "mem_size": 268435456
   },
   "drive": [
diff --git a/docs/design.md b/docs/design.md
index 6e648ba..ae2bb12 100644
--- a/docs/design.md
+++ b/docs/design.md
@@ -2,28 +2,28 @@
 
 ## Overview 
 
-StratoVirt is an open-source lightweight virtualization technology based on a Linux kernel-based virtual machine (kernel-based virtual machine, KVM). 
-StratoVirt reduces memory resource consumption and improves a VM startup speed while retaining an isolation capability and a security capability of traditional virtualization. 
-StratoVirt capplies to microservices or serverless scenarios such as function computing and paravirtualization devices, such as GIC, serial, RTC, and virtio devices.
-StratoVirt reserved interface and design for importing more feature, even standard virtualization support.
+StratoVirt is an open-source lightweight virtualization technology based on Linux Kernel-based Virtual Machine(KVM). 
+StratoVirt reduces memory resource consumption and improves VM startup speed while retains isolation capability and security capability of traditional virtualization. 
+StratoVirt can be applied to microservices or serverless scenarios such as function computing.
+StratoVirt reserves interface and design for importing more features, even standard virtualization.
 
 ## Features 
 
-- High isolation based on hardware
-- Fast cold boot：Benefit from the minimalist design, StratoVirt could boot a microVM in 50ms. 
-- Low memory overhead：StratoVirt works with a memory footprint at 3MB. 
+- High isolation based on hardware.
+- Fast cold boot: Benefit from the minimalist design, StratoVirt could boot a microVM in 50ms. 
+- Low memory overhead: StratoVirt works with a memory footprint at 3MB. 
 - IO enhancement: StratoVirt offers normal IO ability with minimalist IO device emulation. 
-- OCI compatibility：StratoVirt offers OCI-compatible interface，which connects to Kubernetes ecosystem perfectly. 
-- Multi-platform support: Full support for Intel and Arm platform. 
-- Expansibility：StratoVirt reserved interface and design for importing more feature, even expend to standard virtualization support. 
+- OCI compatibility: StratoVirt offers OCI-compatible interface，which connects to Kubernetes ecosystem perfectly. 
+- Multi-platform support: Fully support for Intel and Arm platform.
+- Expansibility: StratoVirt reserves interface and design for importing more features, even expand to standard virtualization support. 
 
 ## Architecture 
 
-The following figure shows the StratoVirt core architecture, which consists of three layers from top to bottom. 
+The following figure shows StratoVirt's core architecture which consist of three layers from top to bottom.
 
-- OCI compatibility API: VM management interface. It uses the QMP protocol to communicate with external systems and is compatible with OCI.
+- OCI compatibility API: StratoVirt uses the QMP protocol to communicate with external systems and is compatible with OCI.
 - BootLoader: StratoVirt uses a simple BootLoader to load the kernel image, instead of the traditional cumbersome BIOS and Grub boot modes, to achieve fast boot. 
-- MicroVM: MicroVM is introduced. To improve performance and reduce the attack surface, StratoVirt minimizes the simulation of user-mode devices. KVM simulation devices and paravirtualization devices, such as GIC, serial, RTC, and virtio devices, are used. 
+- Lightweight: To improve performance and reduce the attack surface, StratoVirt minimizes the simulation of user-mode devices. KVM simulation devices and paravirtualization devices, such as GIC, serial, RTC and virtio devices, are used.
 
 ![image](images/StratoVirt-arch.png) 
 
@@ -31,13 +31,12 @@ The following figure shows the StratoVirt core architecture, which consists of t
 
 #### Running Architecture 
 
-A StratoVirt VM is an independent process in Linux. The process has two types of threads: main thread and VCPU thread. The main thread is a cycle for processing asynchronous time and collects events from external systems. 
-For example, a VCPU thread. Each VCPU has a thread, processes trap events of the VCPU. The other is the main thread for processing events. 
-
-
+A StratoVirt VM is an independent process in Linux. The process has two types of threads: main thread and VCPU thread.
+The main thread is a cycle for asynchronous collecting and processing events from external modules, such as a VCPU thread.
+Each VCPU has a thread to process trap events of this VCPU.
 
 ## Restrictions 
 
-- Only the Linux operating system is supported. The kernel version is 4.19. 
-- Only Linux is supported as the client operating system, and the kernel version is 4.19. 
+- Only the Linux operating system is supported. The recommended kernel version is 4.19.
+- Only Linux is supported as the client operating system, and the recommended kernel version is 4.19.
 - Supports a maximum of 254 CPUs. 
diff --git a/docs/mk_initrd.md b/docs/mk_initrd.md
index 5a1e041..cd30369 100644
--- a/docs/mk_initrd.md
+++ b/docs/mk_initrd.md
@@ -53,7 +53,7 @@ cd _install
 find . | cpio -o --format=newc > /tmp/StratoVirt-initrd
 ```
 
-## 6. Running StratoVirt with initrd
+## 6. Run StratoVirt with initrd
 
 ```shell
 $ ./stratovirt \
diff --git a/docs/quickstart.md b/docs/quickstart.md
index bc8cefb..142c9ab 100644
--- a/docs/quickstart.md
+++ b/docs/quickstart.md
@@ -4,13 +4,13 @@
 
 * Host os
 
-    StratoVirt supports host os Linux 4.19 in both x86_64 and aarch64 platform.
+   You can run StratoVirt on both x86_64 and aarch64 platforms.
 
-    KVM mod should be supported in your host Linux kernel.
+   And on top of that, the StratoVirt is based on KVM, so please make sure you have KVM module on your platform.
 
 * Authority
 
-    You should have read/write access to `/dev/kvm`. If not, you can get your access by:
+    You should have read/write permissions to `/dev/kvm`. If not, you can get your permissions by:
 
     ```shell
     $ sudo setfacl -m u:${USER}:rw /dev/kvm
@@ -19,8 +19,8 @@
 
 ### 2.1 Check rust environment
 
-To build StratoVirt, make sure that Rust language environment and Cargo have already installed.
- The version of rustc is suggested up to 1.42.
+To build StratoVirt, make sure that Rust language environment and Cargo have already been installed.
+ The recommended version of rustc is 1.42 or later.
 
 ```shell
 $ rustc -version
@@ -33,7 +33,7 @@ If you want to deploy rust environment, the following link will help you:
 
 ### 2.2 Build with musl-libc
 
-With musl-libc, StratoVirt is linked statically and having no library dependencies. It's the
+With musl-libc, StratoVirt is linked statically and has no library dependencies. It's the
  default target to build StratoVirt.
 
 ```shell
@@ -45,11 +45,11 @@ $ rustup target add ${arch}-unknown-linux-musl
 $ cargo build --release --target ${arch}-unknown-linux-musl
 ```
 
-Now you can find StratoVirt binary in `target/${arch}-unknown-linux-musl/release/stratovirt`.
+Now you can find StratoVirt binary file in `target/${arch}-unknown-linux-musl/release/stratovirt`.
 
 ### 2.3 Build with glibc
 
-StratoVirt can also build using glibc toolchains. By this way, StratoVirt is linked dynamically.
+StratoVirt can also be built using glibc toolchains. By this way, StratoVirt is linked dynamically.
 
 ```shell
 # Add gnu rust tool-chain, if installed, skip
@@ -60,13 +60,13 @@ $ rustup target add ${arch}-unknown-linux-gnu
 $ cargo build --release --target ${arch}-unknown-linux-gnu
 ```
 
-Now you can find StratoVirt binary in `target/${arch}-unknown-linux-gnu/release/stratovirt`.
+Now you can find StratoVirt binary file in `target/${arch}-unknown-linux-gnu/release/stratovirt`.
 
-## 3. Get Kernel and rootfs Image
+## 3. Prepare Kernel and rootfs Image
 
 ### 3.1 Build kernel
 
-The current version StratoVirt supports only PE-format kernel images in both x86_64 and aarch64
+The StratoVirt in current version supports only PE-format kernel images on both x86_64 and aarch64
 platforms, which can be built with:
 
 1. Firstly, get the openEuler kernel source code:
@@ -76,14 +76,14 @@ platforms, which can be built with:
    $ cd kernel
    ```
 
-2. Check out the kernel version to kernel-4.19:
+2. Switch the kernel version to kernel-4.19:
 
    ```shell
    $ git checkout kernel-4.19
    ```
 
-3. Configure your linux kernel build. You can use [our recommended config](./kernel_config) and
-copy it to `kernel` path as `.config`. You can interactive config by:
+3. Configure your linux kernel. You can use [our recommended config](./kernel_config) and
+copy it to `kernel` path as `.config`. You can also modify config options by:
 
    ```shell
    $ make menuconfig
@@ -97,7 +97,7 @@ copy it to `kernel` path as `.config`. You can interactive config by:
 
 ### 3.2 Make rootfs
 
-Rootfs image is a file system image.  An EXT4-format image with an `init` can be mounted at
+Rootfs image is a file system image.  An EXT4-format image with `/sbin/init` can be mounted at
  boot time in StratoVirt. Below is a simple way to make a EXT4 rootfs image:
 
 1. Prepare a properly-sized file(e.g. 1G):
@@ -115,6 +115,7 @@ Rootfs image is a file system image.  An EXT4-format image with an `init` can be
 3. Mount the file image:
 
    ```shell
+   $ mkdir -p /mnt/rootfs
    $ sudo mount ./rootfs.ext4 /mnt/rootfs && cd /mnt/rootfs
    ```
 
@@ -130,7 +131,7 @@ Rootfs image is a file system image.  An EXT4-format image with an `init` can be
 5. Make a simple `/sbin/init` for EXT4 file image.
 
    ```shell
-   $ cat > sbin/init <<EOF
+   $ rm sbin/init && touch sbin/init && cat > sbin/init <<EOF
    #! /bin/sh
    mount -t devtmpfs dev /dev
    mount -t proc proc /proc
@@ -141,29 +142,29 @@ Rootfs image is a file system image.  An EXT4-format image with an `init` can be
    poweroff -f
    EOF
 
-   sudo chmod +x sbin/init
+   $ sudo chmod +x sbin/init
    ```
 
 6.  Unmount rootfs image:
 
     ```shell
-    $ umount /mnt/rootfs
+    $ cd ~ && umount /mnt/rootfs
     ```
 
-## 4. Running StratoVirt
+## 4. Run StratoVirt
 
-With kernel and rootfs image, we can boot up a guest Linux machine by StratoVirt.
+With kernel and rootfs image, we can boot a guest Linux machine by StratoVirt.
 
-### 4.1 Running with cmdline
+### 4.1 Run with cmdline
 
 The minimum configuration for StratoVirt is:
 
 * A PE format Linux kernel
-* Make rootfs image as virtio-blk device and add this device to kernel parameters
+* A rootfs image as virtio-blk device, which has to be added to kernel parameters
 * Api-channel to control StratoVirt
 * If you want to login with ttyS0, you may need a serial and add ttyS0 to kernel parameters
 
-You can deploy them with cmdline arguments:
+You can deploy StratoVirt with cmdline arguments:
 
 ```shell
 # Make sure api-channel can be created.
@@ -180,15 +181,15 @@ $ ./stratovirt \
 
 ### 4.2 Running with json
 
-StratoVirt can also boot from a json configuration file like [default.json](./default.json).
+StratoVirt can also boot from a json configuration file like provided [sample default.json](./default.json).
 
 ```shell
 # Json configuration file
 $ cat default.json
 {
   "boot-source": {
-    "kernel_image_path": "/path/to/vmlinux.bin",
-    "boot_args": "console=ttyS0 root=/dev/vda" reboot=k panic=1
+    "kernel_image_path": "/path/to/kernel",
+    "boot_args": "console=ttyS0 reboot=k panic=1 pci=off tsc=reliable ipv6.disable=1 root=/dev/vda"
   },
   "machine-config": {
     "vcpu_count": 1,
@@ -197,7 +198,7 @@ $ cat default.json
   "drive": [
     {
       "drive_id": "rootfs",
-      "path_on_host": "/path/to/rootfs,
+      "path_on_host": "/path/to/rootfs/image",
       "direct": false,
       "read_only": false
     }
@@ -213,8 +214,6 @@ $ ./stratovirt \
     -api-channel unix:/path/to/socket
 ```
 
-Now StratoVirt can boot a guest Linux machine.
-
 You can also run StratoVirt with initrdfs, read [initrd_guide](./mk_initrd.md).
 
-If you want to know more information on running StratoVirt, go to the [StratoVirt-Guidebook](./StratoVirt-Guidebook.md).
+If you want to know more information on running StratoVirt, go to the [Configuration Guidebook](./config_guidebook.md).
diff --git a/util/src/logger.rs b/util/src/logger.rs
index 9548965..015c9ab 100644
--- a/util/src/logger.rs
+++ b/util/src/logger.rs
@@ -103,7 +103,7 @@ pub fn init_vm_logger(
 }
 
 pub fn init_logger_with_env(logfile: Option<Box<dyn Write + Send>>) -> Result<(), SetLoggerError> {
-    let level = match std::env::var("QUANTVISOR_LOG_LEVEL") {
+    let level = match std::env::var("STRATOVIRT_LOG_LEVEL") {
         Ok(l) => match l.to_lowercase().as_str() {
             "trace" => Level::Trace,
             "debug" => Level::Debug,
-- 
2.19.1

