1 简介
ExaGear是一款二进制指令动态翻译软件,运行在ARM64服务器上,通过将x86的指令在运行时翻译为ARM64指令并执行,使得绝大部分Linux on x86应用无需重新编译就可运行在ARM64服务器上。
ExaGear主要有两个组件:指令翻译引擎和x86运行环境,指令翻译引擎是一个“中间件”软件解决方案,位于x86应用程序与ARMv8架构服务器之间。x86应用启动时,ExaGear的指令翻译引擎接管x86应用的运行,使用二进制翻译技术将它们转换为兼容ARM的代码,再执行x86应用程序;
x86运行环境是一个包含所有标准库、实用程序的x86应用执行环境。
x86运行环境示意图如下:
2 exagear工具分析
2.1 软件包构成
exagear安装包主要由组成: 1)exager-core-xxxxx: 指令翻译引擎 2)exager-guest-for-centos-XXXX: x86运行环境
2.2 技术起源
从exagear运行方式和二进制命名上看,应该是Eltechs的延续
[root@localhost release]# rpm -qpl exagear-core-x64a64-2838-1.aarch64.rpm /lib/systemd/system/exagear-x86_64-binfmt.service /lib/systemd/system/exagear-x86_64-opt.service /opt/exagear/bin/binary_pick_x64a64.sh /opt/exagear/bin/ubt_x64a64_al /opt/exagear/bin/ubt_x64a64_al_mem39 /opt/exagear/bin/ubt_x64a64_al_mem49 /opt/exagear/bin/ubt_x64a64_cb /opt/exagear/bin/ubt_x64a64_opt /opt/exagear/shared/exagear-x86_64.conf |
2.3 使用限制
限制条件 |
说明 |
解决方案 |
操作系统种类 |
64 位Linux操作系统(CentOS 7、Ubuntu18、Ubuntu20) |
|
CPU架构限制 |
CPU:ARMv8架构 |
|
PAGE SIZE大小 |
CentOS ARM 系统不支持64KB页,只支持4KB |
替换PAGE SIZE为4K的内核 |
使用场景 |
只支持Linux on x86应用,不支持Windows应用,不支持Linux 驱动、虚拟化平台等内核程序的翻译 |
|
部署 |
可以物理机,虚拟机,容器部署;但是不支持ExaGear for Server 和ExaGear for Docker同时部署在同一台机器上; |
|
服务安装 |
禁止在同一台机器上同时安装同一服务的x86和ARM版本。另外,强烈建议不要从guest系统中运行host服务 |
|
2.4 简单使用
以centos系统为例,先安装exagear组件包后,运行exagear命令,即可启动一个x86 shell,也称为guest shell,进入到虚拟的x86 OS环境
执行exagear后,已置身于x86运行环境,根目录在host系统上的绝对路径为:/opt/exagear/images/centos-7-x86_64 该路径也就是
exager-guest-for-centos-XXXX安装包提供的
2.5 文件目录共享
ExaGear Server整个文件系统对host系统应用程序可见,只有guest系统文件对Linux on x86应用程序可见
配置文件/opt/exagear/images/centos-<os_version>-x86_64/.exagear/vpaths-list包含了host系统和guest系统共享的一系列目录和文件