跳转至

hardware

VIPT 与缓存大小和页表大小的关系

VIPT(Virtual Index Physical Tag)是 L1 数据缓存常用的技术,利用了虚拟地址和物理地址的 Index 相同的特性,得以优化 L1 数据缓存的读取。但是 VIPT 的使用,与页表大小和 L1 数据缓存大小都有关系。这篇博客探讨一下,VIPT 技术背后的一些问题。

Apple 处理器

M 系列

名称 CPU 核心 GPU 核心 神经网络引擎 内存带宽 内存大小
M1 4+4 7/8 16 8GB/16GB
M1 Pro 6+2/8+2 14/16 16 200GB/s 16GB/32GB
M1 Max 8+2 24/32 16 400GB/s 32GB/64GB
M1 Ultra 16+4 48/64 32 800GB/s 64GB/128GB
M2 4+4 8/10 16 100GB/s 8GB/16GB/24GB
M2 Pro 6+4/8+4 16/19 16 200GB/s 16GB/32GB
M2 Max 8+4 30/38 16 400GB/s 32GB/64GB/96GB
M2 Ultra 16+8 60/76 32 800GB/s 64GB/128GB/192GB
M3 4+4 10 16 100GB/s 8GB/16GB/24GB
M3 Pro 5+6/6+6 14/18 16 150GB/s 18GB/36GB
M3 Max 10+4/12+4 30/40 16 300GB/s/400GB/s 36GB/48GB/64GB/96GB/128GB

来源:

LoongArch 初尝试

背景

最近应龙芯要求把监控程序移植到了 LoongArch 32 Reduced 架构上,趁此机会体验了一下 LoongArch 相关的软件和系统。

I2C 协议

本文的内容已经整合到知识库中。

背景

最近数设课上,同学们开始购买外设,其中就涉及到 I2C 协议,因此顺带写一下 I2C 协议的教程,帮助同学们进行理解。

接口

I2C 协议涉及到两个信号:

  • SCL: 时钟信号,Master -> Slave
  • SDA:数据信号,Master <-> Slave

SPI 协议

本文的内容已经整合到知识库中。

背景

最近数设课上,同学们开始购买外设,其中就涉及到 SPI 协议,因此顺带写一下 SPI 协议的教程,帮助同学们进行理解。

接口

SPI 协议涉及到四个信号:

  • SCLK: 时钟信号,Master -> Slave
  • MOSI:数据信号,Master -> Slave
  • MISO:数据信号,Slave -> Master
  • CS:芯片使能,一般是低有效

在 LiteX 中使用 UART over JTAG

背景

在给 Alinx AX7021 适配 LiteX 的时候,遇到一个问题:PL 上没有连接串口,只有 PS 连接了串口,如果用 RISC-V 软核的话,就会面临无串口可用的情况,除非在扩展 IO 上自己定义一个串口。

因此研究了一下 LiteX 自带的 UART over JTAG 功能,在 Alinx AX7021 中调试出来了。

DRAM 的拓扑和训练

本文的内容已经整合到知识库中。

DRAM Training

DRAM 一直有一个比较麻烦的初始化过程,就是 DRAM Training,其中很重要的一步就是计算出各个数据线相对于时钟的偏移(skew)。这个偏移是怎么来的呢?

我们知道,对于 SRAM,如果想要更多的位宽,只需要把地址线和控制信号连接到多个 SRAM 上,然后把 SRAM 的数据信号并行连接到 FPGA 上就可以了,但是前提是要尽量保证等长,否则一样有偏移的问题。DRAM 也是采用类似的方法进行扩展的,但是 DRAM 通常需要并行连接很多个芯片,例如 8 个 x8 的芯片的合并成一个 64 位的 DDR SDRAM。此时数据线依然是并行连接,但是地址线和控制信号就出现了走线困难:很难在那么小的空间里,等长地把地址和控制信号分布到各个芯片上,而且还有信号完整性的问题。

RAM 读写冲突

背景

在 FPGA 或者 ASIC 中,通常都需要使用 RAM,通过读口、写口或者读写口来进行访问。常见的配置有单读写口(1RW),一读一写(1R1W)等等,读口通常有 1 个周期的延时。那么,如果在同一个周期内,读口和写口访问了同一个地址,会发生什么呢?可能会想到几种情况:

  1. 读和写都失败,读出的数据未定义,数据没写进去
  2. 数据写进去了,读出的数据未定义
  3. 数据写进去了,读出了写之前的旧数据
  4. 数据写进去了,读出了同一个周期写入的新数据

firtool 尝试

背景

