ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

虚拟机Cadence IC618 DRC License报错排查:HOSTID与MAC地址指南

虚拟机Cadence IC618 DRC License报错排查:HOSTID与MAC地址指南 如果你也遇到过在虚拟机里打开Cadence IC618跑DRC刚点下Run DRC就看到License报错的弹窗这篇文章就是给你写的。这个问题的坑深到什么程度呢表面上只是个普通的License验证失败实际上牵扯到虚拟机网卡的MAC地址、FlexNet License Server的校验机制、虚拟网络模式三个层面。我前前后后排查了三个晚上最后定位到的问题点说出来你可能不信——就是虚拟机网卡的那个HOSTID和License文件里登记的HOSTID对不上。写这篇文章的目的是把我这次从虚拟机网络配置入手一路追到HOSTID的完整排查过程记录下来。包括FlexNet的验证机制、虚拟网卡的地址修改方法、NAT和桥接模式对License连接的影响以及DRC跑批时特有的几个坑。不管你是刚接触IC618的新手还是被License问题折磨过几次的老工程师这套排查逻辑应该都能帮你省下不少时间。1. 虚拟机里跑IC618 DRCLicense报错到底长什么样1.1 先区分三类报错别一上来就怀疑License文件坏了Cadence IC618在虚拟机里跑DRCLicense报错不是只有一种表现。我这次遇到的和网上很多人问的其实是三类完全不同的情况处理思路完全不一样。第一类是启动时就报License错。一打开virtuoso或者启动PVS直接弹窗提示无法获取License或者命令行里直接出现License check failed。这种问题多半是环境变量指向错误或者License Server本身就没起来。第二类是启动能过但是跑DRC的时候报错。这个最气人原理图能打开版图能编辑一点Run DRC就弹cannot checkout license for feature xxx。这说明基础功能用的Feature没问题但是DRC工具对应的Feature没有在你的License里或者被限制了。我这次遇到的就是这一类。第三类是跑着跑着突然报错中断。比如DRC跑了一半或者跑到某个特定层次结构时突然报License错。这种情况要优先怀疑License的数量限制比如同时checkout的人数达到上限或者License Server的端口被占用导致连接不稳定。1.2 报错信息虽然吓人但关键信息就藏在几行里Cadence系工具的License报错信息格式往往来自底层的FlexNet一套机制。比如你会看到类似这样的内容License check failed. Cannot checkout feature DRC with version 6.18. Invalid host. The hostid of this system does not match the hostid specified in the license file.看起来信息很多但其实有用的就两点一个是你想checkout的Feature名字和版本另一个就是失败的原因。我反复强调一个习惯——看到License报错先截图然后把完整报错信息保存到文本文件里不要只记个大概。因为不同阶段报错原因不同后面排查的时候回头对照会很有效。我这次遇到的核心报错就是那句hostid of this system does not match the hostid specified in the license file这句话直接决定了排查方向——问题出在HOSTID匹配上而不是License文件本身损坏也不是网络不通。所以拿到报错先别慌着重新拷贝License文件先看原因描述。2. License验证机制拆解HOSTID为什么成了虚拟机上最大的变数2.1 FlexNet的License验证流程用大白话讲清楚Cadence IC618使用的是FlexNet/FlexLM这套License管理机制。理解它的工作方式比死记硬背报错处理要重要得多。可以把FlexNet想象成一个小区的门禁系统。License文件就是这个小区发给你的门禁卡卡片上写着你住在哪一栋哪一户也就是HOSTID对应的主机信息。FlexLM License Server就是小区大门口的门卫负责核对你的门禁卡和你的实际身份是否一致。当你打开Cadence IC618要跑DRC时工具会先去找License文件或者连接License Server然后跟门卫说我要进DRC这栋楼。门卫会做两件事一是看你卡上有没有这栋楼的权限也就是Feature二是看你是不是卡上登记的那个住户也就是核对HOSTID。只要其中一个对不上就拒绝放行反映到界面上就是License报错。2.2 HOSTID到底是个什么东西为什么虚拟机会在这方面栽跟头HOSTID的全称是Host Identifier直译就是主机标识符。在FlexNet体系里HOSTID最常见的形式就是MAC地址。当你在某个服务器上申请生成License文件时系统会读取这个服务器网卡的MAC地址把它作为唯一的身份标识写进License文件里。Linux下查看HOSTID很简单用一条命令就能看到lmutil lmhostid或者更直接地看网卡的MAC地址ip link show正常情况下输出的MAC地址长这样00:25:90:ab:cd:12去掉冒号就是002590abcd12License文件里登记的也是这个值。问题来了虚拟机环境里这块网卡并不是真实的物理网卡而是VMware或者VirtualBox虚拟出来的设备。虚拟网卡MAC地址的生成规则和物理网卡完全不同VMware默认会自动分配一个范围内的MAC地址。如果你当时在原环境申请License时登记的MAC地址是物理网卡的现在把Cadence搬到虚拟机上跑虚拟机的虚拟网卡MAC地址自然就对不上了。这就是很多人在虚拟机上遇到HOSTID报错的根本原因——License文件里写的是物理环境的主机标识而你实际运行的环境中系统看到的是一张完全不同的虚拟网卡。2.3 三种虚拟网络模式对License连接的影响差异说到虚拟机网卡就不能不提网络模式。VMware里最常见的三种模式对License的影响完全不一样这也是我这次排查中走弯路最多的地方。NAT模式VMnet8虚拟机通过宿主机共享IP上网。你可以把NAT想象成公司前台——外面的人只知道前台电话不知道公司内部还有分机。License Server如果在外网或者另一台服务器上NAT模式下虚拟机访问它是没问题的但对方服务器看到的来源地址是宿主机的IP不是虚拟机自己的IP。对于HOSTID校验来说NAT模式会变更虚拟机出外网的流量方式但MAC地址仍然是虚拟网卡自己的。桥接模式VMnet0虚拟机直接连接到物理网络相当于网络上的一台独立电脑。这种模式下虚拟机拥有独立的IP对外表现也最接近真实物理机。如果你需要让License Server直接识别虚拟机的IP和主机名桥接模式通常是最省心的。仅主机模式VMnet1虚拟机只能和宿主机通信不能访问外部网络。如果License Server在虚拟机外面这个模式基本就告别远程连接了除非做端口转发但那样就绕远路了。我后面排查时发现如果License Server就在自己电脑虚拟机上那网络模式对License连接影响不大因为走的是localhost但如果License Server在公司服务器上虚拟机作为客户端去连接桥接模式比NAT模式更稳定特别是NAT模式下偶发的端口映射问题很难排查。3. 虚拟机网络配置到HOSTID的排查全流程一条条踩过去3.1 第一步确认License文件里登记的到底是不是MAC地址拿到License报错先别管虚拟机网络的事第一步是打开你的License文件看看。Cadence的License一般是.dat结尾用文本编辑器打开重点看开头的SERVER行。SERVER myworkstation 002590abcd12 5280 DAEMON cdsd /opt/cadence/IC618/tools/bin/cdsd这一行里002590abcd12就是FlexNet记录的HOSTID5280是端口号。如果SERVER后面的HOSTID格式是一串字母数字那基本可以确定系统是用MAC地址作为标识的。但也有些License文件会用其他方式标识主机比如磁盘序列号。怎么判断看格式就知道了——MAC地址一定是12位十六进制字符0-9和a-f组成如果是其他格式就要当心。这一行里记录了什么后面你就要确保虚拟机系统里能看到什么。3.2 第二步查看虚拟机里系统实际识别到的HOSTID确认完License文件里的HOSTID下一步就是在虚拟机里查当前的HOSTID到底是多少。Linux系统下最直接的方法# 查看网卡MAC地址 ip addr show # 或者用FlexNet自带的工具 /opt/flexlm/bin/lmutil lmhostid注意一个细节如果虚拟机里有多块网卡比如VMware默认可能会有以太网卡再加上你手动添加的网卡lmutil lmhostid返回的结果可能是多行。这时候要特别留意——FlexNet在匹配HOSTID时只要其中一块网卡的MAC地址能匹配上License文件里的值就算通过。所以如果第一次查出来有好几个MAC地址别急先看看有没有一个和License文件里一致。我这次的情况就是这样虚拟机默认网卡的MAC地址005056c00008和License里的002590abcd12完全不一致但第一眼看到多块网卡时确实有点晕。3.3 第三步结合网络模式判断瓶颈出在哪里查到MAC地址不一致之后还不能马上动手去改——需要先想清楚你的License Server到底部署在哪里因为这会决定你改配置的方向。理一下自己的拓扑如果你的License Server在这台虚拟机自身上那问题就纯粹是HOSTID匹配跟网络模式没太大关系直接修改MAC地址即可。如果你的License Server在公司的物理服务器上虚拟机是客户端那你除了要确保HOSTID能匹配之外还要保证虚拟机到License Server的网络路径是通的。这时候就要检查网络模式了。检查网络连通性两条命令就够ping license_server_ip telnet license_server_ip 5280如果ping通但telnet不通说明网络层没问题但端口被防火墙拦了这就不是HOSTID的事是端口放行的事。如果ping都不通那说明虚拟机压根到不了License Server先把网络模式改成桥接再试。这里要特别提醒一下很多人习惯在虚拟机里直接ifconfig改IP但其实在VMware里改网络模式更彻底。NAT模式下偶发的连接重置在桥接模式下往往就不存在了如果条件允许直接给虚拟机配置桥接模式最省事。3.4 第四步修改虚拟机网卡MAC地址让HOSTID对上号确认HOSTID不一致后最直接的解决办法就是把虚拟机的MAC地址改成License文件里登记的那个值。VMware Workstation里修改有图形界面和配置文件两种方式。图形界面方式关闭虚拟机注意是关机不是挂起右键虚拟机 → 设置 → 网络适配器 → 高级 → 在MAC地址栏输入你License文件里的HOSTID每两个字符加冒号形如00:25:90:ab:cd:12然后把已连接勾选上确定后开机。VMX文件方式找到虚拟机目录下的.vmx文件用文本编辑器打开找到或者添加这几行ethernet0.address 00:25:90:ab:cd:12 ethernet0.addressType static ethernet0.present TRUE保存后重启虚拟机。这种方式的好处是可以批量处理比如你有多个虚拟机要统一HOSTID写个小脚本替换就行。VirtualBox方式稍微不同得用命令行来处理VBoxManage modifyvm 你的虚拟机名称 --macaddress1 002590abcd12改完之后重启虚拟机再用ip addr show或者lmutil lmhostid确认一下新的MAC地址已经生效。确认无误后再重新启动License服务或者直接重启Cadence工具看看DRC能不能正常跑起来。3.5 如果改MAC地址不方便可以考虑重新生成License文件改MAC地址是最直接的思路但并不总是最优解。有些公司的IT管理比较严格不允许随意修改虚拟机硬件配置还有些场景是License文件托管在专门的License Server上客户端不方便动。这种情况下更合理的做法是反过来用虚拟机当前真实的HOSTID去申请生成一个新的License文件。也就是说把你查到的虚拟机MAC地址提交给EDA工具厂商的授权管理员请对方基于这个新HOSTID生成一份新的License。从合规和后续维护角度来说这个方案甚至比改MAC地址更推荐。因为改MAC地址相当于让虚拟机去适配一个原来不属于它的身份以后如果这个虚拟机被克隆或者迁移又会面临同样的问题。而重新申请授权让License跟着实际的硬件标识走整个环境更健康。4. DRC场景下的进阶排查不只是HOSTID一个坑4.1 环境变量指向问题最容易忽略的隐形杀手HOSTID修好之后DRC能不能正常跑还取决于环境变量。Cadence工具找License时主要看这几个变量LM_LICENSE_FILEFlexNet通用的License路径或porthost格式CDS_LIC_FILECadence专用License变量CDS_LIC_TIMEOUT连接License Server的超时时间实践中经常遇到的情况是环境变量指向了老的License文件路径或者写成了物理机上的porthostname但虚拟机里主机名根本对不上。排查方法很简单先看变量到底设了什么echo $LM_LICENSE_FILE echo $CDS_LIC_FILE然后看看指向的路径是否存在、内容是否正确。如果你用的是porthost格式确保这里的hostname能被解析到正确的IP。我遇到过一种情况/etc/hosts里的记录和实际IP对不上导致每次连接License Server都要等超时才报错。有个小技巧如果你不确定环境变量正确写法是什么可以在命令行里临时指定License文件来验证export LM_LICENSE_FILE/path/to/your/license.dat virtuoso 如果这样能正常跑通DRC说明问题确实出在环境变量上回头把.bashrc或者.cshrc里的配置改对就行。4.2 DRC的Feature与License版本不匹配HOSTID和环境变量都没问题之后如果跑DRC还是报错那就要看Feature了。Cadence的DRC工具在IC618环境下常见的是PVSPhysical Verification System或者Assura。启动DRC时工具会向License Server申请对应的Feature。比如PVS的Feature名可能是PVS_DRC、PVS_QRC之类的Assura有Assura_DRC。如果报错信息里明确提到某个Feature名称你可以用lmutil lmstat -a查看License Server上这个Feature的状态lmutil lmstat -a -c 5280localhost这个命令会列出所有Feature的总量、已用数量、过期时间。如果看到Users of PVS_DRC: (Total of 10 licenses issued; Total of 10 licenses in use)说明License已经被占满了你要等别人释放。如果是(Total of 0 licenses issued)说明License文件里压根没有这个Feature那就要联系授权管理员确认是否购买了对应模块。4.3 跑批脚本里的隐藏坑环境变量没传递到DRC任务这里单独说一下跑批场景因为DRC经常不是手动跑的而是通过脚本批量提交的。很多人手动跑DRC没问题一放到脚本里就跑不起来十有八九是环境变量没传递到位。比如你通过bsub或者qsub提交任务系统可能没有把LM_LICENSE_FILE传给计算节点或者你在脚本里source了某个配置文件但这个配置文件里又重置了License环境变量。调试这种问题最笨但最有效的方法就是在脚本里显式地export一遍License变量而不是依赖外层的继承。export LM_LICENSE_FILE/opt/cadence/license/license.dat export CDS_LIC_FILE5280license_server_host再做一个保险操作在脚本开头加一个检查如果License变量没设置就直接退出并打印告警这样比跑到一半报错好定位得多。5. 常见问题速查与一次完整修复复盘5.1 常见报错速查表我把这次排查和之前积累的经验整理成一个速查表对着报错查原因会更直观。另外我也参考了网上大量同类问题的排查思路把容易混淆的情况做了区分报错信息关键词核心原因优先排查方向Invalid host. The hostid of this system does not match...HOSTID不匹配对比License文件中的HOSTID与虚拟机实际MAC地址Cannot connect to license server网络不通或端口被拦检查网络模式、ping / telnet、防火墙规则Cannot checkout feature xxxFeature不存在/数量不足/版本不匹配查看lmstat -a核对Feature名称和版本Licensed number of users already reached并发已满等待释放或检查License总量是否够用Feature has expiredLicense过期检查License文件的过期日期联系授权管理员You do not have permission to enter a license key...用户权限不够用系统管理员账号执行或检查当前用户的License目录权限5.2 一次虚拟机DRC License报错的完整修复复盘最后用一个真实场景完整串一遍排查过程把这个方法论固化下来。环境背景一台安装了Cadence IC618的虚拟机License Server在公司机房物理服务器上通过NAT模式上网。用户反馈说跑DRC报Invalid host错误。排查过程第一步我让用户把完整报错信息复制出来确认关键词是hostid不匹配。这一步直接排除了网络不通的问题把范围锁定到HOSTID。第二步查看License文件里的SERVER行记录登记的HOSTID是002590abcd12。然后在虚拟机里执行lmutil lmhostid输出结果是一串完全不同的值005056c00008。确认不一致。第三步检查虚拟机网络模式。发现是NAT模式理论上不影响HOSTID校验但为了排除网络因素我先telnet了一下License Server的5280端口发现是通的。这也印证了问题的核心不在网络通不通而在于身份校验。第四步修改虚拟机网卡MAC地址。在VMware Workstation里把网络适配器的高级MAC地址改成00:25:90:ab:cd:12为了保险我同时改了.vmx文件里对应的配置项设置ethernet0.addressType static。重启虚拟机。第五步验证。开机后先执行lmutil lmhostid确认输出已经是002590abcd12再检查环境变量最后直接跑一次DRC。这次就没有再报HOSTID相关错误了DRC正常跑通。整个流程其实不复杂难点在于每一步都要耐心确认尤其是修改MAC地址后一定要重启系统再验证不要改完就直接跑工具。写在最后趁着这次机会再分享两件小事。第一虚拟机里跑License类工具最难排查的往往不是工具本身而是虚拟化层引入的硬件差异。HOSTID这类问题本质上就是身份对不上识别到这一点排查时间能缩短一大半。第二修好之后建议把License文件的备份、虚拟机的MAC地址设置同步记录到团队的运维文档里不然过几个月再遇到类似问题又要重新走一遍弯路。另一个心得是遇到License问题先完整保存报错信息再多花两分钟理清License Server在哪、虚拟机是什么网络模式、License文件里登记的HOSTID是什么这三个问题理清了90%的报错都能在半小时内定位。我自己踩过不少次坑之后现在面对License报错已经不太慌了按流程走基本都能解决。希望这篇记录也能让你少走一些弯路。
返回列表