---
title: 配置ExaGear for Server on openEuler
description: "ExaGear for Server整个文件系统对host系统应用程序可见，只有guest系统文件对Linux on x86应用程序可见。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengdevps/portingadvisor/usermanual/kunpengexagear_06_0031.html
sourcePath: /source/zh/kunpengdevps/portingadvisor/usermanual/kunpengexagear_06_0031.html
indexId: b8470fdb80aa4f575b781c0bd92af0d5557c6a7037ba4fd40923aee5e26a93fd77
---
# 配置ExaGear for Server on openEuler

#### host系统和guest系统共享的目录

ExaGear for Server整个文件系统对host系统应用程序可见，只有guest系统文件对Linux on x86应用程序可见。

图1 host系统和guest系统的文件系统（以openEuler为例）


配置文件/opt/exagear/images/openeuler-<os_version>-x86_64/.exagear/vpaths-list包含了host系统和guest系统共享的一系列目录和文件。

```
cat /opt/exagear/images/openeuler-<os_version>-x86_64/.exagear/vpaths-list
```

显示：

```
/home/
/etc/adduser.conf
/etc/deluser.conf
```

以下文件及配置会在host系统和guest系统中共享使用：

- user accounts
- user groups
- user privileges
- /home directories
- host configurations
- system information provided by Linux kernel
- devices and disks
- sockets
- pidfiles
- mount points
- logs
- temporary files


如需创建一个在host系统和guest系统之间共享的目录或文件，可以选择如下两种方法：

- 方法1：修改vpaths-list配置文件。
修改vpaths-list配置文件的操作步骤如下：

  1. 确保host系统中存在所需的目录或文件。
  2. 在guest系统中创建同名的假目录或文件。
  3. 将目录或文件的完整路径另起一行添加到配置文件/opt/exagear/images/openeuler-<os_version>-x86_64/.exagear/vpaths-list中。
    请注意，配置文件的目录应以“/”结尾

- 方法2：将host系统要共享的目录挂载到guest系统。
以/newdir为例，使用coreutils中的mount实用程序将host系统要共享的目录挂载到guest系统：

  1. 在x86运行环境中创建挂载点：
    1 sudo mkdir /opt/exagear/images/openeuler-<os_version>-x86_64/shareddir

  2. 将newdir挂载到shareddir挂载点下：
    1 sudo mount --bind /newdir /opt/exagear/images/openeuler-<os_version>-x86_64/shareddir

在卸载ExaGear for Server前，需要卸载挂载的目录：

```
sudo umount /opt/exagear/images/openeuler-<os_version>-x86_64/shareddir
```


#### 代理配置

/etc/environment在host系统和guest系统之间不共享。因此，如果你需要在本地网络中通过/etc/environment使用代理配置，确保你已经使用如下命令将配置复制到guest系统：

```
sudo cp /etc/environment /opt/exagear/images/openeuler-<os_version>-x86_64/etc/environment
```


#### sysctl和网络配置

guest系统可以访问/proc/sys/中的sysctl设置，但不能修改/etc/sysctl.conf或/etc/sysctl.d/。sysctl参数的配置应在host系统上进行。

guest系统可以访问描述网络配置的文件（例如/etc/resolv.conf），但guest系统不可修改网络设置。网络设置的配置应在host系统上进行。


#### guest SysV风格的init脚本和systemd在host中的集成

openEuler采用systemd作为init系统，并支持SysV风格的init脚本作为legacy。许多openEuler包中会提供这些服务的配置。

默认情况下，系统采用全自动集成机制将guest服务表示为host服务。guest服务被注册为host服务，服务名称相同。因此，你可以从guest和host shell来管理guest服务（在这种情况下，host服务会将所有start/stop/testconfig等请求委托给各自的guest服务）。以openEuler为例：

```
exagear
```

显示：

```
Starting /bin/bash in the guest image /opt/exagear/images/openeuler-
<os_version>
-x86_64
```

运行以下命令：

```
sudo yum update
sudo yum install epel-release
sudo yum install nginx
exit
sudo service nginx start
service nginx status
```

显示：

```
nginx.service - nginx - high performance web server
Loaded: loaded (/run/systemd/generator.late/nginx.service; generated)
Active: active (running) since Fri 2019-05-17 11:56:35 EDT; 2h 54min ago ...
```

你可以通过列出guest系统的/opt/exagear/images/openeuler-<os_version>-x86_64/etc/init.d/和/opt/exagear/images/openeuler-<os_version>-x86_64/lib/systemd/system/目录中的文件来查看guest系统中注册了哪些服务。


#### 内存序模型

ExaGear for Server默认为Linux on x86应用程序提供弱内存序模型。 如果软件依赖于x86强内存序模型，则可能需要强制ExaGear严格遵循x86强内存序模型。可以通过修改ExaGear for Server配置文件来完成：

```
sudo sed -i -e '/EXAGEAR_SMO_MODE="/s/fbase"/all"/' /opt/exagear/etc/exagear-x86_32.conf
sudo sed -i -e '/EXAGEAR_SMO_MODE="/s/fbase"/all"/' /opt/exagear/etc/exagear-x86_64.conf
```

使用以下命令恢复弱内存序模型：

```
sudo sed -i -e '/EXAGEAR_SMO_MODE="/s/all"/fbase"/' /opt/exagear/etc/exagear-x86_32.conf
sudo sed -i -e '/EXAGEAR_SMO_MODE="/s/all"/fbase"/' /opt/exagear/etc/exagear-x86_64.conf
```


#### 动态二次优化

ExaGear动态二次优化可以在程序翻译运行时动态识别优化的机会，进一步提升翻译效果。动态二次优化依赖硬件SPE功能（SPE是否可用的检测手段查看FAQ），以系统服务进程的形式存在。启用动态二次优化需要设置ExaGear配置选项EXAGEAR_USE_OPT="y"。该选项默认为"n"关闭。配置方法：分别在32位和64位应用程序的配置文件/opt/exagear/etc/exagear-x86_32.conf和/opt/exagear/etc/exagear-x86_64.conf中，设置EXAGEAR_USE_OPT="y"，以开启动态二次优化。


- 启动动态二次优化服务：
  1 2 sudo systemctl start exagear-x86_64-opt.service sudo systemctl start exagear-x86_32-opt.service


- 查看动态二次优化服务状态：
  1 2 sudo systemctl status exagear-x86_64-opt.service sudo systemctl status exagear-x86_32-opt.service


此时可以看到opt.x64a64.socket、opt.x32a64.socket的进程服务启动。

- 设置/关闭动态二次优化服务自启动：
  1 2 3 4 sudo systemctl enable exagear-x86_64-opt.service sudo systemctl disable exagear-x86_64-opt.service sudo systemctl enable exagear-x86_32-opt.service sudo systemctl disable exagear-x86_32-opt.service


设置EXAGEAR_USE_OPT="y"之前，请确认exagear-x86_*-opt.service相关进程处于开启状态。


#### 返回地址优化

ExaGear for Server默认关闭了返回地址优化，相关配置及其值设置为EXAGEAR_DISABLE_NATIVE_RETURN_ADDR_OPT="y"，如需开启返回地址优化，参考以下操作实现。

```
sudo sed -i -e '/EXAGEAR_DISABLE_NATIVE_RETURN_ADDR_OPT="/s/y"/n"/' /opt/exagear/etc/exagear-x86_32.conf
sudo sed -i -e '/EXAGEAR_DISABLE_NATIVE_RETURN_ADDR_OPT="/s/y"/n"/' /opt/exagear/etc/exagear-x86_64.conf
```


#### x86位相同精度

在ExaGear中，如果需要以与x86 bit位相同精度进行32/64位的浮点计算（如使用SIMD寄存器的计算），应该启用额外的ExaGear选项EXAGEAR_X86_PRECISE_FP。此选项默认为禁用，但可以通过将EXAGEAR_X86_PRECISE_FP参数设置为 “y”进行开启。配置方法：在分别针对32位和64位应用程序进行符号链接配置的文件/opt/exagear/etc/exagear-x86_32.conf和/opt/exagear/etc/exagear-x86_64.conf中添加EXAGEAR_X86_PRECISE_FP="y"。

启用EXAGEAR_X86_PRECISE_FP选项可能会显著降低ExaGear的整体性能。


#### 80位x86精度

在ExaGear中，如果需要具有80位x86精度，则应启用额外的ExaGear选项EXAGEAR_X86_PRECISE_80BIT_FP。此选项默认为禁用，但可以通过将EXAGEAR_X86_PRECISE_80BIT_FP参数设置为“y”进行开启。配置方法：在分别针对32位和64位应用程序进行符号链接配置的文件/opt/exagear/etc/exagear-x86_32.conf和/opt/exagear/etc/exagear-x86_64.conf中添加EXAGEAR_X86_PRECISE_80BIT_FP="y"。

启用EXAGEAR_X86_PRECISE_80BIT_FP选项可能会显著降低ExaGear的整体性能。