Chisel 3.6 很快就要发布了(目前最新版本是 3.6.0-RC2),这个大版本的主要更新内容就是引入了 CIRCT 的 firtool 作为 FIRRTL 到 Verilog 的转换流程:

The primary change in Chisel v3.6.0 is the transition from the Scala FIRRTL
Compiler to the new MLIR FIRRTL Compiler. This will have a minimal impact on
typical Chisel user APIs but a large impact on custom compiler flows. For
more information, please see the ROADMAP.

因此提前测试一下 firtool,看看其和 Scala FIRRTL Compiler 有哪些区别,是否有更好的输出。

数字调制

背景

最近在学习 802.11,需要学习很多数字调制相关的知识,因此自学了一下通信原理。

在 Linux 上使用 Netgear A6210 USB 无线网卡

背景

最近要让一台 Linux 机器连接无线网,所以要买一个对 Linux 支持比较好的 USB 无线网卡。以前曾经用过一些 USB 无线网卡,但对 Linux 的支持大多不好,要么是需要 out of tree module,要么就忽然不能工作。因此前期的调研十分重要。

挑选 USB 无线网卡

在调研的时候,发现了 morrownr/USB-WiFi 仓库,里面总结了一些 Linux 支持比较好的 USB 无线网卡,由于是外国人写的,所以里面很多型号在国内都买不到,但实际上 USB 无线网卡的芯片组一般就是那些,所以需要先确定芯片组,再根据芯片组找对应的 USB 无线网卡。

CHI 学习笔记

本文的内容已经整合到知识库中。

CHI 介绍

CHI 协议是 AMBA 5 标准中的缓存一致性协议,前身是 ACE 协议。最新的 CHI 标准可以从 AMBA 5 CHI Architecture Specification 处下载。

相比 AXI,CHI 更加复杂,进行了分层:协议层,物理层和链路层。因此,CHI 适用于片上网络,支持根据 Node ID 进行路由,而不像 AXI 那样只按照物理地址进行路由。CHI 的地位就相当于 Intel 的环形总线。CHI 也可以桥接到 CCIX 上,用 CCIX 连接 SMP 的的多个 Socket,或者连接支持 CCIX 的显卡等等。

Intel 处理器

Xeon 系列

命名方式

  • 第一位数字:8-9 对应 Platinum,5-6 对应 Gold,4 对应 Silver,3 对应 Bronze
  • 第二位数字:对应代次,1 对应 1st Generation,2 对应 2nd Generation,依此类推
  • 第三位第四位数字:一般越大性能越好
  • 后缀:H/L/M/N/P/Q/S/T/U/V/Y/Y+/+
  • L:大内存
  • M:媒体/大内存
  • N:网络
  • P:虚拟化,IaaS
  • Q: 水冷
  • S:存储/搜索
  • T:长寿命
  • U:单插槽
  • V:虚拟化,SaaS
  • Y: Speed Select

AMD 处理器

Ryzen 系列

注:下表中省略了 PRO 前缀,部分型号有带 PRO 和不带 PRO 的版本,部分型号仅有带 PRO 的版本,部分型号没有带 PRO 的版本。

Ryzen 5000

代号 用途 核显 插槽 微架构 型号
Vermeer 桌面 AM4 Zen 3 5950X/5945/5900(X)/5845/5800(X(3D))/5700X/5645/5600(X(3D))
Chagall 工作站 sWRX8 Zen 3 5995WX/5975WX/5965WX/5955WX/5945WX
Cezanne 桌面 GCN5 AM4 Zen 3 5750G(E)/5700G(E)/5650G(E)/5600G(E)/5500/5350G(E)/5300G(E)
Cezanne 笔记本 GCN5 FP6 Zen 3 5980HX/5980HS/5900HX/5900HS/5800H(S)/5800U/5600H(S)/5600U/5560U/5400U
Barceló 笔记本 GCN5 FP6 Zen 3 5825U/5825C/5625U/5625C/5425U/5425C/5125C
Lucienne 笔记本 GCN5 FP6 Zen 2 5700U/5500U/5300U

注:Ryzen 5 5500 虽然代号是 Cezanne,但是去掉了核显。

ACPI 学习笔记

标准

ACPI 标准可以从官网下载。

ACPI 的表现形式为一颗树加若干个表,表的结构比较规整,里面每个字段都有固定的含义。树的结点可能是属性,或者是一些函数。操作系统可以操作上面的属性,调用 ACPI 中的函数,来进行一些硬件相关的操作。ACPI 一般与主板密切相关,主板厂家配置好 ACPI 后,操作系统就不需要给每个主板都写一遍代码了。

InfiniBand 学习笔记

本文的内容已经整合到知识库中。

概览

