1.智能冰箱会泄密?M-Smart系统保障信息安全
智能化时代下,智能技术的快速迭代更新,依赖于大数据的深入挖掘。就冰箱行业而言,新一代智能冰箱与过往智能冰箱的根本区别之一,就是大数据技术的引入、挖掘和共享,方便用户跨平台操作,优化用户体验。
值得关注的是,大数据的共享和引入为冰箱用户带来便捷体验的同时,也带来了信息安全的隐患。主要原因在于多数冰箱企业硬件技术有了,却匮乏软件技术支撑:他们虽然研发了大屏智能冰箱,却没能力做智能系统,而是租用第三方智能系统,这样极其容易导致用户信息泄露,影响用户安全。
智能化时代,信息安全难保障?
据了解,目前冰箱市场上大部分品牌虽然做到了硬件智能,但仅是提供了智能屏幕,没有自己的信息技术系统,只能基于第三方技术去管理用户账号数据,存在较大的用户信息泄露隐患。
而这一隐患也被大部分品牌所忽略的,但这一隐患如若成为现实,智能冰箱所泄露的私密的健康信息,将会对用户造成无法估计的伤害,所以,在冰箱智能化的过程中,即便存在技术困难,用户的信息安全问题仍然应该得到品牌足够的重视。
M-Smart体系严密保护用户信息
为解决这个行业普遍存在的问题,美的自主研发出了M-Smart 安全体系,有自主运营的智能独立系统,独立运营用户数据,不涉及第三方。这样就可以杜绝用户个人信息泄露情况的发生,从而有效地保证用户的互联网信息安全。而这项先进系统,还在国家信息安全测评中心推出的“智能产品信息安全”认证项目中,率先获得了智能家用电器信息安全认证的最高级别A级安全认证。
在智能冰箱技术中,物联网WiFi作为实现冰箱智能联动的基础,也是重要的技术之一。美的冰箱除了在M-Smart 安全体系有所建树外,在WIFI安全技术上也创新性应用了“物联网安全WiFi模块技术”,使用中国信息安全测评中心授予的最高安全证书的EAL4+级安全芯片,最大限度地保障消费者家庭物联网的信息安全。
智能化时代下,信息安全仍然是基础性的需求,从M-Smart 体系到“物联网安全WiFi模块技术”,美的冰箱用技术创新满足用户的信息安全需求,也为其他智能技术的发展奠定基础,让用户放心享受智能化的科技成果,这是值得行业内其他品牌学习借鉴的。
2.制造业巨头们的数字/智能化转型之路盘点·美的
1968年在广东成立,以生产小型塑料制品起家。目前,提供多元化的产品和服务,包括以厨房家电、冰箱、洗衣机、及各类小家电为核心的消费电器业务,以家用空调、中央空调、供暖及通风系统为核心的暖通空调业务,以KUKA集团、美的机器人公司等为核心的机器人及工业自动化系统业务,以安得智联为集成解决方案服务平台的智能供应链(物流)业务。
注:美的集团转型之路,来源:美的集团
2011年,美的提出「自动化升级」战略——自制+外协,一部分自研制造,一部分招标外包制造。
2012年,美的成立自动化设计、制造团队,负责全集团「机器人」的自主研发、制造、安装、维护、保养等。
2013年,开始推动内部数字 1.0 的升级。
2014年,开始提出「智能制造+智慧家居(智能产品)」的「双智战略」,建立数字化美的;同年,组建「中央研究院」与「智慧家居研究院」,建立四级研发体系,启动「全球创新中心」,还成立了机器人研究所。
2014年3月,发布 M-Smart 智慧家居战略,目标是实现美的全品类产品的智能化。在这一战略中,美的智慧云起到了至关重要的作用,它通过云平台连接所有家电产品,整合各类资源,为客户提供智能化的家居服务。
除了给美的自身的设备联网、智能化提供支持外,美的智慧云还是一个开放平台,允许其他设备厂商接入,降低其智能产品在云端投入的成本,最终实现提升家电行业整体价值的目标。后来,美的又选择了AWS云平台作为美的智慧云海外部分的IT基础架构。
据称,自发布 M-Smart 智慧家居战略后,美的全面布局智能家居市场,构建全球开放的互联智能体系,由传统家电制造商向智慧家居创造商转型。
5月,美的作为发起单位参与组建「华南智能机器人创新研究院」。7月,成立美的机器人产业发展有限公司。同月,成立美的智慧家居科技有限公司(其前身为智慧家居研究院),完成智慧家居体系搭建。
8月,美的发布公告称,与安川电机(中国)有限公司盒子成立两家子公司——广东安川美的工业机器人有限公司、广东美的安川服务机器人有限公司,加快美的布局「智慧家居+智能制造」的「双智」战略,同时,正式迈入机器人市场。
美的与机器人的渊源:
2003年,美的从日本三洋集团引进入微波炉生产线,机器人作为生产线的标配被引入,第一批进入美的集团的机器人,解决了微波炉磁控管生产中的品质稳定性的问题。
2009年,美的研发伺服电机,并形成产业基础;
2013年,进入扫地机器人行业。
同月,美的还在深圳成立了美的人工智能研究所,专注于人工智能技术的先行研发,主要职责是为美的产品提供完整的人工智能解决方案,为美的提供智慧家居、机器人、智能物流、大数据等方面AI+BI技术服务。
2016年3月,美的参股安徽埃夫特智能装备有限公司17.8%股权。同月,正式发布M-Smart智慧生态计划,宣布实现智慧生活运营服务平台开放落地,提供智慧生活整体解决方案。
5月,美的宣布,要约收购德国机器人巨头库卡(KUKA)集团30%以上股权的意向,以填补其智能制造产业链中的重要一环。
(ABB、发那科、安川电机、库卡被称为世界机器人制造「四大家族」。)
11月,成立深圳美云智数科技有限公司(简称「美云智数」)把管理实践软件产品化,通过智能制造、物联网、大数据、云计算、移动互联网等技术,为企业提供全价值链云服务以及「企业+互联网」的全价值链解决方案,产品包含从制造端的供应链体系到营销以及大数据移动化和企业人资管理多个方面,赋予企业互联网化、移动化、智能化。
作为美的工业互联网对外输出服务的载体, 美云智数目前服务于20+行业领域,涵盖家电、汽车、地产、快消品、能源、航空、电子等行业。运营两年,收获了200多家客户,包括长安汽车、东风集团、海天味业、养生堂(农夫山泉)、古井贡酒、恒安集团、史丹利百得等。
2017年1月,美的收购库卡完成交割,以292亿元持有库卡约95%的股份。
2月,美的宣布收购以色列高创(SERVOTRONIX)——一家专注于运动控制和伺服电机的厂商——50%股份。有业内人士分析,美的此举在于完善了其机器人产业链,在机器人关键零部件制造领域完成了一次战略储备。(如今,美的已持有高创80%股份,美的称,此举为充实美的在运动控制和工业自动化专业领域的技术与产品储备。)
3月,美的开启新一轮战略转型升级,提出转型科技集团,即由传统的家电制造商,转变成为一家覆盖消费电器、暖通空调、机器人与自动化系统的科技集团。
美的宣布,将全面打通包括机器人、自动化生产、自动化物流、工业服务等环节的全产业链,整合成智能制造解决方案,向B端输出。根据美的发展的规划,美的将通过库卡和高创在机器人和自动化领域布局;同时通过高创旗下公司swisslog布局机器人商用领域;而家庭机器人,则通过美的、东芝和库卡三方共同完成。
4月,美的中央研究院成立三周年之际,美的宣布,已形成四级研发体系,其中,集团中央研究院层面开展颠覆性研究、前沿技术研究,及共性技术、未来技术研究;事业部层面负责个性化技术研究和产品开发;并在除美的全球研发总部外,陆续在美国、日本、韩国、德国等地建立海外研发创新中心。其中,美的美国研发中心(MARC)侧重研发面向美国市场的家电产品的专业技术,未来技术中心(ETC)在人工智能、芯片、传感器、以及智能机器人等领域发力。美的未来技术中心负责人王冬岩还表示:未来技术中心的AI主攻方向包括思考决策、知识理解、AI+BI数据分析和价值挖掘、计算机视觉、自然语音理解、工业AI、机器人、磁悬浮等的科研和产品开发。
注:美的四级研发体系
5月,美的旗下安得物流(2000年成立))更名为「安得智联」,明确定位于智能供应链,提供智能装备(自动化)解决方案,致力于成为智慧物流整体解决方案提供商。安得智联融合KUKA和swisslog(瑞仕格,是KUKA2014年新增的智能物流业务板块,专注提供仓储和配送中心自动化解决方案)顶级技术支持,打造智慧物流体系。
8月,美的媒体开放日上,美的在顺德全球创新中心首次发布智能搬运机器人(AGV)AIR-pick,剑指无人仓储业务。
2018年3月,美的在2018年度战略发布会上指出,人与机器将转变为更深入、更融合的协作关系,提出「人机新世代」战略,力图把大数据、AI驱动以及产品流程等知识理念的解决方案,和产品、产业布局进一步融通。
同月,安得智联首次将智慧物流带入AWE,展出了四大机器人:Air-pick、Air-carry、Optimus Prime及Bumblebee系统,分别代表不同的智慧仓储应用。据悉,未来,凭借它们的广泛应用,安得智联将打造高效率的全流程无人仓,推动物流自动化的实现。
在收购库卡两个月后,美的首次对外公布其在机器人领域的发展计划:加速推动库卡机器人中国业务整合,将库卡在中国的一般工业业务及为医院、仓库和配送中心实施先进的自动化解决方案的瑞仕格(库卡下属子公司)中国业务合并,由库卡和美的共同成立3家合资公司,进一步拓展工业机器人、医疗、仓储自动化三大领域的业务。
2018年,美的还整合了智慧家居业务,成立IoT公司,对云平台、美居APP、智能连接模块、大数据和售后服务等方面持续优化,连通集团各事业部与经营单位,以不断提升用户满意度。
10月19日,美的在美的全球创新中心举行了新一轮战略发布会,会上发布了全新的工业互联网平台M·IoT,美的成为国内首家集自主工业知识、软件、硬件于一体的完整工业互联网平台供应商。
M.IoT 重点打造 SCADA 平台、工业云平台、工业大数据平台和工业 SaaS 服务,将客户定制 C2M、供应协同、解决方案等服务标准化、平台化、云化。美的工业互联网平台解决方案不仅用于全球多个基地与上万种产品,并对其他行业与公司输出产品与解决方案。同日,美的旗下高端家电品牌COLMO正式发布。据介绍,COLMO将AI核心技术融于高端家电,利用图像识别、深度学习以及大数据专家系统,为用户提供舒适、智能的使用体验,为全球超级个体打造智能家居生活整体解决方案。
注:AI科技家电高端品牌COLMO开启未来人居新图景
美的《2018年度业绩报告》中提到:
2018年,美的持续推动在AI领域的探索应用:结合实际业务场景,构建了三大AI平台,包括图像质检平台、人脸识别平台和 OCR 识别平台,其中图像质检平台以注塑、总装、电子等生产车间为试点,提供电子 PCB 质检、空调面板外观检测、纸箱外观检测、轴承座质检等解决方案;
新建实时大数据处理中心并应用于美的工业互联网工厂,实时接入各个系统的增量数据,可实现实时数据同步和分析,为经营管理提供有力的数据支撑。
《报告》中还提到,库卡业绩下滑,几乎所有业绩指标均为负增长。
2019年5月,美的在2018年年度股东大会上表示,未来两三年内,不会做大规模的并购。美的集团董秘江鹏坦承,此前并购的整体整合速度慢于公司预期。
9月,广东粤云工业互联网创新科技有限公司注册成立,美的为主要股东。新公司的法定代表人为美的集团客户服务中心总经理金江。
10月,美的集团科技月上,董事长方洪波明确了美的未来五年的目标:「全面转型数字化和智能化,以软件驱动硬件。美的要从技术产品驱动转向创新驱动,要么第一,要么唯一。」
同月,美的集团IoT公司在美的全球创新中心发布了多项科技创新成果,覆盖智能连接、智能安全、智能芯片、智能场景、AI和5G应用等多个领域,譬如极速配网技术创造了4.62s(平均10秒以内)的行业最快配网连接纪录、业界首个家电全链路近场通信技术应用Smart Touch(一碰智联)、达到国测EAL4级金融级别的家电专用芯片HolaCon、行业首个智能场景AI交互平台等。
当月,美的还在北京举办了COLMO冰箱、厨热新品上市发布会。
3.半导体MCU产业研究:缺货潮加快国产替代,本土厂商迎机遇
(报告出品方/作者:民生证券,王芳、杨旭)
1 MCU 缺货严重,行业高景气有望贯穿至 2023 年
MCU 芯片紧缺,各大厂商全线涨价、交付延后。自 2020 年起全球陷入 MCU 缺货危机, 导致了部分车企出现停产的情况。目前各大厂商均出现交期严重延长的情况,部分甚至达到了 40 周以上。同时国内外各大半导体公司几乎全数发布涨价公告,普遍涨价 5%-15%,紧缺产品 甚至涨价幅度超 50%,部分产品涨价幅度甚至超过十倍。以 ST 主流型 32 位 MCU 为例,官网 标价 5.83 美元而立创商城标价 12.21 美元且仍需订货。
芯片紧缺下,渠道商部分产品上调幅度大于原厂。从海外 MCU 龙头看,其有 20%-70%的 营收通过渠道商,而在 2020 年底开始的芯片紧缺中,渠道商涨价现象较原厂更为显著。各别 产品调价超过 3 倍。库存方面,全国十大电子分销商万联芯城和唯样商城均面临严重的库存问 题,在售品牌库存均低于百颗;立创商城瑞萨 MCU 现货也仅余三款。
跟踪数据显示,除瑞萨交货周期一直较长外,其他公司正常交货周期普遍在 12-18 周,而 21Q1/21Q2 为增长至 16-55 周。产业链相关公司估计本轮缺货潮有望贯穿至 2023 年。
2 需求:市场空间巨大汽车、IoT 有望带来高速增长
2.1 下游涉及千行百业,体量 180 亿美元
MCU 下游市场涉及汽车、工业、消费电子等各个领域,2020 年市场规模达 175 亿美元。 MCU 作为一个具有处理器、存储器和外围设备的独立系统,广泛应用于各类电子产品中,其 中车用电子占比近 40%,工控市场占比近 30%,消费电子占比近 20%。2020 年受疫情影响, 市场规模有所下滑,为 175 亿美元,预计 2021 年重返正增长,2020-2025 年 CAGR 为 8%。
2.2 汽车、IoT 有望带来高速增长
2.2.1 工业:实现无线连接、环境感知、精准控制、电源管理等功能
工业级 MCU 主要起到无线连接、环境感知、精准控制、电源管理、人机交互等功能。工 业级 MCU 被广泛应用于工业自动化、智慧能源、智能楼宇、医疗保健等领域的多种设备。在 设备中,MCU 模块配合其它组件,可以实现无线连接、环境感知、精准控制、电源管理、人 机交互等功能。例如:
(1)在传送带、泵、风扇、压缩机等设备中,使用 MCU 的交流变频器 可以精确控制电机轴转速,从而实现变速控制。
(2)在小型工业机器人中,MCU 被用于控制 驱动机械臂的步进电机。利用旋转变压器等组件,MCU 可以提供高精度的运动控制。
(3)在 流量传感器中,MCU 能够收集流量传感器发送的信号,并将数据传输到用户交互界面。除此 之外,MCU 也被用于工业柴油机、呼吸机系统、能源网关等设备中。
2.2.2 家电:实现控制显示、马达、信号等功能
MCU 在传统白色家电中起着控制显示、马达、信号的作用。
(1)对于空调而言,空调遥 控器的 MCU 识别用户操作并控制红外线的发射以及遥控器上用户界面的显示。空调内机中的 MCU 处理遥控器和温度数据,并控制空调内机中风力风速相关的马达以及空调内机上的显示 界面,以及控制信号传递给空调外机。空调外机中的 MCU,则控制着压缩机与外机风扇。具有 节能、变频等功能的空调需要更高端的 MCU 单元进行控制。
(2)洗衣机与冰箱上的用户界面 同样由 MCU 进行显示控制。在冰箱中 MCU 控制着压缩机,而在洗衣机中则控制着进排水马 达以及洗衣马达。
结合小家电多样的功能需求,MCU 控制着各式小家电中不同的工作单元。
(1)以电饭煲 为例,MCU 首先控制着电饭煲用户界面的显示与声音提示,并且通过处理用户输入的操作以 及传感器检测到的温度,控制加热的时间与温度。
(2)除此之外,MCU 还广泛应用于微波炉、 电熨斗、饮水机、吸尘器等小家电中,主要起着显示控制、马达控制、系统控制、逆变控制等 多方面的控制功能,由于小家电功能丰富,MCU 需要控制的工作单元也十分多样。
2.2.3 汽车:电子电气架构调整,MCU 需求随之变革
传统汽车主要应用于中低端模块,数量大、单颗价值量小。汽车系统可以分为几大板块, 即动力总成、车身控制、信息娱乐、辅助驾驶系统等,而每个系统下又分多个 ECU 控制单元, 如发动机 ECU,以及雨刷、车窗、电动座椅、空调等 ECU。数量上,每个 ECU 都需要至少一 颗 MCU,平均下来传统汽车要用到几十颗 MCU,比如奥迪 Q7 和本田雅阁分别用到 38 颗和 21 颗 MCU。价值量上,由于主要应用于雨刷、车窗、座椅、灯光控制、空调面板,以及娱乐 信息、电池管理等局部功能,属于中低端 MCU 应用,单颗价值量偏低。整体看,MCU 在燃 油汽车中占全部半导体的 23%,在纯电动车占 11%。
自动化、电动化趋势下,电子电气架构重构,MCU 需求随之变革。随着汽车电子技术发 展,传统汽车分布式架构下的 ECU 数量不断增加,经济车型约需要 20 个 ECU,而高端车型 ECU 需求在 50 个以上。ECU 的增加使得汽车线束排线困难、软件维护与升级困难、模块间信 息沟通效率低,因此“域架构”概念随之被提出,如 Tier-1 厂商博世的经典五域:动力域、底盘 域、车身域、信息娱乐域,以及 ADAS 域,随之带来汽车 MCU 需求的变革。
ADAS 域:L3 及以上功能中,MCU 或被更高集成、更高算力的 SoC 替代。目前传统车 厂仍保留汽车分布式架构以实现 L0-L2 级别 ADAS 功能,MCU 增量与 ECU 增量成正比,同 时额外添加域控制器实现 L3 及以上级别功能,如奥迪和宝马的 L3 车型均追加 1 颗英飞凌的 Aurix MCU 整合到集成平台中。但集中式架构仍是未来智能汽车的发展方向,尤其在 ADAS 域上 SoC 将替代大部分 MCU 功能,MCU 需求数量将一定程度下降。如特斯拉 Autopilot 自动 驾驶平台 3.0 版本的中央超级计算机包含 ADAS 板和信息娱乐板,ADAS 板上采用 2 颗 SoC 并保留 1 颗冗余 MCU,信息娱乐板上也仅使用了 1 颗恩智浦的 MCU,整体 MCU 数量相较 1.0 版本下降;而在视觉和雷达模块上,特斯拉的三摄方案也只保留感知的基础功能,边缘 MCU 数量也下降明显。目前 L3 及以上场景中,ADAS 域控制器一般包含 1 颗或 1 颗以上的 算力更高的 SoC 芯片及 1 颗安全冗余 MCU 芯片。
动力域:纯电汽车相比传统燃油车,所需 MCU 数量、单价均提升。传统燃油车仍然是 1 个发动机管理 MCU、1 个变速箱 MCU 以及 1 个车用发电机 MCU 的设计。而电动汽车主要靠 三电系统,即电驱、电池和电控系统作为整车驱动力,MCU 需求反而会增加。从数量上看, BMS 电池管理系统大多为一主四从的经典结构,而主控制器和从控制器均各需要 1 颗 MCU; 整车控制器 VCU 需要配备 32 位 MCU,不同车型所需数量不一,电动汽车单车 MCU 将增加 6 颗以上。从价格上看,电动驱动对于 MCU 性能要求更严格,单颗 MCU 价值量更高。根据 贸泽电子数据显示,电池管理系统内 MCU 单颗价值量为百元到数百元。
车身域、底盘域:出于安全冗余考虑,MCU 数量不会下滑,但功能会简化为执行侧面。 我们认为,出于安全冗余的考虑,即便 ECU 融合,智能汽车车身及底盘相关 MCU 数量需求 也并不会下滑,但 MCU 功能会简化为执行层面,运算层级将交由集中平台处理。如特斯拉 Model3 采用 3 个车身控制器融合车身域和底盘域,前车身控制器中采用 1 颗主 MCU 和 3 颗 辅 MCU,左车身控制器采用 2 颗主 MCU 和 2 颗辅 MCU,右车身控制器采用 1 颗主 MCU 和 2 颗辅 MCU。其 3 个车身控制器融合了约 14 个 ECU 模块的功能,但最终仍采用了 11 个 MCU, MCU 数量较融合前并未产生较大变化。
2.2.4 IoT:更多产品实现联网控制,带来 MCU 增量需求
IoT 设备需求与 MCU 相契合,是未来各领域增量的重要来源。IoT 实际上并非一种新的 设备,而是指通过在传统设备上加入传感器+执行器+通信模组,以持续收集相关设备的数据并 进行分析,从而提供增强的服务和运营的产品。而 MCU 的“低功耗+安全+经济”特性,符合 IOT 设备要求,因此其他各类 IoT 设备中运用广泛,2017 年其在消费电子、汽车、工业领域的占 比分别为 33%、21%、13%。根据 IoT Analytics 预测,IoT 半导体组件市场将从 2020 年的 330 亿美元增长到 2025 年的 800 亿美元,CAGR 达 19%,其中 MCU、连接芯片组、AI 芯片组、 安全芯片组四类芯片价值量占比最大。
3 供给:国外厂商主导,中高低端错位竞争
3.1 8/32 位是主流市场,16 位被逐渐压缩
8 位常用于运算量较小的产品,32 位用于计算量较大的产品。MCU 分为 4/8/16/32 位, 其位数是指处理器寄存器的大小或宽度,即数据总线宽度,较大位数的寄存器意味着可以操作 大量的数据以减少时钟周期,从而达到更好的运算效率。正因为计算效率的不同,8/16/32 的 下游应用有所不同,8 位更适宜用于计算需求较小的产品,如 LCD、小家电、玩具等;32 位 更适宜用于计算量稍大的产品,如汽车电子(包括 ECU、雷达监测等)、工业领域。
8 位、32 位 MCU 成为市场主流,16 位定位尴尬逐渐淡出市场。从全球范围内看 8 位、 32 位 MCU 逐渐成为主流,16 位由于其不上不下的定位逐渐被挤出市场。2020 年,8/16/32 分 别占比为 23%/17%/59%。我们认为(1)32 位市场规模不断提升的原因在于:①MCU 成本快 速下降,32 位已于 8/16 位差别不大,且 MCU 本身占总生产成本比例较低,因此下游客户对 价格的敏感性一般;②产品对 MCU 的计算存储性能要求越来越高,需要 32 位 MCU 才能满 足。(2)8 位在性能不及 32 位情况下,仍具有一定市场的主要原因系:①虽然 32 位比 8 位价 格稍高,但是开发过程中难度更大且耗时,反而最终导致成本更高;②8 位也具备某些硬件优 势,比如静态电流更低导致功耗更低,某些简单计算操作下速度更快。
3.2 行业高集中度,全球七大巨头垄断市场
MCU 是电子设备的核心部件,其架构核心是 CPU 内核。MCU 是把 CPU 的频率与规格 做适当缩减,并将内存、计数器、USB、A/D 转换等周边接口都整合在单一芯片上,形成芯片 级的计算机。其在计算能力要求不算高的设备上应用广泛,如体温计、无线充电器和智能手环, 大到数控机床、机器人和汽车。MCU 架构根据指令结构可以分为 CISC(Complex Instruction SetComputer)架构和 RISC(Reduced Instruction Set Computer)架构,早期的 MCU 全部是基于 CISC 架构,如 8051 架构,而目前主流的架构则基本都是基于 RISC 架构。对于 MCU 厂商,其既可 选择向外部购买架构,如 ARM 公司的 Cortex-M 系列架构,也可自主研发架构,如微芯科技 公司旗下的 16 位微控制器产品线中 PIC24 系列采用的 PIC 架构,而 8 位微控制器产品线中的 AVR 系列采用的 AVR 架构。
MCU 复杂性,决定行业高集中度。MCU 的基本结构可以分成 CPU 处理器内核、存储器、 总线和外设四部分,内核通过寄存器控制外设,外设通过中断系统通知内核,二者之间通过总 线传输数据、地址以及控制信息。由于 MCU 的工作原理是根据预先编好的运算逻辑逐条执行 程序命令,故而也需要存储器存放已编信息。一般而言外设部分包括串口控制模块、SPI 模块、 I2C 模块、A/D 模块、PWM 模块、CAN 模块、EEPROM、比较器模块等,可通过 MCU 指令 直接控制。由于 MCU 不仅涉及数字电路技术(即 CPU),还涉及外设的模拟电路,其对芯片 公司的综合能力要求较高,因此我们看到:1)全球市场海外龙头集中度较高;2)MCU 公司 通常是 MCU 与模拟芯片同时涉足。
数轮大规模并购后,CR7>80%。总体看,国外前七大厂商占据了全球超过 80%的市场份 额,头部效应显著,其中瑞萨、恩智浦 > 微芯、意法 >其他三家。我们认为集中度较高的原 因包括:1)为争夺市场份额及布局物联网应用,MCU 主要厂商之间发生了数起大规模并购, 包括 NXP2015 年收购飞思卡尔,进军汽车电子领域,市占率上升至 19%;Microchip 在 2016 年收购 Atmel,市场占有率上升至 14%;Cypress 在 2015 年收购 Spansion,市场占有率达到 4%;2020 年 Cypress 被 Infineon 所收购,预计合并后市占率超过 15%,跃升为排名第三的厂 商。 2)MCU 下游应用通常更新迭代较慢、使用周期较长,因此倾向于能提供稳定解决方案 的供应商,较少更换供应商。
从公司定位看,英飞凌\TI 产品线较广,而其他公司视 MCU 为主力产品。从公司对 MCU 的定位上看,瑞萨、微芯、赛普拉斯营收中 MCU 营收占比位 50%及以上,恩智浦、意法半导 体营收中 MCU 占比也较高,而英飞凌、德州仪器 MCU 占比相对较少。
MCU 位数:8 位集中度低于整体集中度,意法通过 STM32 赢得 32 位市场。
(1)8 位:前 7 大厂商中有 5 家布局 8 位产品,CR5 在 70%上下,低于整体 MCU 市场集中度,我们认为 这与 8 位技术较为成熟且技术难度相对较低有关。
(2)16 位:7 大厂商中仅意法半导体没有布 局,CR6 接近 100%,其中微芯、德州仪器增长较快。
(3)32 位:意法在 2007 年发布了基于 ARM Cortex-M3 的 STM32 F1 系列(中低端),此后又不断开发出 F0-F7 系列,全面覆盖高中 低市场,通过更为完善的生态建设,逐步抢占 32 位市场,市占率由 2007 年的 6%提升至 2019 年的 17%,目前已与瑞萨、恩智浦市占率相当。
下游应用:汽车、工控、消费电子三大市场错位竞争。
(1)恩智浦、瑞萨定位高端汽车、 工控市场:恩智浦与瑞萨定位较为相似。其中恩智浦前期在医疗、通讯市场均有所布局,在 2015 年通过收购飞思卡尔进军汽车电子领域。瑞萨在汽车 MCU 市场具有领先地位,2014 年起就已 占据汽车半导体全球市场份额第一。
(2)微芯、意法定位中低端工控、消费电子:微芯 2016 年通过收购 Atmel,在工业控制领域形成全面覆盖的产品线。意法半导体在物联网和消费电子 领域全面布局,包括了工业网关、电信设备、家庭自动化等产品,但在高端的工控、车规领域 仍有所局限。
(3)其他:英飞凌在汽车电子、工业控制、医疗等领域长期经营,定位高端,价 格偏高,且在 2020 年完成对赛普拉斯的收购,完善汽车电子产品线的同时进入了消费电子领 域。德州仪器主要深耕工业控制与通信领域,在低功耗产品上有绝对的技术优势。
4 缺货潮下国内厂商迎发展窗口期,看好国内领先公司
4.1 现状:消费/工控有序推进,8 位对标微芯,32 位对标意法
大陆 MCU 玩家众多,但规模普遍偏小,32 位兆易体量最大,8 位中颖电子体量最大。与 全球市场厂商相比,国内厂商呈现玩家众多、规模普遍偏小的现状,且多为细分领域玩家,仅 兆易(32 位)、中颖(8 位)体量较大,营收接近 10 亿元。我们认为,目前大陆 MCU 厂商还 处于发展的早期,国产替代下看好 MCU 平台型公司的出现。
4.1.1 消费&工业:率先突破领域,部分细分市场站稳脚跟
8 位对标微芯、32 位对标意法,消费电子为主攻方向。目前国内 MCU 厂商的切入路径主 要有两条,
(1)切入技术难度较低的 8 位市场,大多数产品是基于 8051 架构,凭借性价比优 势+更全面周到的本地服务取胜,主要对标的海外公司为微芯;
(2)借力海外厂商的成熟生态, 大多数产品基于 ARM Cortex-M 架构,主要对标的外海公司为意法半导体(即对标 SMT32 产 品)。而不管是意法半导体还是微芯,其主要下游应用均是消费电子、工控。
此外,其他企业积极进入 MCU 产业。由于国内市场大+政府支持,国内 MCU 公司不断 涌现。如美的成立美垦半导体技术公司,专注家电领域芯片,产品包括 MCU、功率、电源、 IoT 等相关领域的芯片。再如力源信息自研的 MCU 芯片目前已流片成功,预计 21 年 7 月开始 让部分客户测试,21Q4 进入小批量量产。
8 位市场部分细分领域已有所突破。目前在 8 位领域做得较好的厂商包括中颖电子(专注 小家电)、宏晶电子等。以小家电市场为例,国内各小家电厂商主要通过两条路径打开市场: ①通过各种应用创新,试图通过创新技术建立起行业壁垒,如集烤/煮/炒/蒸于一体的小厨电; ②通过寻找市场空白,推出全新产品,如大力推广的消毒刀架等。相较于 MCU 其他领域来说, 小家电的 MCU 产品迭代稍快、需求差异化,而国内 MCU 厂商相对国外大厂,能够提供及时 的、更全面的本地服务。目前,大陆厂商中颖电子、台系厂商盛群半导体、义隆电子、松瀚电 子均已拥有较高市场份额,该四家厂商合计市占率达 78%。
4.1.2 汽车:从低端切入,并逐步开始高端产品研发
车规 MCU 需同时保障功能与安全性,评估指标远远严苛于消费类和工业级 MCU。车规 MCU 的评估指标无论从工作环境、使用寿命还是交付良率等方面,都要严苛于消费类与工业 级的 MCU。比如汽车发动机舱 MCU 工作温度区间为-40℃-150℃,车身控制部分为-40℃-125℃, 而消费类产品只需要达到:0℃-70℃。其它环境要求诸如湿度、发霉、粉尘、水、EMC,以及 有害气体侵蚀等等也往往都高于消费电子产品要求。
国产厂商从中低端车规 MCU 切入,并考虑研发高算力产品。车规级 MCU 由于认证周期 长、可靠性要求高,是国产替代最难突破的阵地,不过近年来不少国内厂商已经从与安全性能 相关性不大的中低端车规 MCU 切入,比如雨刷、车窗、遥控器、环境光控制、动态流水灯等 车身控制模块,并逐步开始研发未来汽车智能化所需的高端 MCU,如智能座舱、ADAS 等。 目前,行业内推进较为快速的厂商包括华大北斗、兆易创新、比亚迪半导体、杰发科技等。
4.2 切入机遇:贸易摩擦+缺货潮,国产腾飞窗口期
巨大市场空间+极低自给率,亟待国产替代。我们认为,国内 MCU 市场受益于庞大下游 制造业增长,包括家电产品、消费电子、汽车电子以及覆盖千行百业的工业产品,其增速高于 世界平均水平。2020 年中国 MCU 市场规模约 274 亿元(占全球的 23%,预计 2020-2024 年 CAGR 达 7%。从竞争格局看,2019 年 CR7=81%。中国厂商中,中国台湾厂商新唐等拥有一定市 占率,大陆厂商中颖电子、兆易创新等也开始占据一定市场份额。
硬件成本低,价格竞争不是生存之道。由于 MCU 通常较小且不需要用到先进制程(8 位 80/90nm 即可、32 位 40nm 即可),因此硬件成本较低,国内厂商较难通过价格优势切入。而 我们从产业链了解到,大陆公司价格相较海外巨头差异不明显。
生态系统是关键,大陆企业已在构建生态,32 位兆易是领头羊,8 位中颖电子已实现自 主开发。由于工程师需要在 MCU 的基础上做定制化的开放,因此除硬件性能外,良好的开发 环境、可得的学习资料对于工程师来说也极为关键。我们以业内生态建设完善著称的 STM32 为例,其生态系统主要由其自身及其合作伙伴共同建立,主要包括三大部分:硬件开发工具(包 括开发板等)、软件开发工具(从配置、开发、编程、监控的全开发过程)、学习资料(包括开 发者交流论坛、工程师培训课程、指导手册等),良好的生态,可以使得工程师无需借助 MCU 厂商的帮助即可解决开发过程遇到的各类 bugs。此外,STM 在推广过程中,还有意培养群众 基础,比如向各大高校推广宣传、向工程师免费发放开发板等。国内厂商初期主要是借力海外厂商的生态,最为多的即是开发与 SMT32 产品兼容的产品,因为这可以这使已使用 SMT32 的 产品以及学习过 SMT32 开发的工程师,在较小工作量的情况下,完成国产替代。而目前国内 厂商也开始着手构建生态,如兆易创新主要通过与六七家厂商合作构建软件生态,通过 GD32 大学计划培养群众基础,并联合全球合作伙伴开发 AIoT、电机控制和工业应用等丰富应用; 再如中颖电子自研软件开发工具。
“贸易摩擦+缺货潮”是大陆公司被市场认知的绝佳窗口期,看好未来持续性国产替代。相 较于 CPU、内存芯片等,MCU 在技术上更新迭代较慢、下游产品的生命周期较长、成本较低, 这导致厂商不会轻易替换供应商,通常在产品做更新迭代时才会考虑更换供应商。而 2019 年 开始的贸易摩擦+2020 年下半年开始的缺货潮给了国产替代良好的切入机会。如兆易从 2013 年开始向市场推广 MCU,但直到 2020 年才开始快速增长;中颖电子在大家电客户端的导入也 是在贸易摩擦之后才开始加速导入。我们认为,本次切入窗口期给予大陆 MCU 厂商被市场认 知的机会,一旦产品被认可,将会开启国产替代快速增长期。我们以意法 STM32 产品为例, 其在下游客户中的偏好程度已经连续数年超过其他厂商,而从市占率表现看,其市占率并未出 现跃升式增长,而是持续性的提升。这意味着一旦公司切入客户供应链,通过客户验证后即可 迎来持续性的放量增长。
未来格局判断:少数几家龙头+十余家细分市场中等规模公司。我们认为,在经历了上述 高增长期后,本土 MCU 厂商将会诞生数家大型企业,诸如兆易创新(大陆 32 位龙头,Flash 单元无需外购)、国民技术(32 位通用 MCU)、中颖电子(大陆 8 位龙头,家电 MCU)、比亚 迪半导体(汽车 MCU)等具备巨大潜力。此外,另有十几家中规模的企业凭借特色产品在细 分领域占有一定市场的行业格局;而其他规模较小,未能形成产品优势的企业将会陆续退出市 场。
4.3 兆易创新:大陆 32 位龙头,进入汽车领域打开发展空间
4.3.1 公司发展历程
国内存储龙头,三大业务并行。公司作为全球化芯片设计公司,拥有三大核心产品线分别 为 FLASH、32 位通用型 MCU 及智能人机交互传感器芯片,并提供整体解决方案。2005 年公 司前身芯技佳易微电子科技有限公司建立。2006 年至 2013 年期间,公司先后实现了第一代 SRAM、Nor Flash、Nand Flash 的量产,在存储领域站稳脚跟,并于 2012 年改制更名为北京兆 易创新科技股份有限公司。2016 年公司上市。2018 年收购思立微,完成传感器领域的布局。
中外合资,股权分散。公司股权结构较为分散,第一大股东董事长朱一明控股仅 8.5%, 同时朱一明曾在美国半导体行业工作多年,有着多年的行业经验。
4.3.2 公司业务分析
立足存储,布局 MCU 和传感器。公司主营三大业务,分别为存储器、微控制器和传感器。 存储器产品为公司营收占比最大的部分,公司产品涵盖了 NOR Flash 市场的全部容量范围, flash 产品累计出货量已近 160 亿颗。将于 2021H1 推出第一颗自有品牌的 DRAM 产品采用 19nm 的工艺节点,领先于行业主流的 3Xnm-20nm 工艺节点。公司在存储技术上的深厚积累 同时促进着 MCU 业务的发展。MCU 是由 CPU,存储单元和支持电路集成而成;相比于绝大 多数 MCU 公司通过第三方厂商购买存储单元,公司是行业内少数能在 MCU 采用自主生产的 Flash 的企业。
ARM 架构的 GD32 起家,并推出全球首款 RISC-V 产品,现产品种类已过百种。公司基 于 ARM Cortex-M 生产的 GD32 系列 MCU 已成为国内通用 MCU 领域主流的 32 位产品,拥 有三条产品线共 360 余款产品型号(覆盖 180-40nm 市场主流的工艺制程),累计出货数量已 超过 5 亿颗。公司在保持通用 MCU 领域领先地位的同时,积极布局超低功耗市场,传统车身 控制、新能源车新应用等汽车 MCU 市场,高性能工业控制、多媒体控制等市场,并推出配套 PMIC 和 MOSFET DRIVER 产品。2019 年公司推出了全球首颗基于 RISC-V 架构的 32 位通用 MCU 产品,主要面向物联网及超低功耗场景应用;相比 M3 内核的产品性能提升了 15%,动 态功耗降低了 50%,待机功耗更降低了 25%。公司在打造 RISC-V 开发生态已走在行业前列, 为未来在 AIoT 时代的新突破奠定基础。
4.3.3 公司财务分析
疫情期间保持增长,21Q1 迎来高增长。公司 2020 年实现营收 45 亿元,同增 40%;归母 净利润 8.8 亿元,同增 45%;净利率 20%,同增 0.7pct。21Q1 实现营收 16 亿元,同增 99%, 环增 21%;归母净利润 3 亿元,同增 79%,环增 45%;净利率 19%,同减 2pct,环增 3pct。
4.4 国民技术:国内安全领域领军,高安全性 32 位 MCU 产品
4.4.1 公司发展历程
国内安全芯片龙头,两大领域共同发展。作为国内信息安全 IC 设计领域领军企业,国民 技术专注于信息安全、SoC、无线射频等核心技术研发,拥有集成电路前端至后端全过程设计 与工程量产技术,业务聚焦两大领域:
1)集成电路领域:围绕“安全+通用”战略,提供覆盖 网络安全认证、通用微处理器、可信计算、无线通信四大类芯片产品。
2)新能源负极材料领 域:由子公司斯诺实业承担。源于国家“909”集成电路专项工程 2001 年公司成立;2010 年公 司上市;2018 年收购斯诺实业进军新能源行业,新增负极材料领域业务;2019 年推出五大系 列 30 余款 MCU 产品。
股权分散,董事长拟增资。截至 21Q1,前十大股东合计持股数仅占公司总股本的 9.5%, 其中第一大股东、董事长孙迎彤占股 3%。7 月 19 日公司发布公告宣布,董事长孙迎彤以 现金认购的方式购买公司增发的股票,认购完成后持股比例不低于 14%,且成为实际控制 人;结束公司长达 8 年的“无实控人”局面。
4.4.2 公司业务分析
安全:安全芯片领军企业,二十年技术积累。作为国家最早商用密码核心定点单位,公司 自成立以来一直深耕于深耕信息安全领域,拥有首个企业独立安全芯片攻防技术实验室,并牵 头制定了多项行业标准。公司以具有特定优势的安全密码算法性能、低功耗及无线连接传输技 术为核心,推出了多款极具竞争力的产品,所研发的新一代安全芯片产品 N32S032 获得首个 国际、国密双算法安全芯片 EAL5+级别证书。同时,公司也是国内最大的可信计算芯片厂商, 市占率超过 85%;2020 年完成了唯一一款国内、国际安全认证的可信计算芯片的研发,已进 入样品测试及产品资质认证阶。2020 年应用于 USB Key、蓝牙 Key、安全主控芯片的产品已 进入小批量阶段,公司将在保持传统网络安全领域竞争力的同时,扩展新兴产业应用。
通用:全系列 32 位 MCU 布局,深厚安全技术提供竞争力。公司聚焦于全系列、全产品 线路径 32 位 MCU,覆盖工业控制、智慧城市等多种物联网应用场景。2019 年首发推出五大 系列 30 余款 MCU,2020 年推出 70 余款基于 ARM Cortex-M0/M4 内核的通用安全 MCU 产 品。中高端系列已完成研发阶段,进入了验证和测试阶段,中低端系列则开展了平台化、系列 化的研制工作。MCU 产品将结合公司在 SoC 芯片设计、安全密码算法性能领域长期研发技术 的积累,内置嵌入式高速闪存、低功耗电源管理,集成数模混合电路,并内置硬件密码算法加 速引擎以及安全单元,使得产品具有高安全性、高集成度、高性能、高可靠性、低功耗等特色, 为客户提供具有差异化和全系列化的产品和解决方案。
4.4.3 公司财务分析
营收连年下滑,盈利能力不强。公司 2020 年实现营收 3.8 亿元,同减 3.8%;归母净利润 0.1 亿元,同减 89%;净利率-1.7%,同减 13pct。21Q1 实现营收 1 亿元,同增 23%,环减 6.7%; 归母净利润-0.2 亿元,同减 38%,环减 192%;净利率-20%,同减 2.3pct,环减 17pct。2017 年 出现亏损主要是由于产业基金的合作相关方失联。2018 年出现大幅亏损主要系:
1)主要客户 出现偿债风险。
2)安全主控芯片市场步入成熟期。
3)降低了系统集成等业务比例。
4)研发 投入增加,现有产品进行了更新换代而新产品因研发周期较长还未能产生经济效益。2020 年 公司受疫情影响,复工时间延迟,导致新产品对公司业绩贡献有所延后。
4.5 中颖电子:大陆 8 位龙头,大家电市场持续开疆拓土,汽车 电子有望年底发布
4.5.1 公司发展历程
二十七年稳步发展,成为国内 MCU 龙头。公司是专注于 MCU 及锂电池管理芯片领域的 芯片设计公司。中颖电子创立于 1994 年,2002 年开始设计自主品牌芯片。凭借深厚的技术积 累,公司分别于 2003 年推出家电控制芯片,于 2006 年推出电脑数码类控制芯片,实现了市场 份额的快速提升。2012 年公司上市。2014 年推出首颗 AMOLED 产品;2016 年推出首颗低功 耗蓝牙芯片;2018 年成为国内体量最大的 MCU 公司 2020 年收购澜至科技 WIFI 团队,增强 WIFI 蓝牙产品竞争力。
中外合资,台系管理。公司股权结构较为分散,前三大股东分别为威朗国际(24%), Win Channel(4.9%)和诚威国际(3.6%),现任董事长傅启明通过持有威朗国际 78%股份 成为中颖电子的实际控制人。管理层大多出身于中国台湾 IC 设计企业联华科(UMC),在 IC 设 计领域有着深厚的技术背景和丰富的管理经验。
4.5.2 公司业务分析
MCU 和 OLED 芯片为公司主营方向。公司主要从事自主品牌的集成电路芯片研发设计 及销售,并提供相应的系统解决方案和售后的技术支持服务。主要产品为工业控制级别的微控 制器芯片和 OLED 显示驱动芯片;其中 MCU 产品主要用于家电主控、锂电池管理、电机控 制、智能电表及物联网领域。
MCU:以家电市场为主,向下游拓展。公司在 MCU 市场深耕超 20 年,已成为国内体量 第一的公司。根据 2020 年年报,MCU 产品营收占比达 94%,营收达 9.5 亿元。公司针对低端 市场多采用 8 位 MCU;同时积极拓展产品应用,包括电表,电机,电脑外设等,为公司稳步 增长奠定基础。为了进军中高端市场,公司开发出了 32 位 ARM 内核产品,55nm 的高阶制程 产品现已进入研发阶段;IOT:收购澜至科技,结合自身低功耗蓝牙技术,进一步强化在该领 域的布局。
Fabless 模式,专注技术研发。2020 年公司研发投入达 1.7 亿元,占营业收入 17%, 同增 28%。截止 2020 年底,公司获得授权专利 106 项,其中 104 项为发明专利。
4.5.3 公司财务分析
20 年稳步增长,21Q1 超预期。公司 2020 年实现营收 10 亿元,同增 21%;归母净利润 2.1 亿元,同增 11%;净利率 20%,同减 2pct。21Q1 实现营收 3 亿元,同增 52%,环增 13%; 归母净利润 0.7 亿元,同增 61%,环增 15%;净利率 22%,环增 2pct。增长主要系 1)疫情期 间家电等下游需求旺盛,带动公司出货加速增长。2)MCU 产品供不应求带来的涨价效应。
4.6 芯海科技:MCU+ADC 平台型企业
4.6.1 公司发展历程
立足两大核心技术,全信号链 IC 领军企业。芯海科技依托两大核心技术:高精度 ADC 技术及高可靠性 MCU 技术,成为集感知、计算、控制、连接于一体的全信号链芯片设计企业。 公司成立于 2003 年。至 2009 年公司已推出三款高精度 ADC 芯片,打破高端领域国产制造的 空白。2014 年公司推出物联网一站式解决方案。2016 年公司上市。
股权结构集中,董事长技术背景深厚。创始人卢国建为公司现任董事长,通过直接或间接 控制公司 45%的股份成为公司最大股东;第二大股东海联智合为员工持股平台,持股 17%。 卢国建作为业内高精度 ADC 技术的专家,拥有二十年丰富芯片行业从业经验。
4.6.2 公司业务分析
依托核心技术,“1+3+N”战略布局全场景应用。公司依托高精度 ADC,高可靠性 MCU, 专注于测量算法以及物联网一站式解决方案的研发设计,发展模拟信号链+通用 MCU+健康测量 AIOT 三大产品线。公司芯片产品应用于智慧健康,压力触控,智能家居感知,工业测量, 通用 MCU 五大细分应用领域。公司目前以 “1+3+N”战略打造物联网全场景应用; “1”代表手 机周边应用,如压感芯片和快充方案等,现已应用于 16 款智能手机;“3”代表 TWS 耳机,手 表手环等智能可穿戴设备,人体成分分析仪;“N”代表基于 ADC、MCU、SoC 芯片的物联网 智能硬件应用,包括智能家居、消费电子、工业测量与控制、电源快充、数字电源等领域。
公司优势技术符合未来发展。5G 的逐步落地,物联网的加速发展,带动了智能终端设备 小型化、智能化的需求;终端设备微型化、模块化的趋势持续演进,以及物联网设备对于智能 化的需求增加,模拟芯片和 MCU 芯片的融合趋势日趋明显。公司两大核心技术将有力支撑公 司未来 MCU+模拟信号链双平台融合发展。目前公司已推出了国内首款高精度 24 位 SigmaDelta ADC,全球首家电阻式微压力应变技术的压力触控 SoC 芯片并量产,内置 USB PD3.0 快 充协议的 32 位 MCU。
4.6.3 公司财务分析
疫情期间稳步增长,21Q1 盈利出现下滑。公司 2020 年实现营收 3.7 亿元,同增 40%;归 母净利润 0.9 亿元,同增 109%;净利率 21%,同增 8.3pct。21Q1 实现营收 1 亿元,同增 84%, 环减 5%;归母净利润-0.03 亿元,同减 118%,环减 110%;净利率-2.8%,同减 31pct,环减 29pct。
4.7 乐鑫科技:WiFi MCU 大陆龙头企业
4.7.1 公司发展历程
全球领先的 AIoT 平台,WiFi MCU 领域龙头企业。乐鑫科技成立于 2008 年。2014 年起 公司进军 IOT 领域,发布了 ESP8266 系列芯片。2016 年公司发布 ESP32 系列芯片切入 AI 领 域。2019 年公司上市。乐鑫(香港)投资有限公司为公司最大股东,持股比例达 44%。公司 董事长 Teo Swee Ann 间接持有公司 44%的股份,为公司实际控制人。
4.7.2 公司业务分析
Fabless 经营模式,深耕 AIoT 领域。公司产品围绕“处理”+“连接”领域展开。除 2013 年 发布的 ESP8089 单 Wi-Fi 芯片应用于平板电脑和机顶盒市场以外,其他皆应用于物联网领域, 目前已有 ESP8266、ESP32、ESP32-C 以及 ESP32-S 四大物联网芯片产品系列。自 ESP32 系列 起,新增蓝牙和 AI 算法功能,芯片产品向 AIoT 领域发展。“处理”以 MCU 为核心,包括 AI 计算;“连接”以无线通信为核心,包括 Wi-Fi 和蓝牙技术。
新产品陆续推出,精准聚焦未来趋势。公司继续深耕于当前主流技术 WiFi 4 的同时, 积极向物联网未来发展趋势 WiFi 6 领域拓展,于 21 年 4 月 9 日发布首款支持 Wi-Fi 6 的 新品 ESP32-C6,已通过 Wi-Fi 联盟认证。面对下游智能终端市场日益增长的需求,公司 于 2020 年 12 月发布新款芯片 ESP32-S3,增加了 BLE 5.1、定位功能及语音交互等功能。 作为双核芯片,具有极强的 AI 运算能力和超低的功耗模式,可适用于要求更高的 A 应用 场景。
4.7.3 公司财务分析
受疫情影响严重,21Q1 有所回暖。公司 2020 年实现营收 8.3 亿元,同增 9.6%;归母净 利润 1 亿元,同减 34%;净利率 13%,同减 8.4pct。21Q1 实现营收 2.7 亿元,同增 119%;归 母净利润 0.3 亿元,同增 262%,环增 46%;净利率 13%,同增 5pct,环增 4.2pct。
4.8 比亚迪半导体:估值百亿的 IDM 巨头,国产车芯的领头军
4.8.1 公司发展历程
国内车芯领军,多领域国内第一。公司以车规级半导体为核心,同步推动工业、家电、新 能源、消费电子等领域的半导体业务发展,保持 IGBT、MCU、碳化硅多个领域的国内第一地 位,拥有从芯片设计、晶圆制造、模块封装与测试到系统级应用测试的全产业链 IDM 模式。 公司成立于 2004 年,前身为比亚迪公司的 IC 设计部,后经不断整合于 2020 年分拆上市并于 6 月 29 日获深交所受理。
股权集中,多轮融资。最大股东为母公司比亚迪,控股达 72%;后经五轮融资,其余 股东控股份额较小(第二大股东控股比例仅 2.9%),其中包括中芯国际等多家产业资本。
4.8.2 公司业务分析
多领域半导体业务发展,专注技术研发实现领先。业务方面,公司以车规级半导体为核心, 同步推动工业、家电、新能源、消费电子等领域的半导体业务发展,现已量产 IGBT、SiC 器 件、IPM、MCU、CMOS 图像传感器、电磁传感器、LED 光源及显示等产品。作为中国最大 的车规级 MCU 芯片厂商,车规级 MCU 截至 21 年 5 月已量产装车 1000 万颗并已有量产多款 工业级 MCU。技术领域,公司成功突破了高温封装材料、高寿命互连设计、高散热设计及车 规级验证等技术难题,成为全球首家实现 SiC 三相全桥模块在新能源汽车中大批量装车的企 业;此外公司也是国内少数能够实现车规级 IGBT 量产装车的 IDM 厂商。
募资扩充晶圆产能,保证全产业链一体化能力。公司通过自建产线、产能扩张的方式在全 球车规级半导体晶圆产能持续供给紧张的情况下保障晶圆的稳定供应,实现功率半导体和智 能控制 IC 关键生产步骤的自主可控,巩固芯片设计、晶圆制造、模块封装与测试全产业链一 体化经营能力。本次上市募资公司主要计划以现有 6 英寸硅基晶圆制造经验为依托,在宁波进 行 SiC 功率器件晶圆制造产线建设。同时将在长沙新建 8 英寸晶圆生产线,为产品的批量出货 提供有力保障,在缺芯浪潮中抓住时机提高市场占有率。
4.8.3 公司财务分析
营收略有波动,净利润逐年下滑。公司 2020 年实现营收 14 亿元,同增 31%;归母净利 润 0.6 亿元,同减 31%;净利率 4.1%,同减 3.7pct。2019 年主要受新能源汽车行业补贴退坡 和下游新能源汽车行业整体低迷影响;2020 年利润下降主要是因为公司实施了期权激励,支付费用为 7430 万元。 (若不考虑股份支付费用的影响,2020 年度归母净利润为 1.33 亿元)。
(本文仅供参考,不代表我们的任何投资建议。如需使用相关信息,请参阅报告原文。)
精选报告来源:【未来智库官网】。「链接」
4.深入理解DPDK-同步互斥机制详解
DPDK根据多核处理器的特点,遵循资源局部化的原则,解耦数据的跨核共享,使得性能可以有很好的水平扩展。但当面对实际应用场景,CPU核间的数据通信、数据同步、临界区保护等都是不得不面对的问题。如何减少由这些基础组件引入的多核依赖的副作用,也是DPDK的一个重要的努力方向。
原子操作
原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为“不可被中断的一个或一系列操作”。对原子操作的简单描述就是:多个线程执行一个操作时,其中任何一个线程要么完全执行完此操作,要么没有执行此操作的任何步骤,那么这个操作就是原子的。原子操作是其他内核同步方法的基石。
处理器上的原子操作
在单处理器系统(UniProcessor)中,能够在单条指令中完成的操作都可以认为是“原子操作”,因为中断只能发生于指令之间。这也是某些CPU指令系统中引入了test_and_set、test_and_clear等指令用于临界资源互斥的原因。
在多核CPU的时代,体系中运行着多个独立的CPU,即使是可以在单个指令中完成的操作也可能会被干扰。典型的例子就是decl指令(递减指令),它细分为三个过程:“读->改->写”,涉及两次内存操作。如果多个CPU运行的多个进程或线程在同时对同一块内存执行这个指令,那情况是无法预测的。
在x86平台上,总的来说,CPU提供三种独立的原子锁机制:原子保证操作、加LOCK指令前缀和缓存一致性协议。
一些基础内存事务操作,如对一个字节的读或者写,它们总是原子的。处理器保证操作没完成前,其他处理器不能访问相同的内存位置。对于边界对齐的字节、字、双字和四字节都可以自然地进行原子读写操作;对于非对齐的字节、字、双字和四字节,如果它们属于同一个缓存行,那么它们的读写也是自然原子保证的。
在这里特别介绍一下CMPXCHG这条指令,它的语义是比较并交换操作数(CAS,Compare And Set)。而用XCHG类的指令做内存操作,处理器会自动地遵循LOCK的语义,可见该指令是一条原子的CAS单指令操作。它可是实现很多无锁数据结构的基础,DPDK的无锁队列就是一个很好的实现例子。
CAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间先比较下旧值有没有发生变化,如果没有发生变化,才交换成新值,发生了变化,则不交换。
如:CMPXCHG r/m,r将累加器AL/AX/EAX/RAX中的值与首操作数(目的操作数)比较,如果相等,第2操作数(源操作数)的值装载 到 首 操 作 数 , zf 置 1 。 如 果 不 等 , 首 操 作 数 的 值 装 载 到AL/AX/EAX/RAX,并将zf清0。
Linux内核原子操作
软件级的原子操作实现依赖于硬件原子操作的支持。对于Linux而言,内核提供了两组原子操作接口:一组是针对整数进行操作;另一组是针对单独的位进行操作。
原子整数操作
针对整数的原子操作只能处理atomic_t类型的数据。这里没有使用C语言的int类型,主要是因为:
- 让原子函数只接受atomic_t类型操作数,可以确保原子操作只与这种特殊类型数据一起使用。
- 使用atomic_t类型确保编译器不对相应的值进行访问优化。
- 使用atomic_t类型可以屏蔽不同体系结构上的数据类型的差异。尽管Linux支持的所有机器上的整型数据都是32位,但是使用atomic_t的代码只能将该类型的数据当作24位来使用。这个限制完全是因为在SPARC体系结构上,原子操作的实现不同于其他体系结构:32位int类型的低8位嵌入了一个锁,因为SPARC体系结构对原子操作缺乏指令级的支持,所以只能利用该锁来避免对原子类型数据的并发访问。
原子整数操作最常见的用途就是实现计数器。原子操作通常是内敛函数,往往通过内嵌汇编指令来实现。如果某个函数本来就是原子的,那么它往往会被定义成一个宏。
原子性与顺序性
原子性确保指令执行期间不被打断,要么全部执行,要么根本不执行。而顺序性确保即使两条或多条指令出现在独立的执行线程中,甚至独立的处理器上,它们本该执行的顺序依然要保持。
原子位操作
原子位操作函数是对普通的内存地址进行操作的。原子位操作在多数情况下是对一个字长的内存访问,因而位编号在031之间(在64位机器上是063之间),但是对位号的范围没有限制。
在Linux内核中,原子位操作分别定义于include\linux\types.h和arch\x86\include\asm\bitops.h。通常了解一个东西,我们是先了解它怎么用,因此,我们先来看看内核提供给用户的一些接口函数。对于整数原子操作函数,如表4-1所示,下述有关加法的操作在内核中均有相应的减法操作。
表4-2展示的是内核中提供的一些主要位原子操作函数。同时内核
还提供了一组与上述操作对应的非原子位操作函数,名字前多两下划线。由于不保证原子性,因此速度可能执行更快。
DPDK原子操作实现和应用
原子操作在DPDK代码中的定义都在rte_atomic.h文件中,主要包含两部分:内存屏蔽和原16、32和64位的原子操作API。
内存屏障API
- rte_mb():内存屏障读写API
- rte_wmb():内存屏障写API
- rte_rmb():内存屏障读API
这三个API的实现在DPDK代码中没有什么区别,都是直接调用__sync_synchronize(),而__sync_synchronize()函数对应着MFENCE这个序列化加载与存储操作汇编指令。
对MFENCE指令之前发出的所有加载与存储指令执行序列化操作。此序列化操作确保:在全局范围内看到MFENCE指令后面(按程序顺序)的任何加载与存储指令之前,可以在全局范围内看到MFENCE指令前面的每一条加载与存储指令。MFENCE指令的顺序根据 所 有 的 加 载 与 存 储 指 令 、 其 他 MFENCE 指 令 、 任 何 SFENCE 与LFENCE指令以及任何序列化指令(如CPUID指令)确定
通过使用无序发出、推测性读取、写入组合以及写入折叠等技术,弱序类型的内存可获得更高的性能。数据使用者对数据弱序程序的认知或了解因应用程序的不同而异,并且可能不为此数据的产生者所知。对于确保产生弱序结果的例程与使用此数据的例程之间的顺序,MFENCE指令提供了一种高效的方法。
我 们 在 这 里 给 出 一 个 内 存 屏 障 的 应 用 在 DPDK 中 的 实 例 , 在virtio_dev_rx()函数中,在读取avail->flags之前,加入内存屏障API以防止乱序的执行。
*(volatile uint16_t *)&vq->used->idx += count;
vq->last_used_idx = res_end_idx;
/* flush used->idx update before we read avail->flags. */
rte_mb();
/* Kick the guest if necessary. */
if (!(vq->avail->flags & VRING_AVAIL_F_NO_INTERRUPT))
eventfd_write(vq->callfd, (eventfd_t)1);
原子操作API
DPDK 代 码 中 提 供 了 16 、 32 和 64 位 原 子 操 作 的 API , 以rte_atomic64_add()API源代码为例,讲解一下DPDK中原子操作的实现,其代码如下:
static inline void
rte_atomic64_add(rte_atomic64_t *v, int64_t inc)
{
int success = 0;3
uint64_t tmp;
while (success == 0) {
tmp = v->cnt;
success = rte_atomic64_cmpset((volatile uint64_t *)&v->cnt,
tmp, tmp + inc);
}
}
在VXLAN例子代码中,使用了64位的原子操作API来进行校验码和错误包的统计;这样,在多核系统中,加上原子操作的数据包统计才准确无误。
int
vxlan_rx_pkts(struct virtio_net *dev, struct rte_mbuf **pkts_burst, uint32_t rx_count)
{
uint32_t i = 0;
uint32_t count = 0;
int ret;
struct rte_mbuf *pkts_valid[rx_count];
for (i = 0; i < rx_count; i++) {
if (enable_stats) {
rte_atomic64_add(&dev_statistics[dev->device_fh].rx_bad_ip_csum, (pkts_burst[i]->ol_flags & PKT_RX_IP_CKSUM_BAD) != 0);
rte_atomic64_add(&dev_statistics[dev->device_fh].rx_bad_ip_csum, (pkts_burst[i]->ol_flags & PKT_RX_L4_CKSUM_BAD) != 0);
}
ret = vxlan_rx_process(pkts_burst[i]);
if (unlikely(ret < 0))
continue;
pkts_valid[count] = pkts_burst[i];
count++;
}
ret = rte_vhost_enqueue_burst(dev, VIRTIO_RXQ, pkts_valid, count);
return ret;
}
相关视频推荐
为什么dpdk越来越受欢迎,看完以后,让人醍醐灌顶
dpdk如何支持千万级别并发,c10m的极限瓶颈在哪里?
学习地址:C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂
需要C/C++ Linux服务器架构师学习资料加群812855908获取(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享
读写锁
读写锁这种资源保护机制也在DPDK代码中得到了充分的应用。
读写锁实际是一种特殊的自旋锁,它把对共享资源的访问操作划分成读操作和写操作,读操作只对共享资源进行读访问,写操作则需要对共享资源进行写操作。这种锁相对于自旋锁而言,能提高并发性,因为在多处理器系统中,它允许同时有多个读操作来访问共享资源,最大可能的读操作数为实际的逻辑CPU数。
写操作是排他性的,一个读写锁同时只能有一个写操作或多个读操作(与CPU数相关),但不能同时既有读操作又有写操作。
读写自旋锁除了和普通自旋锁一样有自旋特性以外,还有以下特点:
- 读锁之间资源是共享的:即一个线程持有了读锁之后,其他线程也可以以读的方式持有这个锁。
- 写锁之间是互斥的:即一个线程持有了写锁之后,其他线程不能以读或者写的方式持有这个锁。
- 读写锁之间是互斥的:即一个线程持有了读锁之后,其他线程不能以写的方式持有这个锁。
上面提及的共享资源可以是简单的单一变量或多个变量,也可以是像文件这样的复杂数据结构。为了防止错误地使用读写自旋锁而引发的bug,我们假定每个共享资源关联一个唯一的读写自旋锁,线程只允许按照类似大象装冰箱的方式访问共享资源:
- 申请锁。
- 获得锁后,读写共享资源。
- 释放锁。
- 我们说某个读写自旋锁算法是正确的,是指该锁满足如下三个属性:
- 互斥。任意时刻读者和写者不能同时访问共享资源(即获得锁);任意时刻只能有至多一个写者访问共享资源。
- 读者并发。在满足“互斥”的前提下,多个读者可以同时访问共享资源。
- 无死锁。如果线程A试图获取锁,那么某个线程必将获得锁,
这个线程可能是A自己;如果线程A试图但是永远没有获得锁,那么某个或某些线程必定无限次地获得锁。
读写自旋锁主要用于比较短小的代码片段,线程等待期间不应该进入睡眠状态,因为睡眠/唤醒操作相当耗时,大大延长了获得锁的等待时间,所以我们要求忙等待。申请锁的线程必须不断地查询是否发生退出等待的事件,不能进入睡眠状态。这个要求只是描述线程执行锁申请操作未成功时的行为,并不涉及锁自身的正确性。
Linux读写锁主要API
下面表4-3中列出了针对读-写自旋锁的所有操作。读写锁相关文件参照各个体系结构中的<asm/rwlock.h>。
读写锁的相关函数如表4-3所示。
DPDK读写锁实现和应用
DPDK读写锁的定义在rte_rwlock.h文件中,
rte_rwlock_init ( rte_rwlock_trwl ) : 初 始 化 读 写 锁 到unlocked状态。
rte_rwlock_read_lock(rte_rwlock_trwl):尝试获取读锁直到锁被占用。
rte_rwlock_read_unlock(rte_rwlock_trwl):释放读锁。
rte_rwlock_write_lock(rte_rwlock_trwl):获取写锁。
rte_rwlock_write_unlock(rte_rwlock_t*rwl):释放写锁。
读写锁在DPDK中主要应用在下面几个地方,对操作的对象进行保护。
- 在查找空闲的memory segment的时候,使用读写锁来保护memseg结构。LPM表创建、查找和释放。
- Memory ring的创建、查找和释放。
- ACL表的创建、查找和释放。
- Memzone的创建、查找和释放等。
下面是查找空闲的memory segment的时候,使用读写锁来保护memseg结构的代码实例。
/*
* Lookup for the memzone identified by the given name
*/
const struct rte_memzone * rte_memzone_lookup(const char *name)
{
struct rte_mem_config *mcfg;
const struct rte_memzone *memzone = NULL;
mcfg = rte_eal_get_configuration()->mem_config;
rte_rwlock_read_lock(&mcfg->mlock);
memzone = memzone_lookup_thread_unsafe(name);rte_rwlock_read_unlock(&mcfg->mlock);
return memzone;
}
自旋锁
何谓自旋锁(spin lock)?它是为实现保护共享资源而提出一种锁机制。其实,自旋锁与互斥锁比较类似,它们都是为了解决对某项资源的互斥使用。无论是互斥锁,还是自旋锁,在任何时刻,最多只能有一个保持者,也就说,在任何时刻最多只能有一个执行单元获得锁。但是两者在调度机制上略有不同。对于互斥锁,如果资源已经被占用,资源申请者只能进入睡眠状态。但是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,“自旋”一词就是因此而得名。
自旋锁的缺点
自旋锁必须基于CPU的数据总线锁定,它通过读取一个内存单元(spinlock_t)来判断这个自旋锁是否已经被别的CPU锁住。如果否,它写进一个特定值,表示锁定了总线,然后返回。如果是,它会重复以上操作直到成功,或者spin次数超过一个设定值。记住上面提及到的:锁定数据总线的指令只能保证一个指令操作期间CPU独占数据总线。(自旋锁在锁定的时侯,不会睡眠而是会持续地尝试)。其作用是为了解决某项资源的互斥使用。因为自旋锁不会引起调用者睡眠,所以自旋锁的效率远高于互斥锁。虽然自旋锁的效率比互斥锁高,但是它也有些不足之处:
- 自旋锁一直占用CPU,它在未获得锁的情况下,一直运行——自旋,所以占用着CPU,如果不能在很短的时间内获得锁,这无疑会使CPU效率降低。
- 在用自旋锁时有可能造成死锁,当递归调用时有可能造成死锁 , 调 用 有 些 其 他 函 数 ( 如 copy_to_user ( ) 、copy_from_user()、kmalloc()等)也可能造成死锁。
因此我们要慎重使用自旋锁,自旋锁只有在内核可抢占式或SMP的情况下才真正需要,在单CPU且不可抢占式的内核下,自旋锁的操作为空操作。自旋锁适用于锁使用者保持锁时间比较短的情况。
Linux自旋锁API
在Linux kernel实现代码中,自旋锁的实现与体系结构有关,所以相应的头文件<asm/spinlock.h>位于相关体系结构的代码中。
在Linux内核中,自旋锁的基本使用方式如下:
先 声 明 一 个 spinlock_t 类 型 的 自 旋 锁 变 量 , 并 初 始 化 为 “ 未 加锁”状态。在进入临界区之前,调用加锁函数获得锁,在退出临界区之前,调用解锁函数释放锁。例如:
spinlock_t lock = SPIN_LOCK_UNLOCKED;
spin_lock(&lock);
/* 临界区 */
spin_unlock(&lock);
获得自旋锁和释放自旋锁的函数有多种变体,如下所示。
spin_lock_irqsave/spin_unlock_irqrestore
spin_lock_irq/spin_unlock_irq
spin_lock_bh/spin_unlock_bh/spin_trylock_bh
上面各组函数最终都需要调用自旋锁操作函数。spin_lock函数用于获得自旋锁,如果能够立即获得锁,它就马上返回,否则,它将自旋在那里,直到该自旋锁的保持者释放。spin_unlock函数则用于释放自旋锁。此外,还有一个spin_trylock函数用于尽力获得自旋锁,如果能立即获得锁,它获得锁并返回真;若不能立即获得锁,立即返回假。它不会自旋等待自旋锁被释放。
自旋锁使用时有两点需要注意:
1、旋锁是不可递归的,递归地请求同一个自旋锁会造成死锁。
2、线程获取自旋锁之前,要禁止当前处理器上的中断。(防止获取锁的线程和中断形成竞争条件)
比如:当前线程获取自旋锁后,在临界区中被中断处理程序打断,中断处理程序正好也要获取这个锁,于是中断处理程序会等待当前线程释放锁,而当前线程也在等待中断执行完后再执行临界区和释放锁的代码。
再次总结自旋锁方法如表4-4所示。
DPDK自旋锁实现和应用
DPDK中自旋锁API的定义在rte_spinlock.h文件中,其中下面三个 API 被 广 泛 的 应 用 在 告 警 、 日 志 、 中 断 机 制 、 内 存 共 享 和 linkbonding的代码中,用于临界资源的保护。
rte_spinlock_init(rte_spinlock_t *sl) ;
rte_spinlock_lock(rte_spinlock_t *sl);
rte_spinlock_unlock (rte_spinlock_t *sl);
其中rte_spinlock_t定义如下,简洁并且简单。
/**
* The rte_spinlock_t type.
*/
typedef struct {
volatile int locked; /**< lock status 0 = unlocked, 1 = locked */
} rte_spinlock_t;
下 面 的 代 码 是 DPDK 中 的 vm_power_manager 应 用 程 序 中 的set_channel_status_all()函数,在自旋锁临界区更新了channel的状态和变化的channel的数量,这种保护在像DPDK这种支持多核的应用中是非常必要的。
Int
set_channel_status_all(const char *vm_name, enum channel_status status)
{
...
rte_spinlock_lock(&(vm_info->config_spinlock));
mask = vm_info->channel_mask;
ITERATIVE_BITMASK_CHECK_64(mask, i) {
vm_info->channels[i]->status = status;
num_channels_changed++;
}
rte_spinlock_unlock(&(vm_info->config_spinlock));
return num_channels_changed;
}
无锁机制
当前,高性能的服务器软件(例如,HTTP加速器)在大部分情况下是运行在多核服务器上的,当前的硬件可以提供32、64或者更多的CPU,在这种高并发的环境下,锁竞争机制有时会比数据拷贝、上下文切换等更伤害系统的性能。因此,在多核环境下,需要把重要的数据结构从锁的保护下移到无锁环境,以提高软件性能。
所以,现在无锁机制变得越来越流行,在特定的场合使用不同的无锁队列,可以节省锁开销,提高程序效率。Linux内核中有无锁队列的实现,可谓简洁而不简单。
Linux内核无锁环形缓冲
环形缓冲区通常有一个读指针和一个写指针。读指针指向环形缓冲区中可读的数据,写指针指向环形缓冲区中可写的数据。通过移动读指针和写指针就可以实现缓冲区的数据读取和写入。在通常情况下,环形缓冲区的读用户仅仅会影响读指针,而写用户仅仅会影响写指针。如果仅仅有一个读用户和一个写用户,那么不需要添加互斥保护机制就可以保证数据的正确性。但是,如果有多个读写用户访问环形缓冲区,那么必须添加互斥保护机制来确保多个用户互斥访问环形缓冲区。具体来讲,如果有多个写用户和一个读用户,那么只是需要给写用户加锁进行保护;反之,如果有一个写用户和多个读用户,那么只是需要对读用户进行加锁保护。
在Linux内核代码中,kfifo就是采用无锁环形缓冲的实现,kfifo是一种“First In First Out”数据结构,它采用了前面提到的环形缓冲区来实现,提供一个无边界的字节流服务。采用环形缓冲区的好处是,当一个数据元素被用掉后,其余数据元素不需要移动其存储位置,从而减少拷贝,提高效率。更重要的是,kfifo采用了并行无锁技术,kfifo实现的单生产/单消费模式的共享队列是不需要加锁同步的。更 多 的 细 节 可 以 阅 读 Linux 内 核 代 码 中 的 kfifo 的 头 文 件(include/linux/kfifo.h)和源文件(kernel/kfifo.c)。
DPDK无锁环形缓冲
基于无锁环形缓冲的的原理,Intel DPDK提供了一套无锁环形缓冲区队列管理代码,支持单生产者产品入列,单消费者产品出列;多名生产者产品入列,多名消费者出列操作。
rte_ring的数据结构定义
下 面 是 DPDK 中 的 rte_ring 的 数 据 结 构 定 义 , 可 以 清 楚 地 理 解rte_ring的设计基础。
/**
* An RTE ring structure.
*
* The producer and the consumer have a head and a tail index. The
particularity
* of these index is that they are not between 0 and size(ring). These
indexes
* are between 0 and 2^32, and we mask their value when we access the
ring[]
* field. Thanks to this assumption, we can do subtractions between 2 index
* values in a modulo-32bit base: that's why the overflow of the indexes is
not
* a problem.
*/
struct rte_ring {
char name[RTE_RING_NAMESIZE]; /**< Name of the ring. */
int flags; /**< Flags supplied at creation. */
/** Ring producer status. */
struct prod {
uint32_t watermark; /**< Maximum items before EDQUOT. */
uint32_t sp_enqueue; /**< True, if single producer. */
uint32_t size; /**< Size of ring. */
uint32_t mask; /**< Mask (size-1) of ring. */
volatile uint32_t head; /**< Producer head. */
volatile uint32_t tail; /**< Producer tail. */
} prod __rte_cache_aligned;
/** Ring consumer status. */
struct cons {
uint32_t sc_dequeue; /**< True, if single consumer. */
uint32_t size; /**< Size of the ring. */
uint32_t mask; /**< Mask (size-1) of ring. */
volatile uint32_t head; /**< Consumer head. */
volatile uint32_t tail; /**< Consumer tail. */
#ifdef RTE_RING_SPLIT_PROD_CONS
} cons __rte_cache_aligned;
#else
} cons;
环形缓冲区的剖析
这一节讲解环形缓冲区(ring buffer)如何操作。这个环形结构是由两个头和尾组成,一组被生产者使用,另一组被消费者使用。下面的图分别用prod_head、prod_tail、cons_head和cons_tail来指代它们。每个图代表一个简单的环形ring的状态。
单生产者入队
本小节讲述当一个生产者增加一个对象到环形缓冲区中是如何操作 的 。 在 这 个 例 子 中 只 有 一 个 生 产 者 头 和 尾 ( prod_head 和prod_tail)被修改,并且只有一个生产者。这个初始状态是有一个生产者的头和尾指向了相同的位置。
1、入队操作第一步(见图4-1)
首先,暂时将生产者的头索引和消费者的尾部索引交给临时变量;并且将prod_next指向表的下一个对象,如果在这环形缓冲区没有足够的空间,将返回一个错误。
2、入队操作第二步(见图4-2)
第二步是修改prod_head去指向prod_next指向的位置。指向新增加对象的指针被拷贝到ring(obj4)。
入队操作最后一步(见图4-3)
一旦这个对象被增加到环形缓冲区中,prod_tail将要被修改成prod_head指向的位置。至此,这入队操作完成了。
单消费者出队
这一节介绍一个消费者出队操作在环形缓冲区中是如何进行的,在这个例子中,只有一个消费者头和尾(cons_head和cons_tail)被修改并且这只有一个消费者。初始状态是一个消费者的头和尾指向了相同的位置。
1、出队操作第一步(见图4-4)
首先,暂时将消费者的头索引和生产者的尾部索引交给临时变量,并且将cons_next指向表中下一个对象,如果在这环形缓冲区没有足够的对象,将返回一个错误。
2、出队操作第二步(见图4-5)
第二步是修改cons_head去指向cons_next指向的位置,并且指向出队对象(obj1)的指针被拷贝到一个临时用户定义的指针中。
3、出队操作最后一步(见图4-6)
最后,cons_tail被修改成指向cons_head指向的位置。至此,单消费者的出队操作完成了。
多生产者入队
这一节介绍两个生产者同时进行出队操作在环形缓冲区中是如何进 行 的 , 在 这 个 例 子 中 , 只 有 一 个 生 产 者 头 和 尾 ( cons_head 和cons_tail)被修改。初始状态是一个消费者的头和尾指向了相同的位置。
1、多个生产者入队第一步(见图4-7)
首先,在两个核上,暂时将生产者的头索引和消费者的尾部索引交给临时变量,并且将prod_next指向表中下一个对象,如果在这环形缓冲区没有足够的空间,将返回一个错误。
2、多个生产者入队第二步(见图4-8)
第二步是修改prod_head去指向prod_next指向的位置,这个操作使用了前面提到的比较交换指令(CAS)。
3、多生产者入队的第三步(见图4-9)
这个CAS操作在core2执行成功,并且core1更新了环形缓冲区的一个元素(obj4),core 2更新了另一个元素(obj5)。
4、多生产者入队的第四步(见图4-10)
现 在 每 一 个 core 要 更 新 prod_tail 。 如 果 prod_tail 等 于prod_head的临时变量,那么就更新它。这个操作只是在core1上进行。
5、多生产者入队的第五步(见图4-11)
一 旦prod_tail在 core1 上 更新 完成 , 那么 也 允许 core2去更 新它,这个操作也在core2上完成了。
小结
原子操作适用于对单个bit位或者单个整型数的操作,不适用于对临界资源进行长时间的保护。
自旋锁主要用来防止多处理器中并发访问临界区,防止内核抢占造成的竞争。另外,自旋锁不允许任务睡眠(持有自旋锁的任务睡眠会造成自死锁——因为睡眠有可能造成持有锁的内核任务被重新调度,而再次申请自己已持有的锁),它能够在中断上下文中使用。
读写锁实际是一种特殊的自旋锁,适用于对共享资源的访问者划分成读者和写者,读者只对共享资源进行读访问,写者则需要对共享资源进行写操作。写者是排他性的,一个读写锁同时只能有一个写者或多个读者(与CPU数相关),但不能同时既有读者又有写者。
无锁队列中单生产者——单消费者模型中不需要加锁,定长的可以通过读指针和写指针进行控制队列操作,变长的通过读指针、写指针、结束指针控制操作。
(一)多对多(一)模型中正常逻辑操作是要对队列操作进行加锁处理。加锁的性能开销较大,一般采用无锁实现,DPDK中就是采用的无锁实现,加锁的性能开销较大,DPDK中采用的无锁数据结构实现,非常高效。
每种同步互斥机制都有其适用场景,我们在使用的时候应该扬长避短,最大限度地发挥它们的优势,这样才能编写高性能的代码。另外,在DPDK代码中,这些机制都在用户空间中实现,便于移植,所以又可以为编写其他用户空间的代码提供参考和便利。
相关文章推荐阅读: