配置ExaGear for Server on CentOS
host系统和guest系统共享的目录
ExaGear for Server整个文件系统对host系统应用程序可见,只有guest系统文件对Linux on x86应用程序可见。

配置文件/opt/exagear/images/centos-<os_version>-x86_64/.exagear/vpaths-list包含了host系统和guest系统共享的一系列目录和文件。
1 | cat /opt/exagear/images/centos-<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配置文件。
- 确保host系统中存在所需的目录(或文件)。
- 在guest系统中创建同名的假目录(或文件)。
- 将目录(或文件)的完整路径另取一行添加到配置文件opt/exagear/images/centos-<os_version>-x86_64/.exagear/vpaths-list中。
请注意,配置文件的目录应以“/”结尾
- 方法2:将host系统要共享的目录挂载到guest系统
以/newdir为例,使用coreutils中的mount实用程序将host系统要共享的目录挂载到guest系统:
- 在x86运行环境中创建挂载点:
1
sudo mkdir /opt/exagear/images/centos-<os_version>-x86_64/shareddir
- 将newdir挂载到shareddir挂载点下:
1
sudo mount --bind /newdir /opt/exagear/images/centos-<os_version>-x86_64/shareddir
在卸载ExaGear for Server前,需要卸载挂载的目录:
1
sudo umount /opt/exagear/images/centos-<os_version>-x86_64/shareddir
- 在x86运行环境中创建挂载点:
代理配置
/etc/environment在host系统和guest系统之间不共享。因此,如果你需要在本地网络中通过/etc/environment使用代理配置,确保你已经使用如下命令将配置复制到guest系统:
1 | sudo cp /etc/environment /opt/exagear/images/centos-<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中的集成
CentOS采用systemd作为init系统,并支持SysV风格的init脚本作为legacy。许多CentOS包中会提供这些服务的配置。
默认情况下,系统采用全自动集成机制将guest服务表示为host服务。guest服务被注册为host服务,服务名称相同。因此,你可以从guest和host shell来管理guest服务(在这种情况下,host服务会将所有start/stop/testconfig等请求委托给各自的guest服务)。以CentOS为例:
1 | exagear |
显示:Starting /bin/bash in the guest image /opt/exagear/images/centos-<os_version>-x86_64
1 2 3 4 5 6 | 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/centos-<os_version>-x86_64/etc/init.d/和
/opt/exagear/images/centos-<os_version>-x86_64/lib/systemd/system/目录中的文件来查看guest系统中注册了哪些服务。
内存序模型
ExaGear for Server 默认为Linux on x86应用程序提供弱内存序模型。 如果软件依赖于x86强内存序模型,则可能需要强制ExaGear严格遵循x86强内存序模型。可以通过修改ExaGear for Server配置文件来完成:
1 2 | sudo sed -i -e '/EXAGEAR_SMO_MODE="/s/fbase"/all"/' /etc/exagear-x86_32.conf sudo sed -i -e '/EXAGEAR_SMO_MODE="/s/fbase"/all"/' /etc/exagear-x86_64.conf |
使用以下命令恢复弱内存序模型:
1 2 | sudo sed -i -e '/EXAGEAR_SMO_MODE="/s/all"/fbase"/' /etc/exagear-x86_32.conf sudo sed -i -e '/EXAGEAR_SMO_MODE="/s/all"/fbase"/' /etc/exagear-x86_64.conf |
动态二次优化
ExaGear 动态二次优化可以在程序翻译运行时动态识别优化的机会,进一步提升翻译效果。动态二次优化依赖硬件SPE功能(SPE是否可用的检测手段查看6-FAQ),以系统服务进程的形式存在。启用动态二次优化需要设置ExaGear配置选项EXAGEAR_USE_OPT="y"。该选项默认为"n"关闭。例如:分别在32位和64位应用程序的配置文件/etc/exagear-x86_32.conf 和 /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",如需开启返回地址优化,参考以下操作实现。
1 2 | sudo sed -i -e '/EXAGEAR_DISABLE_NATIVE_RETURN_ADDR_OPT="/s/y"/n"/' /etc/exagear-x86_32.conf sudo sed -i -e '/EXAGEAR_DISABLE_NATIVE_RETURN_ADDR_OPT="/s/y"/n"/' /etc/exagear-x86_64.conf |
x86位相同精度
在ExaGear中,如果需要以与x86 bit位相同精度进行32/64位的浮点计算(例如,对于使用 SIMD 寄存器的计算),应该启用额外的 ExaGear 选项EXAGEAR_X86_PRECISE_FP。此选项默认为禁用,但可以通过将 EXAGEAR_X86_PRECISE_FP参数设置为 “y”进行开启,例如:
在分别针对32位和64位应用程序进行符号链接配置的文件/etc/exagear- x86_32.conf 和 /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位应用程序进行符号链接配置的文件/etc/exagear- x86_32.conf 和 /etc/exagear-x86_64.conf中添加EXAGEAR_X86_PRECISE_80BIT_FP="y"。

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