PCIe基础:Root Complex 、Host Bridge、PCIe Bridge、Switch基本概念

news2024/9/23 9:36:22

PCIe基本概念理解

    • 1. 南北桥体系架构
    • 2. PCIe体系结构
    • 3. Root Complex(RC)
    • 4. PCIe总线(Bus)
    • 5. PCIe Device
      • 5.1 BDF(Bus Number, Device Number, Function Number)
      • 5.2 RCIE(Root Complex Integrated Endpoint)
      • 5.3 Port / Bridge
      • 5.4 Switch

为了方便理解,本文首先介绍了传统的南北桥体系架构,随后再介绍了PCIe的系统架构。

1. 南北桥体系架构

南桥和北桥是传统计算机架构中的两个重要组件,它们共同负责连接CPU(中央处理器)与其他主要组件,并协调它们之间的数据传输和通信。

North Bridge(北桥)

  • 负责连接CPU和高速主存储器(RAM),以及一些其他高速设备接口,如AGP(加速图形端口)。
  • 北桥是系统中速度最快的部分,它通过高速总线(如系统总线或FSB总线)与CPU通信,以确保快速的数据传输。
  • 北桥还负责处理内存控制、缓存控制、总线控制等任务,直接影响系统的性能和响应速度。

南桥(Southbridge)

  • 负责连接各种低速外围设备接口,如USB(通用串行总线)、SATA(串行ATA)、以太网、声卡、并行端口等。
  • 南桥通常包含了系统中较慢的外围设备接口,并负责处理外围设备的控制和管理。
  • 南桥也负责处理一些低速设备的DMA(直接内存访问)、中断控制、电源管理等功能。
    在这里插入图片描述
    现在,传统的南北桥架构逐渐被更现代化的架构所取代,如集成在CPU芯片中的内存控制器和I/O控制器,以及更快速的PCIe总线等。

2. PCIe体系结构

PCIe架构主要由五个部分组成:Root Complex、PCIe Bus、Endpoint、Port and Bridge、Switch。

其整体架构呈现为一个树状结构,如下图所示:
在这里插入图片描述

3. Root Complex(RC)

Root Complex是整个PCIe设备树的根节点,CPU通过它与PCIe的总线相连,并最终连接到所有的PCIe设备上。

由于Root Complex是管理外部IO设备的,所以在早期的CPU上,Root Complex其实是放在了北桥(MCU)上 ,后来随着技术的发展,现在已经都集成进了CPU内部了。

如下图所示,System Agent就是PCIe Root Complex所在的位置。

PCIe Root Complex所在的位置
随着PCIe Lane的增加,PCIe控制器和Root Complex的数量也随之增加。因此,系统里面可以存在不只一个Root Complex。

通过设备管理器来查看如下所示:
在这里插入图片描述

4. PCIe总线(Bus)

PCIe上的设备通过PCIe总线互相连接。

PCIe的总线并不是传统意义上共享线路的总线(Bus),而是一个点对点的网络,如果把PCI比喻成网络中的集线器(Hub),那么PCIe对应的就是交换机了。

换句话说,当Root Complex或者PCIe上的设备之间需要通信的时候,它们会与对方直接连接或者通过交换电路进行点对点的信号传输。
在这里插入图片描述

5. PCIe Device

PCIe上连接的设备可以分为两种类型:

  • Type 0:它表示一个PCIe上最终端的设备,比如我们常见的显卡,声卡,网卡等等。
  • Type 1:它表示一个PCIe Switch或者Root Port。和终端设备不同,它的主要作用是用来连接其他的PCIe设备,其中PCIe的Switch和网络中的交换机类似。

5.1 BDF(Bus Number, Device Number, Function Number)

PCIe上所有的设备,无论是Type 0还是Type 1,在系统启动的时候,都会被分配一个唯一的地址,它有三个部分组成:

  • Bus Number:8 bits,也就是最多256条总线;
  • Device Number:5 bits,也就是最多32个设备;
  • Function Number:3 bits,也就是最多8个功能。

