亚马逊AWS官方博客

基于 AWS SOCA 构建混合云芯片设计环境最佳实践

芯片设计采用 SOCA 解决方案

芯片设计公司使用亚马逊云科技的 EDA 行业解决方案 SOCA(Scale-Out Computing on AWS),便利地使用云上弹性的高性能计算和存储,从容应对无预估的业务突发高峰,减少环境准备期,利用高并发缩短 EDA 作业时间,同时能够在业务低峰期避免闲置资源浪费,达成更好的成本收益。因此,芯片设计公司不断加大云上投入,逐渐形成两套环境:一套云上规模使用的计算集群,云下利旧使用的计算集群。在这一阶段,芯片设计公司的 IT 运维工程师和 IC 设计工程师期望云上云下两套环境有更好的协同,更一致的用户体验。

本博客介绍真实芯片设计公司的案例,在面对 IC 设计场景的各项关键需求上,结合亚马逊云科技的 SOCA 解决方案,分享客户云上云下两套计算集群混合使用(混合云)的经验,通过技术手段迭代改进混合云,提升用户体验,最后介绍改进后的收益和计划。

用户使用 SOCA 的迭代优化需求与设计

客户生产环境使用亚马逊云科技云 SOCA 解决方案进行 EDA 仿真作业,SOCA 参考链接:https://www.amazonaws.cn/en/solutions/industry/manufacturing/aws-solution/scaling-out-computing-on-amazon/

客户在生产环境使用 SOCA 第一阶段的架构图如下:

在经过一年多的生产实践之后,IT 运维工程师和 IC 设计工程师对云端 SOCA 解决方案的熟练运用达到了新的高度。这期间,客户基于日常使用的应用场景需求,尤其是针对云上云下两套环境的协同,期望利用亚马逊云科技进一步对 SOCA 解决方案向混合云第二阶段迭代改进,优化用户体验。需求和解决方案如下:

需求 1. 网络:用户期望优化上云网络

需求描述:IC 设计工程师们通过使用 VPN 连接到云环境,该连接基于公共互联网进行。然而,由于公共互联网的网络稳定性和速度质量并不能得到保障,这可能会影响工程师们在云上工作的连续性和效率。因此,网络的优化和升级是至关重要的。

解决措施:建立一条从本地数据中心到中国亚马逊云上区域(Region)的专线连接,使用 VPN 作为备线使用,提升客户上云的网络性能。该方案的关键是,云上使用亚马逊网络服务中的中转网关(Amazon Transit Gateway,TGW)实现主从切换,云下防火墙使用双向转发检测(BFD)进行检测主从切换。

需求 2. 鉴权权限:用户期望整合云上云下两套帐号体系

需求描述:由于历史原因,客户本地数据中心仍然使用 NIS Auth Server,云上使用 OpenLDAP,两套账户互相独立导致用户需要在两个系统中维护相同的用户名和密码,并且把文件权限在两个账户体系中分别配置和同步,造成了人力资源上的重大负担和管理上的不便。

解决措施:放弃本地的 NIS Auth Server,全面转向使用 OpenLDAP 作为认证服务器。为了高可靠,云上云下均部署 OpenLDAP 服务。采取这种策略的关键是实现一个云上云下的 LDAP 双主同步机制,这样可以确保两个环境中的用户账号和权限自动保持一致。无论云上云下哪一边权限变化,均可以自动同步,降低了手动同步产生差错的可能性,也减轻了维护人员的负担。为了确保系统的高可用性和可靠性,在服务配置上采用互备方案。如果云上 LDAP 服务出现故障,云下 LDAP 服务器作为备机可以迅速接管,反之亦然。这样确保鉴权服务的连续性和稳定性。这样的解决方案不仅提高了运维的效率,减少了潜在错误和安全风险,还为用户提供了无缝的登录体验和访问控制。

需求 3. 计算调度:用户期望云上云下计算资源统一调度

需求描述:云上云下两套 HPC 机群,资源相对隔离,云上使用 OpenPBS 调度,云下使用静态调度,两者使用方式不一致。使用环境进行 EDA 仿真的脚本有差异,这样 IC 设计工程师常常需要修改脚本适配环境。同时,IT 运维工程也需要人工为不同项目组分配环境,造成协调和沟通的人力成本。用户期望两套集群资源能够协同起来,使用资源的操作一致,资源的分配能够统一调度。