InfiniBand 的网络分为两层,第一层是由 End Node 和 Switch 组成的 Subnet,第二层是由 Router 连接起来的若干个 Subnet。有点类似以太网以及 IP 的关系,同一个二层内通过 MAC 地址转发,三层间通过 IP 地址转发。

在 IB 网络中,End Node 一般是插在结点上的 IB 卡(Host Channel Adapter,HCA)或者是存储结点上的 Target Channel Adapter。End Node 之间通过 Switch 连接成一个 Subnet,由 Subnet Manager 给每个 Node 和 Switch 分配 Local ID,同一个 Subnet 中通过 LID(Local ID)来路由。但是 LID 位数有限,为了进一步扩展,可以用 Router 连接多个 Subnet,此时要通过 GID(Global ID)来路由。

升级 Mellanox 网卡固件

背景

最近发现有一台机器,插上 ConnectX-4 IB 网卡后,内核模块可以识别到设备,但是无法使用,现象是 ibstat 等命令都看不到设备。降级 OFED 从 5.8 到 5.4 以后问题消失,所以认为可能是新的 OFED 与比较旧的固件版本有兼容性问题,所以尝试升级网卡固件。升级以后,问题就消失了。

安装 MFT

首先,在 https://network.nvidia.com/products/adapter-software/firmware-tools/ 下载 MFT,按照指示解压,安装后,启动 mst 服务,就可以使用 mlxfwmanager 得到网卡的型号以及固件版本:

Device Type: ConnectX4
Description: Mellanox ConnectX-4 Single Port EDR PCIE Adapter LP
PSID:        DEL2180110032
Versions:    Current
  FW         12.20.1820

升级固件

从 PSID 可以看到,这是 DELL OEM 版本的网卡,可以在 https://network.nvidia.com/support/firmware/dell/ 处寻找最新固件,注意需要保证 PSID 一致,可以找到这个 PSID 的 DELL 固件地址:https://www.mellanox.com/downloads/firmware/fw-ConnectX4-rel-12_28_4512-06W1HY_0JJN39_Ax-FlexBoot-3.6.203.bin.zip。

下载以后,解压,然后就可以升级固件:

mlxfwmanager -u -i fw-ConnectX4-rel-12_28_4512-06W1HY_0JJN39_Ax-FlexBoot-3.6.203.bin

升级以后重启就工作了。

考虑到类似的情况之后还可能发生,顺便还升级了其他几台机器的网卡,下面是一个例子:

Device Type: ConnectX4
Description: ConnectX-4 VPI adapter card; FDR IB (56Gb/s) and 40GbE; dual-port QSFP28; PCIe3.0 x8; ROHS R6
PSID:        MT_2170110021
Versions:    Current
  FW         12.25.1020

注意这里的 PSID 是 MT_ 开头,说明是官方版本。这个型号可以在 https://network.nvidia.com/support/firmware/connectx4ib/ 找到最新的固件,注意 PSID 要正确,可以找到固件下载地址 https://www.mellanox.com/downloads/firmware/fw-ConnectX4-rel-12_28_2006-MCX454A-FCA_Ax-UEFI-14.21.17-FlexBoot-3.6.102.bin.zip。用同样的方法更新即可。

还有一个 ConnectX-3 的例子:

Device Type: ConnectX3
Description: ConnectX-3 VPI adapter card; single-port QSFP; FDR IB (56Gb/s) and 40GigE; PCIe3.0 x8 8GT/s; RoHS R6
PSID:        MT_1100120019
Versions:    Current
  FW         2.36.5150

ConnectX-3 系列的网卡固件可以在 https://network.nvidia.com/support/firmware/connectx3ib/ 找,根据 PSID,可以找到固件下载地址是 http://www.mellanox.com/downloads/firmware/fw-ConnectX3-rel-2_42_5000-MCX353A-FCB_A2-A5-FlexBoot-3.4.752.bin.zip。

小结

如果遇到 Mellanox 网卡能识别 PCIe,但是不能使用,可以考虑降级 OFED 或者升级网卡固件。

可以用 mlxfwmanager 查看 PSID 和更新固件。根据 PSID,判断是 OEM(DELL)版本还是官方版本。如果是 OEM 版本,要到对应 OEM 的固件下载地址找,例如 https://network.nvidia.com/support/firmware/dell/;如果是官方版,在 https://network.nvidia.com/support/firmware/firmware-downloads/ 找。

CXL 学习笔记

本文的内容已经整合到知识库中。

背景

前段时间学习了 PCIe,趁此机会,进一步学习一下密切相关的 CXL。

CXL 的标准是公开下载的:https://www.computeexpresslink.org/download-the-specification,我目前参考的是 2022 年 8 月 1 日的 CXL 3.0 版本。