这就是我们常说的BDF,它类似于网络中的IP地址,一般写作BB:DD.F的格式。

所有连接到PCIe总线上的Type 0设备(终端设备),都可以来实现PCIe的Endpoint,用来发起或者接收PCIe的请求和消息。每个设备可以实现一个或者多个Endpoint,每个Endpoint都对应着一个特定的功能。比如:

  • 一块双网口的网卡,可以每个为每个网口实现一个单独的Endpoint;
  • 一块显卡,其中实现了4个Endpoint:一个显卡本身的Endpoint,一个Audio Endpoint,一个USB Endpoint,一个UCSI Endpoint;

这些我们都可以通过lspci或者Windows上的设备管理器来查看:

$ lspci -t -v
-+-[0000:c0]-+-00.0  Advanced Micro Devices, Inc. [AMD] Starship/Matisse Root Complex
             # A NIC card with 2 ports:
 |           +-01.1-[c1]--+-00.0  Mellanox Technologies MT2892 Family [ConnectX-6 Dx]
 |           |            \-00.1  Mellanox Technologies MT2892 Family [ConnectX-6 Dx]
 +-[0000:80]-+-00.0  Advanced Micro Devices, Inc. [AMD] Starship/Matisse Root Complex
             # A graphic card with 4 endpoints:
 |           +-01.1-[81]--+-00.0  NVIDIA Corporation TU104 [GeForce RTX 2080]
 |           |            +-00.1  NVIDIA Corporation TU104 HD Audio Controller
 |           |            +-00.2  NVIDIA Corporation TU104 USB 3.1 Host Controller
 |           |            \-00.3  NVIDIA Corporation TU104 USB Type-C UCSI Controller

5.2 RCIE(Root Complex Integrated Endpoint)

说到PCIe设备,脑海里面可能第一反应就是有一个PCIe的插槽,然后把显卡或者其他设备插在里面,就像我们上面看到的这样。但是其实系统中有大量的设备是主板上集成好了的,比如,内存控制器,集成显卡,Ethernet网卡,声卡,USB控制器等等。

这些设备在连接PCIe的时候,可以直接连接到Root Complex上面。这种设备就叫做RCIE(Root Complex Integrated Endpoint),如果我们去查看的话,他们的Bus Number都是0,代表Root Complex。

在这里插入图片描述

5.3 Port / Bridge

还有一类通过插槽连接的PCIe设备,这些设备则通过PCIe Port来连接。

本质上,所有这些连接其他设备用的部件都是由桥(Bridge)来实现的,这些桥的两端连接着两个不同的PCIe Bus(Bus Number不同)。

比如,一个Root Port其实是靠两个Bridge来实现的:

  • 一个(共享的)Host Bridge(上游连接着CPU,下游连接着Bus 0);
  • 一个PCI Bridge用来连接下游设备(上游连着的是Bus 0(Root Complex),下游连着的PCIe的设备(Bus Number在启动过程中自动分配)) 。
    在这里插入图片描述

因此,我理解一个Bridge就是一个硬件,它总是连接着2条总线:

  • 因为Bridge是一个设备,所以第一个总线为Bridge所挂载的总线;
  • 另一方面Bridge是为了与在不同的总线之间进行数据传输和通信,尤其是不同类型的总线,因此另一个通信的总线就是目标类型总线。
    • 如果是PCI-PCI,那么目标下游总线就是PCI类型;
    • 如果是PCI-PCIe,那么目标下游总线就是PCIe类型;

这里面目标下游总线都是我方便自己理解而讲的,并没有真正对应的专业名词。

5.4 Switch