解决方案:本地数据中心的主机纳入 OpenPBS 的调度管理,作为 OpenPBS 的静态计算资源。IC 设计工程师可以提交 OpenPBS 作业的方式来提交作业到本地计算集群上,从而实现云上云下用户操作的一致性,避免修改验证脚本。用户统一使用 Open PBS 的队列,进行计算资源的分配调度,借助 OpenPBS 队列管理的机制,减少人为静态分配计算集群的负担。统一使用 SOCA 的监控系统,对作业运行状态、资源使用情况进行实时监控,并提供报表功能,以供业务团队和管理层进行决策支持。

需求 4. 存储同步:用户期望云上云下存储自动同步

需求描述:云上云下的存储是两套,IC 设计工程在 EDA 仿真作业开始前,需要手动操作数据同步,登陆到云上 NiceDCV 的云桌面进行设计文件打包上传,OpenPBS 作业的调整操作提交作业。作业执行完后,需要登陆云桌面进行结果文件的下载等。客户期望优化作业准备的操作和时效。

解决方案:优化 IC 设计工程师操作云上存储的步骤,使用 DataSync 自动化实现云上和云下数据的同步操作。针对不同数据量和文件数的场景,进行性能测试,找到 DataSync 的适用的最佳场景,并协助客户区分项目冷热目录,进行甄别处理和优化。

SOCA 构建混合云的目标架构

亚马逊云科技和客户进行了 SOCA 混合云的迭代优化设计,目标架构如下:

SOCA 构建混合云的实施详解

网络优化

第二阶段网络优化,建立一条从本地数据中心到宁夏区域(Region)的专线连接,将 VPN 作为备线使用。利用两条线路可以保证更高的网络质量、安全性、可靠性和更低的延迟。该专线使用亚马逊网络服务中的中转网关(Amazon Transit Gateway,TGW)。在 TGW 中配置了两种路由:通过 BGP 协议自动学习到的指向本地数据中心(Corporate Network)的专线路由,以及一条优先级更低、网络掩码较短的静态路由,该静态路由将流量指向部署了 VPN 的那个 VPC。TGW 起着路由主备切换的关键作用。在正常情况下,流量会走优先级较高的专线。如果专线连接出现问题,TGW 会检测到异常,将更新路由表来去除指向本地数据中心专线的路由,自动将流量转至备用 VPN 路径。专线连接恢复正常后,TGW 会重新启用指向专线的路由,由于专线网络掩码较长优先级高,流量会再次优先通过专线。架构图如下:

参考链接:https://aws.amazon.com/cn/blogs/china/site-to-site-vpn-backup-direct-connection-scheme/

鉴权整合

鉴权整合分了三步走:

1、用户权限一致
1)利用 SOCA NewUser Optianal 参数填写 Uid,使用云上云下用户的 Uid 一致,因而用户的存储权限不需要修改。
2)SOCA New User 用户名与云下 Nis 保持一致。

2、NIS Auth Server 鉴权去掉
利用长假期,客户将 NIS 鉴权去掉,全部使用云上 Open LDAP 作为鉴权服务器,临时过渡。

3、Open LDAP 双主高可用
云下新建一台 OpenLDAP,与云上进行双向同步,组成双主集群。当一台权限信息修改,另一边秒级完成同步。

鉴权架构图如下:

LDAP 双主同步配置流程参见链接:https://www.openldap.org/doc/admin24/replication.html

OpenPBS 调度整合

1. 本地数据中心主机 host 提交 OpenPBS 任务

本地数据中心主机(本地 host)安装 OpenPBS 软件,配置OpenPBS Server服务连接,作为PBS的客户端节点与PBS Server互通。SOCA原生支持CentOS7,客户场景使用的CentOS6。针对CentOS6主机,我们设计了客制化的脚本,具体如下:

(1)CentOS6 本地节点安装依赖包

yum install -y gcc make rpm-build libtool hwloc-devel \
libX11-devel libXt-devel libedit-devel libical-devel \
ncurses-devel perl postgresql-devel python-devel tcl-devel \
tk-devel swig expat-devel openssl-devel libXext libXft \
autoconf automake

yum install -y expat libedit postgresql-server python \
sendmail sudo tcl tk libical

yum -y install compat-openldap cyrus-sasl cyrus-sasl-devel openldap openldap-clients openldap-devel openldap-servers unixODBC unixODBC-devel

yum -y install avahi-libs bind-libs bind-libs-lite bind-license bind-utils c-ares cups-libs cyrus-sasl-gssapi http-parser libdhash libipa_hbac libldb libsmbclient libsss_autofs libsss_certmap libsss_idmap libsss_nss_idmap libsss_sudo libtalloc libtdb libtevent libwbclient python-sssdconfig samba-client-libs samba-common samba-common-libs sssd sssd-ad sssd-client sssd-common sssd-common-pac sssd-ipa sssd-krb5 sssd-krb5-common sssd-ldap sssd-proxy

