下载
中文
注册
Atlas 800-3000服务器SMMU配置建议

Atlas 800-3000服务器SMMU配置建议

2021/09/02

400

暂无评分
我要评分

问题信息

问题来源产品大类产品子类关键字
网上问题安装部署驱动固件SMMU、IOMMU、挂死、重启、压力测试、性能

问题现象描述

硬件配置:Atlas 800-3000服务器

问题现象: 在BIOS开启SMMU且OS设置为smmu strict模式下,某些压力场景可能会出现死机/重启。

关键过程、根本原因分析

关键过程:

在网上多个局点做压力测试时(smmu strict模式)发生死机/重启,通过分析发现触发条件均为strict模式下的低性能。

根本原因分析:

在x86/arm平台上,smmu strict模式下的性能远低于smmu non-strict模式下的性能。但当前x86平台os默认为non-strict模式,arm平台os默认为strict模式,会造成arm平台性能远低于x86的假象。

结论、解决方案及效果

结论:arm在SMMU strict模式下性能低下,产品竞争力相对弱势,且会由于此种性能瓶颈导致各种问题。

解决方案:在BIOS设置菜单中关闭SMMU选项(MISC config > Support Smmu > Disable)。

经验总结、预防措施和规范建议

建议BIOS默认将SMMU关闭,在需要开启SMMU的业务场景打开BIOS SMMU并根据需要设定为strict/non-strict/passthrough模式。具体可参考如下原则:
  1. 是否需要开启smmu?
    若该产品特性涉及如下层面,则需要开启。(如果产品不清楚smmu/iommu是啥,大概率不涉及此特性。)
    1. 资源隔离,外设只能访问分配给它的内存,不会因为出错或非法外设访问到其它内存资源;虚拟化需要该特性。
    2. 地址扩展,如使得32位外设可以访问48位的物理内存,没有SMMU只能访问低4G内存。
    3. 属性转换,内存属性转换,如Cache属性。
  2. 若需要开启smmu,开启之后应该选用哪种模式?

    性能:passthrough > non-strict > strict。

    隔离程度:strict > non-strict > passthrough。

    参考x86平台,由于non-strict模式为综合度较高的模式,建议使用该模式。

  3. 怎样设置smmu/iommu模式?

    BIOS里的配置是总开关,若BIOS里将smmu关闭,不管os下怎样配置smmu均为关闭状态。

    只有在BIOS里将smmu打开了,在os下做如下配置才能生效:

    smmu passthrough:os cmdline中添加iommu.passthrough=1。

    smmu nonstrict:os cmdline中添加iommu.non_strict=1或者iommu.strict=0。

    smmu strict:os cmdline中添加iommu.non_strict=0或者iommu.strict=1。(性能极差,不推荐。)

  4. 是否所有的os内核均支持non-strict模式?
    不一定;arm smmu non-strict为2018年底才合入到内核主干,各个os支持度不尽相同;可通过如下方法查询:
    1. 找到该os发行版源码drivers/iommu/arm-smmu-v3.c文件上库记录。
    2. 确认该文件是否有如下patch;若有则支持non-strict特性,若无则不支持。

      另外,Euler 2.8默认为non-strict模式,开源OS(ubuntu, redhat, centos, suse ...)默认为strict。

备注

本页内容