PCIe Switch是一种用于扩展PCIe总线连接能力的设备。它类似于网络中的交换机,允许多个PCIe设备连接到同一个PCIe总线,从而实现对多个设备之间的通信和数据传输的管理。 个人理解是一种PCIe转PCIe的桥。
PCIe Switch内部主要有三个部分:

  • 一个Upstream Port和Bridge:用于连接到上游的Port,比如,Root Port或者上游Switch的Downstream Port;
  • 一组Downstream Port和Bridge:用于连接下游的设备,比如,显卡,网卡,或者下游Switch的Upstream Port;
  • 一根虚拟总线:用于将上游和下游的所有端口连接起来,这样,上游的Port就可以访问下游的设备了。
    在这里插入图片描述

参考文章:

1. PCIe(一) 基础概念与设备树

2. 老男孩读PCIe之二:PCIe拓扑结构

3. PCIe基本概念

4. 计算机组成原理 — PCIe 总线

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1534649.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不要再这样做计划了

不论这一年大家过得怎么样,新的一年,都是一个新的起点。所有的不快、遗憾和失望,都让它们留在2023年,让我们轻装上阵,迎接全新的开始。 我想,应该许多朋友会在年初,制定自己关于新一年的年度计划…

3.1k stars的特斯拉数据伴侣神器

微信公众号:[开源日记],分享10kStart的优质开源项目。 TeslaMate 适用于你的 Tesla 的功能强大的自托管数据记录器。 用 Elixir 编写数据存储在 Postgres 数据库使用 Grafana 进行可视化和数据分析车辆数据发布到本地 MQTT Broker GitHub数据 3.1k stars121 watching458 forks…

传输介质介绍,数据链路层,MAC地址的构成和作用

简单网络 1.网卡 2.物理介质 3.协议栈 双绞线: UTP 非屏蔽双绞线 屏蔽式双绞线 水晶头 串口电缆:连接运营商 广域网一个用户接入到广域网,早期来讲,光纤 物理层:本质是通信,数据传输,介质产…

Docker之大鲸鱼

什么是Docker? Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 Docker常见命令? docker run -d \--name mys…

在conda下的sklearn库安装

比较坑的是它这个库在conda下不叫这个名字,所以直接conda install sklearn是不行的,输入下面的指令就能直接安装啦。 conda install scikit-learn

Kubernetes集群搭建 kubernetes集群安装

Kubeadm kubeadm 是 Kubernetes 社区提供的集群构建工具,它能够以最佳实践的方式部署一个最小化的可用 Kubernetes 集群。 但是 kubeadm 在设计上并未安装网络解决方案,所以需要用户自行安装第三方符合 CNI 的网络解决方案,如 flanal&#…

【消息队列开发】 实现Router类——交换机的转发规则

文章目录 🍃前言🍀判断routingKey是否合法🎄判断bindingKey是否合法🌴判断bindingKey 与 routingKey 是否匹配🌲测试匹配方法⭕总结 🍃前言 本次开发任务 实现Router类, 使用这个类, 来实现交…

【No.12】蓝桥杯可撤销并查集|查找|合并|撤销(C++)

前置知识 蓝桥杯并查集|路径压缩|合并优化|按秩合并|合根植物(C)-CSDN博客 可撤销并查集 关键注意 可撤销并查集的撤销功能如何实现可撤销并查集能不能用路径压缩 可撤销并查集(Reversible Union-Find)是一种扩展了标准并查集(Union-Find)数据结构的数据结构,它允…

你要的个性化生信分析服务今天正式开启啦!定制你的专属解决方案!全程1v1答疑!

之前在 干货满满 | 给生信小白的入门小建议 | 掏心掏肺版 中有提到,如果小伙伴们真的想学好生信,那编程能力是必须要有的!但是可能有些小伙伴们并没有那么多的时间从头开始学习编程,又或是希望有人指导或者协助完成生信分析工作&a…

数据库原理及应用期末+考研复试

