开发者
资源
[ExaGear] 在多节点场景,应用ExaGear使能脚本的问题。
[ExaGear] 在多节点场景,应用ExaGear使能脚本的问题。
发表于2024/03/18
3441

在多节点场景运用ExaGear来完成x86应用程序的执行,通常是在每一个节点都安装ExaGear,然后在其中一个节点运行如下命令脚本即可:

$ exagear -- ./script.sh

其原因在于,虽然script.sh是文本文件,本身不能启动ExaGear,但是前置的“exagear -- ”已经显式地将script.sh放在ExaGear环境下运行。

进而,script.sh会正确地将相关的x86_64二进制在不同的节点上启动并翻译执行。

但是,在某些场景下,script.sh不是直接启动二进制程序在多节点运行,而在经过初步的处理后(如命令行选项的调整),将./script.sh传输到其它节点运行。

例如,在A节点运行上述“exagear -- ./script.sh”,而实际是在B节点运行“./script.sh”。

发生这样的情况,目前已知的场景有两个:

1. A节点是作业递交节点,不属于计算节点,所以“./script.sh”是在某个计算节点B启动运行。

2. A节点也是计算节点,但命令行参数指定了节点的顺序,导致实际的“./script.sh”在另一个计算节点B启动运行。

不管是哪种情况,结果都是在B节点以不感知ExaGear的方式启动本该在x86_64环境运行的script.sh。其结果必然是不能正常运行,但表现形式会比较多样:有报“CPU架构不对”、有报“命令行选项不可识别”等等。

解决这个问题的方式至少有两种:

一是调整部署方式,使得./script.sh脚本使用的bash恒定为x86_64版本。(这是一个通用的解决方式,但会修改用户脚本script.sh)

1. 各计算节点上,ARM和ExaGear环境的/usr/bin/目录分别创建一个x86_64版本的bashx:

 $ cp /opt/exagear/images/centos-7-x86_64/usr/bin/bash /usr/bin/bashx

 $ cd /opt/exagear/images/centos-7-x86_64/usr/bin/

 $ ln -snf bash bashx

2. script.sh脚本的首行,由原来的bash改成bashx:

 $ head -1 script.sh

#!/bin/bashx

二是根据特定的x86_64应用,在命令行上调整计算节点的顺序,使得执行“exagear -- ./script.sh”的节点A,就是最终拉起二进制程序的节点。(这个解决方式的优点在于不修改用户脚本script.sh)

这个方式能否成功,取决于x86_64应用本身的特性和“作业提交软件”的配合。

收藏举报
Level 1
0
帖子
0
粉丝
0
获赞