(2)本地节安装 PBS 版本,配置 PBS 客户端(与 SOCA OpenPBS 版本匹配)

cd ~
wget https://github.com/openpbs/openpbs/archive/v18.1.4.tar.gz
tar zxvf v18.1.4.tar.gz
cd openpbs-18.1.4
./autogen.sh
./configure --prefix=/opt/pbs
make 
sudo make install 
sudo /opt/pbs/libexec/pbs_postinstall 
echo 10.0.xxx.xxx     ip-10-0-xxx-xxx >> /etc/hosts
echo 10.0.xxx.xxx     ip-10-0-xxx-xxx.xx-xxxxxxx-1.compute.internal >> /etc/hosts
sudo vi /etc/pbs.conf
#依照以下内容更新 pbs.conf 中的相关配置

PBS_SERVER=ip-10-0-xxx-xxx
PBS_START_SERVER=0
PBS_START_SCHED=0
PBS_START_COMM=0
PBS_START_MOM=1
PBS_EXEC=/opt/pbs
PBS_HOME=/var/spool/pbs
PBS_CORE_LIMIT=unlimited
PBS_SCP=/usr/bin/scp

sudo chmod 4755 /opt/pbs/sbin/pbs_iff /opt/pbs/sbin/pbs_rcp 

sudo /etc/init.d/pbs start

source /etc/profile.d/pbs.sh

qsub –version
qstat --version 

cd ~
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install

(3)本地节节点检查安装情况

qsub –version
qstat --version 

(4)本地节点加入 LDAP 域

Svi addtoLDAP.sh     #制作加域脚本,将以下内容拷入脚本中(注意核对 PEM 证书位置)

#!/bin/bash -xe

#input the SCHEDULER_HOSTNAME which is also the LDAP server host name
SCHEDULER_HOSTNAME=ip-10-0-xxx-xxx.xx-xxxxxxx-1.compute.internal

# Default LDAP base
LDAP_BASE="DC=soca,DC=local"

# Disable SELINUX
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

# Configure Host
SERVER_IP=$(hostname -I)
SERVER_HOSTNAME=$(hostname)
SERVER_HOSTNAME_ALT=$(echo $SERVER_HOSTNAME | cut -d. -f1)
echo $SERVER_IP $SERVER_HOSTNAME $SERVER_HOSTNAME_ALT >> /etc/hosts


# Configure Ldap
echo "URI ldap://$SCHEDULER_HOSTNAME" >> /etc/openldap/ldap.conf
echo "BASE $LDAP_BASE" >> /etc/openldap/ldap.conf

echo -e "[domain/default]
enumerate = True
autofs_provider = ldap
cache_credentials = True
ldap_search_base = $LDAP_BASE
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
sudo_provider = ldap
ldap_sudo_search_base = ou=Sudoers,$LDAP_BASE
ldap_uri = ldap://$SCHEDULER_HOSTNAME
ldap_id_use_start_tls = True
use_fully_qualified_names = False
ldap_tls_cacertdir = /etc/openldap/cacerts
[sssd]
services = nss, pam, autofs, sudo
full_name_format = %2\$s\%1\$s
domains = default
[nss]
homedir_substring = /data/home
[pam]
[sudo]
ldap_sudo_full_refresh_interval=86400
ldap_sudo_smart_refresh_interval=3600
[autofs]
[ssh]
[pac]
[ifp]
[secrets]" > /etc/sssd/sssd.conf

chmod 600 /etc/sssd/sssd.conf
service sssd enable 
service sssd  restart 

#centOS6 openssl not work , so add a copy content
cp -a /home/root/setup/SOCA-Add-LDAP/openldap-server.pem /etc/openldap/cacerts/
#copy /etc/openldap/cacerts/  from other soca host to this host

authconfig --disablesssd --disablesssdauth --disableldap --disableldapauth --disablekrb5 --disablekrb5kdcdns --disablekrb5realmdns --disablewinbind --disablewinbindauth --disablewinbindkrb5 --disableldaptls --disablerfc2307bis --updateall

sss_cache -E

authconfig --enablesssd --enablesssdauth --enableldap --enableldaptls --enableldapauth --ldapserver=ldap://$SCHEDULER_HOSTNAME --ldapbasedn=$LDAP_BASE --enablelocauthorize --enablemkhomedir --enablecachecreds --updateall

