Skip to content

Bytemem Blog

  • Home
  • Kernel Developers
  • Contact
  • About

Bytemem Blog

Stuffs about linux

PCIe传输速率计算方法

18/06/2019 by changbin

PCIe是全双工的总线,一个lane由两对差分信号线,即4根信号线。Lane的数量称为位宽,在一个PCIe cycle,N个lane可同时接收和发送各N个比特信息。

不同版本的PCIe总线,其工作时钟频率不同,但一般都是在100MHz的基准频率上通过PLL达到的高频率。

PCe的带宽有几种衡量指标:

  • 原始传输速率(Raw Transfer Rate):即每一秒内传输的次数,单位是GT/s —— Giga Transmissionper second (千兆传输/秒),其数值等于PCIe总线的时钟频率,与lane数量无关。
  • 有效带宽(吞吐量):有效带宽和原始传输速率、Lane的数量、编码方案效率有关,只算单方向上的,单位是MB/s、GB/s。(1GB/s = 1Gbps/8)。编码方案效率:对于8b/10b编码,其值为0.8=(8/10),对于128b/130b编码,其值为0.985=(128/130)。

吞吐量 = 原始传输速率 x Lane的数量 x 编码方案效率 ÷ 8

  比如对于PCIe 3.0,总线频率为8GHz,编码方案为128b/130b,所以×16设备的吞吐量为:8 * 16 * 0.985 / 8 = 15.76 GB/s ≈ 16GB/s,

  • 实际带宽:吞吐量仅仅考虑了信号编码折损,但是总线上还得传输TLP头部、链路管理包,这些都是Overhead,实际带宽需要考虑这些损耗。

PCIe总线各版本的吞吐量数据如下:

我们一般所说的PCIe总线带宽指的吞吐量。需要注意的是,少数文章中提到的吞吐量是指双向吞吐量,即传输和发送速率的总和,这种计算方式下PCIe 3.0的吞吐量则由16GB/s变为32GB/s。不过双向吞吐量这种计算方式并不合理,过于乐观,所以很少使用,比如对于PCIe数据接收,CPU需要先向PCIe设备发送读取请求,然后等待并接收PCIe发送的数据,包含了两个方向的数据传递。

Post Views: 5,943

Post navigation

Previous Post:

Linux内核函数调用规范(function call convention)

Next Post:

中国国产CPU研发现状

发表评论 取消回复

您的电子邮箱地址不会被公开。

近期文章

  • 关于编程语言的思考
  • Rust语言学习材料
  • GCC目标三元组(Target Triplet)
  • 什么是匿名内存
  • 操作系统架构概述

近期评论

  • 12 USA America Proud Rubber Bracelets July 4th Red White Blue Patriotic Girl发表在《什么是匿名内存》
  • generic cialis no prescription发表在《Ubuntu各版本国内阿里云源列表》
  • buy cialis online us发表在《Ubuntu各版本国内阿里云源列表》

文章归档

  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年2月
  • 2019年7月
  • 2019年6月
  • 2019年5月

分类

  • DevTools
  • Linux Kernel
  • 未分类

标签

ftrace gdb NMI中断 PCIe rust Ubuntu X86 内核 阿里云

功能

  • 登录
  • 条目feed
  • 评论feed
  • WordPress.org
© 2021 Bytemem Blog | WordPress Theme by Superbthemes