Configuring ExaGear for Server on Ubuntu
Sharing Directories Between the Host and Guest Systems
The entire ExaGear Server file system is visible to host system applications. Only guest system files are visible to Linux applications on x86.

The configuration file /opt/exagear/images/ubuntu-<os_version>-x86_64/.exagear/vpaths-list contains directories and files shared between the host and guest systems.
cat /opt/exagear/images/ubuntu-<os_version>-x86_64/.exagear/vpaths-list
Command output:
/home/
/etc/adduser.conf
/etc/deluser.conf
...
The following files and configurations are shared between the host and guest systems:
- 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
To create a shared directory or file between the host and guest systems, use either of the following methods:
- Method 1: Modify the vpaths-list configuration file.
To modify the vpaths-list configuration file, perform the following steps:
- Ensure that the required directory or file exists on the host system.
- Create a fake directory or file with the same name on the guest system.
- Add the complete path of the directory or file to a new line in the opt/exagear/images/ubuntu-<os_version>-x86_64/.exagear/vpaths-list configuration file.
Note that the directory of the configuration file must end with a slash (/).
- Method 2: Mount the directory to be shared on the host system to the guest system.
Take /newdir as an example. Use the mount program in coreutils to mount the directory to be shared on the host system to the guest system.
- Create a mount point in the x86 operating environment.
sudo mkdir /opt/exagear/images/ubuntu-<os_version>-x86_64/shareddir
- Mount newdir to the shareddir mount point.
sudo mount --bind /newdir /opt/exagear/images/ubuntu-<os_version>-x86_64/shareddir
Before uninstalling the ExaGear Server, unmount the following directories:
sudo umount /opt/exagear/images/ubuntu-<os_version>-x86_64/shareddir
- Create a mount point in the x86 operating environment.
Configuring Proxy
/etc/environment is not shared between the host and guest systems. If you use the proxy configuration in the local network through /etc/environment, ensure that you have copied the configuration to the guest system by running the following command:
sudo cp /etc/environment /opt/exagear/images/ubuntu-<os_version>-x86_64/etc/environment
Configuring sysctl and Network
The guest system can access the sysctl settings in /proc/sys/, but cannot modify /etc/sysctl.conf or /etc/sysctl.d/. The sysctl parameters must be configured on the host system.
The guest system can access the file (for example, /etc/resolv.conf) that describes the network configuration, but cannot modify the network configuration. The network settings must be configured on the host system.
Integrating Guest SysV-Style Init Script and systemd on the Host
Ubuntu uses systemd as the init system and supports SysV-style init scripts as legacy. Many Ubuntu packages provide the configuration of these services.
By default, the system uses the automatic integration mechanism to represent the guest service as the host service. The guest service is registered as a host service with the same name. Therefore, you can manage the guest service from the guest and host shell. (In this case, the host service delegates all requests such as start, stop, and testconfig to the guest service.) Take Ubuntu as an example:
exagear
Command output: 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
Command output:
● 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 ...
You can list the files in the /opt/exagear/images/ubuntu-<os_version>-x86_64/etc/init.d/ and /opt/exagear/images/ubuntu-<os_version>-x86_64/lib/systemd/system/ directories of the guest system to check which services are registered in the guest system.
Memory Ordering Model
ExaGear Server provides a weak memory ordering model for Linux applications on x86 by default. If the software depends on the x86 strong memory ordering model, ExaGear may be forced to strictly comply with the x86 strong memory ordering model. You can run the following commands to modify the ExaGear Server configuration files:
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
Run the following commands to restore the weak memory ordering model:
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
Dynamic Secondary Optimization
The ExaGear dynamic secondary optimization can dynamically identify optimization opportunities during program translation, further improving the translation effect. The dynamic secondary optimization depends on the hardware SPE function and exists as a system service process. You can check whether the SPE function is available by referring to 6-FAQ. To enable the dynamic secondary optimization, set EXAGEAR_USE_OPT to "y". By default, this option is set to "n" (disabled). For example, set EXAGEAR_USE_OPT to "y" in the configuration files /etc/exagear-x86_32.conf and /etc/exagear-x86_64.conf of 32-bit and 64-bit applications, respectively, to enable the dynamic secondary optimization.
- Start the dynamic secondary optimization service.
sudo systemctl start exagear-x86_64-opt.service sudo systemctl start exagear-x86_32-opt.service
- Check the status of the dynamic secondary optimization service.
sudo systemctl status exagear-x86_64-opt.service sudo systemctl status exagear-x86_32-opt.service
The opt.x64a64.socket and opt.x32a64.socket processes are started.
- Enable or disable automatic startup of the dynamic secondary optimization service.
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
Before setting EXAGEAR_USE_OPT to "y", ensure that the exagear-x86_*-opt.service process is started.
Precision with the Same Bits as x86
In ExaGear, if you need to perform 32/64-bit floating-point calculations with precision with the same bits as x86 (for example, calculations by using SIMD registers), you can enable the additional ExaGear option EXAGEAR_X86_PRECISE_FP. This option is disabled by default, but it can be enabled by setting the EXAGEAR_X86_PRECISE_FP parameter to "y". Example:
Add EXAGEAR_X86_PRECISE_FP="y" to the /etc/exagear-x86_32.conf and /etc/exagear-x86_64.conf files.
80-Bit x86 Precision
In ExaGear, if 80-bit x86 precision is required, the additional ExaGear option EXAGEAR_X86_PRECISE_80BIT_FP should be enabled. This option is disabled by default, but it can be enabled by setting the EXAGEAR_X86_PRECISE_80BIT_FP parameter to "y". Example:
Add EXAGEAR_X86_PRECISE_80BIT_FP="y" to the /etc/exagear-x86_32.conf and /etc/exagear-x86_64.conf files.
Enabling the EXAGEAR_X86_PRECISE_80BIT_FP option may significantly deteriorate the overall performance of ExaGear.