echo "sudoers: files sss" >> /etc/nsswitch.conf

# Disable StrictHostKeyChecking
echo "StrictHostKeyChecking no" >> /etc/ssh/ssh_config
echo "UserKnownHostsFile /dev/null" >> /etc/ssh/ssh_config

(5)本地节 配置重启自动启动 PBS

source /etc/environment
export PATH=$PATH:/usr/local/bin
AWS=$(which aws)
service pbs stop
systemctl stop pbs
echo "systemctl stop pbs
source /etc/environment
systemctl start pbs" >> /etc/rc.local
chmod +x /etc/rc.d/rc.local
systemctl enable rc-local
reboot

(6)检查调度器上的 PBS 节点,执行如下命令,即可查看到新增节点

pbsnodes -a

(7)本地节提交 PBS 任务

vim qsub job_submit.que

#!/bin/bash
##BEGIN PBS SETTINGS: Note PBS lines MUST start with
#PBS -N job_from_idc_1
#PBS -V -j oe -o job_from_idc_1.qlog
#PBS -P job_from_idc_1
#PBS -q  normal
#PBS -l nodes=1
##END PBS SETTINGS
##BEGIN ACTUAL CODE
#echo hello world
##END ACTUAL CODE

qsub job_submit.que

(8)本地节检查提交的任务状态

qstat -a

以上完成了本地数据中心主机提交 PBS 任务步骤。

2. OpenPBS Server 提交作业到本地主机执行任务

将本地 Host 加入 PBS 的 Always Onqueue 中,用户提交作业指定队列为 Always On,PBS Server 调度任务到本地节点。

存储改进

为了优化数据同步效率,我们采用 AWS DataSync 实现存储之间的数据迁移。在处理大量文件时,数据比对所需时间较长。我们的性能对比测试表明,在处理不同规模的文件时,如果同步的目录控制在千万级别的文件数量,同步过程可以在几分钟之内完成。基于此,我们建议将要同步的文件目录进行细分,根据项目、工程以及频繁变更等因素,以缩小同步范围,从而达到更高效的周期性同步效果。目前,客户正在根据这些测试结果来评估自动同步项目的可行性。

此外,亚马逊云科技中国区在 2023 年 11 月 14 日发布了 Amazon FSx for NetApp ONTAP。利用 NetApp 的 SnapMirror 和 FlexCache 技术,为数据同步提供了更加高效和强大的支持,这无疑为那些需要高性能和低延迟数据同步的场景开启了新的可能性,详情见 https://www.amazonaws.cn/en/newsroom/2023/1114-fsx/

总结用户体验与后续计划

我们刚刚圆满完成了 SOCA 混合云优化用户体验的第二阶段,带来了诸多显著提升。优化后的系统现提供更加高效的网络连接,集成了一个统一而安全的身份验证系统,并采用了一体化的计算集群调度管理机制。在存储方面,我们探索自动化同步的技术,并在验证其可行性。下一步计划,在 Amazon FSx for NetApp ONTAP 的基础上开展下一步的工作,为我们的客户提供更加优化的存储性能与同步解决方案。随着客户对系统的使用日益深入,我们将不断优化 OpenPBS 使用混合云主机资源的流程,以确保其高效顺畅。

现在,无论是 IC 设计工程师还是 IT 运维工程师,都可以享受到统一的、流畅的工作环境,无论他们是在云端还是在本地工作都能获得一致的用户体验。在这一新的混合云架构之下,我们的用户能够充分利用亚马逊云服务的弹性资源,确保 IC 设计的工作能够按时完成,进而为客户实现高效的芯片设计保驾护航。

参考链接

1、SOCA 官方连接

https://www.amazonaws.cn/en/solutions/industry/manufacturing/aws-solution/scaling-out-computing-on-amazon/

2、亚马逊 EDA 行业解决方案门户

https://aws.amazon.com/solutions/engineering-design/electronic-design-automation/

3、亚马逊云科技中国区 Amazon FSx for NetApp ONTAP 发布通知

https://www.amazonaws.cn/en/newsroom/2023/1114-fsx/

4、客户案例:NXP 如何将芯片设计迁移到 AWS

https://aws.amazon.com/blogs/industries/nxp-semiconductors-selects-aws-as-its-preferred-cloud-provider-to-power-silicon-design-in-the-cloud/

本篇作者

王跃

AWS 解决方案架构师,负责基于 AWS 云平台的解决方案咨询和设计,在系统架构、大数据、网络、应用研发领域有丰富的研发和实践经验。