在多节点场景运用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应用本身的特性和“作业提交软件”的配合。
在多节点场景运用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应用本身的特性和“作业提交软件”的配合。