ExaGear Server整个文件系统对host系统应用程序可见,只有guest系统文件对Linux on x86应用程序可见。
配置文件/opt/exagear/images/ubuntu-<os_version>-x86_64/.exagear/vpaths-list包含了host系统和guest系统共享的一系列目录和文件。
cat /opt/exagear/images/ubuntu-<os_version>-x86_64/.exagear/vpaths-list
显示:
/home/
/etc/adduser.conf
/etc/deluser.conf
...
以下文件及配置会在host系统和guest系统中共享使用:
如需创建一个在host系统和guest系统之间共享的目录或文件,可以选择如下两种方法:
请注意,配置文件的目录应以“/”结尾
以/newdir为例,使用coreutils中的mount实用程序将host系统要共享的目录挂载到guest系统:
sudo mkdir /opt/exagear/images/ubuntu-<os_version>-x86_64/shareddir
sudo mount --bind /newdir /opt/exagear/images/ubuntu-<os_version>-x86_64/shareddir
在卸载ExaGear Server前,需要卸载挂载的目录:
sudo umount /opt/exagear/images/ubuntu-<os_version>-x86_64/shareddir
/etc/environment在host系统和guest系统之间不共享。因此,如果你需要在本地网络中通过/etc/environment使用代理配置,确保你已经使用如下命令将配置复制到guest系统:
sudo cp /etc/environment /opt/exagear/images/ubuntu-<os_version>-x86_64/etc/environment
guest系统可以访问/proc/sys/中的sysctl设置,但不能修改/etc/sysctl.conf或/etc/sysctl.d/。sysctl参数的配置应在host系统上进行。
guest系统可以访问描述网络配置的文件(例如/etc/resolv.conf)但guest系统不可修改网络设置。网络设置的配置应在host系统上进行。
Ubuntu采用systemd作为init系统,并支持SysV风格的init脚本作为legacy。许多Ubuntu包中会提供这些服务的配置。
默认情况下,系统采用全自动集成机制将guest服务表示为host服务。guest服务被注册为host服务,服务名称相同。因此,你可以从guest和host shell来管理guest服务(在这种情况下,host服务会将所有start/stop/testconfig等请求委托给各自的guest服务)。以Ubuntu为例:
exagear
显示:Starting the shell in the guest image /opt/exagear/images/ubuntu-<os_version>-x86_64
sudo apt-get update sudo apt-get install nginx exit arch aarch64 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/ubuntu-<os_version>-x86_64/etc/init.d/和
/opt/exagear/images/ubuntu-<os_version>-x86_64/lib/systemd/system/目录中的文件来查看guest系统中注册了哪些服务。
ExaGear Server 默认为Linux on x86应用程序提供弱内存顺序模型。 如果软件依赖于x86强内存顺序模型,则可能需要强制ExaGear严格遵循x86强内存顺序模型。可以通过修改ExaGear Server配置文件来完成:
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
使用以下命令恢复弱内存序模型:
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",以开启动态二次优化。
sudo systemctl start exagear-x86_64-opt.service sudo systemctl start exagear-x86_32-opt.service
sudo systemctl status exagear-x86_64-opt.service sudo systemctl status exagear-x86_32-opt.service
此时可以看到opt.x64a64.socket、opt.x32a64.socket 的进程服务启动。
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中,如果需要以与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 中,如果需要具有 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的整体性能。