文章目录 一、数据库系统概述二、数据模型2.1E-R数据模型2.2层次数据模型2.3网状数据模型2.4关系数据模型 三、数据库系统的体系结构3.1数据库系统体系结构3.2数据库系统3.3数据库管理系统 四、关系数据库结构化查询语言——SQL语言4.1基本表定义4.2查询结果显示4.3查询满足条件…

【JDBC编程】 Java程序操作数据库

目录 一、数据库编程的必备条件 二、什么是JDBC? 三、JDBC的使用 1. 准备工作 2. 建立数据库连接 2.1 加载驱动程序 2.2 数据库连接池技术 3. 正式操作 四、JDBC的局限性与MyBatis的优势 一、数据库编程的必备条件 编程语言,如Java&#xff0…

揭秘爆红AI图像增强神器:Magnific AI如何做到1亿像素放大?

最近有个很火的AI图像增强应用,叫Magnific AI。 你知道吗,它发布一个多月就有40万人注册了! 这个应用确实非常实用,它不仅利用AI技术放大了图像,还能提升分辨率,从而使图片呈现得更加清晰。 值得一提的是…

观后感-华为中国合作伙伴大会2024

非常荣幸能够参加华为中国合作伙伴大会 2024。以往我参加的会议多数是由政府单独举办的,然而这次进入会场后,我第一感觉就是无比震撼。我从未想过一家企业竟能举办如此规模宏大的会议,当我签到的时候才发现,自己已经是两万多名参会…

环境变量配置

举一个小例子来演示一下环境变量配置。 在CMD中打开QQ界面,首先需要知道QQ.exe文件的完整路径。一旦有了这个路径,可以按照以下步骤操作: 打开CMD窗口。可以通过按下Windows键R,输入“cmd”并回车来打开它。在CMD窗口中&#xf…

2024年语言艺术、人文发展与教育国际会议(ICLAHDE2024)

2024年文学、历史与艺术设计国际会议(ICLHAD2024) 一、【会议简介】 2024年国际语言艺术、人文发展与教育会议(ICLAHDE2024)将在中国昆明举行,主题为“语言、人文与艺术”。ICLAHDE汇集了来自世界各地语言艺术、人类发展和教育领域的学者、工…

图书推荐|图解算法:C语言实现+视频教学版

零负担理解数据结构及其算法的设计,零基础也能快速上手编程。 本书内容 《图解算法:C语言实现视频教学版》是一本综合讲述数据结构及其算法的入门书,力求简洁、清晰、严谨、且易于学习和掌握。 《图解算法:C语言实现视频教学版》…

【系统架构师】-第6章-数据库设计基础知识

1、三级模式-两级映像 外模式:视图、用户与数据库的接口 概念模式:表 内模式:存储方式,索引创建等 1)外模式-模式映射: 视图与表的映射,表数据发生修改,只需要修改映射&#xf…

淘宝店铺如何从1688一键铺货?官方授权API接口,可满足多样化上货需求

那么新手卖家如何将1688的源头厂货一键铺货到淘宝店铺呢?下面我教大家几招: 1、通过淘宝复制一键复制上货 淘宝API接口采集 taobao.item_get 公共参数 名称类型必须描述keyString是调用key(必须以GET方式拼接在URL中)secretStr…

销售数据分析怎么做?用好这5个数据分析方法与模型就足够了。

企业经营其实简单来说就是做买卖,有了买卖自然就产生了销售数据,那怎么能让这些销售数据产生价值呢?答案就是数据分析。通过对销售数据的分析,可以帮助企业及时洞察市场动向,发现企业销售过程中的问题,调整…

用户行为分析是什么?为什么我们需要 bitmap?

本文非常好:https://blog.bcmeng.com/post/doris-bitmap.html meta搜也非常好:https://metaso.cn/ 用户行为分析是什么?简单说,就是围绕全体用户,做各种分析。用户就是一个个的 id。id 在不同方面有各种行为记录&…