- 博客(112)
- 收藏
- 关注
原创 CXL UIO Direct P2P学习
在CXL协议中,UIO(Unordered Input/Output) 是一种支持设备间直接通信(Peer-to-Peer, P2P)的机制,旨在绕过主机CPU或内存的干预,降低延迟并提升效率。● 目标场景:允许CXL设备(如加速器、内存扩展设备)直接访问其他设备的HDM(Host-Managed Device Memory)或主机内存,无需通过主机CPU中转。● 关键能力:○ HDM访问:通过UIO路径直接读写远端设备的HDM。
2025-03-28 11:00:43
1106
原创 CXL协议之FM(Fabric Management)解释
FM在CXL生态中扮演“中枢控制器”角色,通过标准化的MCTP接口和隧道机制,实现对复杂CXL拓扑(含交换机、池化设备)的统一管理。其设计兼顾了直接连接的效率与间接连接的灵活性,同时支持事件驱动的异步管理模型,为高性能计算与资源池化场景提供了关键基础设施支持。
2025-03-19 15:24:16
818
原创 CXL Hotplug流程
CXL(Compute Express Link)3.0 在 PCIe Hot-Plug 模型的基础上扩展了对缓存一致性(Coherency)和内存语义(Memory Semantics)的支持,同时定义了针对 Hot-Add(热添加) 和 Managed Hot-Remove(受控热移除) 的流程。
2025-03-17 10:33:58
956
原创 PCIe协议之RCB、MPS、MRRS详解
PCIe总线的存储器写请求、存储器读完成等TLP中含有数据负载,即Data Payload。Data Payload的长度和MPS(Max Payload Size)、MRRS(Max Read Request Size)和RCB(Read Completion Boundary)相关。RCB(Read Completion Boundary)是PCI Express(PCIe)总线中定义的一个参数,它指定了在完成PCIe内存读取请求时可以返回的数据包的最大对齐字节边界。
2025-03-10 11:07:25
6634
17
原创 CXL协议 Register BIR(Base Indicator Register)解释
在CXL协议中,的作用是指定使用设备功能(Function)的哪个BAR(基址寄存器)或Enhanced Allocation条目来映射CXL寄存器到内存空间。Register BIR是CXL协议中用于定位寄存器映射基址的关键字段,通过选择特定的BAR或EA条目,确定CXL寄存器在内存空间中的位置。
2025-02-19 09:00:00
1763
原创 CXL ALMP(ARB/MUX Link Management Packet)理解
ALMP(ARB/MUX Link Management Packet) 是CXL协议中由ARB/MUX层生成和处理的专用管理报文,用于协调链路电源状态切换(如L0s/L1)和虚拟链路状态机(vLSM)同步。ALMP是ARB/MUX层的控制平面报文,专用于以下场景:协调多协议(CXL.io、CXL.cachemem等)的链路状态切换(如L1进入/退出)。维护各协议独立的虚拟链路状态机(vLSM) 状态同步。在物理层(PHY)与链路层(Link Layer)之间仲裁电源管理请求。
2025-02-18 14:30:14
774
原创 CXL Virtual Hierarchy (VH) Enumeration理解
在 CXL 3.0 协议中,CXL Virtual Hierarchy (VH) Enumeration 是一种针对 CXL 虚拟层级(Virtual Hierarchy) 设计的设备枚举机制,它允许软件将物理连接的 CXL 设备抽象为多个逻辑层级(虚拟层级),从而实现更灵活的资源管理和拓扑扩展。与传统的 PCIe 枚举相比,CXL VH 枚举在协议特性、拓扑抽象和资源分配机制上有显著差异。本质:VH 是一个逻辑上的设备层级结构,可能与物理连接拓扑不同。
2025-02-18 13:48:16
579
原创 Python进阶之-cffi库使用详解
CFFI(C Foreign Function Interface)是一个提供与C代码交互的Python库。它允许Python代码调用C语言代码,并在Python中使用C数据结构。CFFI主要有两种接口:ABI接口和API接口。ABI接口用于直接调用C函数,而API接口用于编写C扩展。// add.c")# 加载自定义动态库lib = ffi.dlopen("./libadd.so") # Windows 用 ".\\add.dll"# 调用 C 函数。
2025-02-12 10:30:07
391
原创 C语言学习之-选择语句
在C语言中,逻辑表达式、if语句和switch语句是控制程序流程的重要组成部分。下面将详细解释这三者,并附上示例代码加以说明。逻辑表达式使用逻辑运算符来评估条件。if语句允许根据布尔条件来执行特定的代码块。switch语句适合于多个不同条件的情况,通过匹配常量来执行不同的代码块。
2025-02-08 17:05:30
311
原创 Python中pytest-cov使用详解
通过 pytest-cov,您可以方便地整合测试和代码覆盖率,获得对测试效果的直观反馈。上述示例展示了 pytest-cov 的基本用法,您可以根据需要进一步定制报告和配置。从上面的执行结果可以看到,test_fun里每个函数都执行率为100%,但是add_fun里函数的覆盖率只有58%,说明其中有部分判断没有覆盖到。一旦您安装好了 pytest-cov,可以在执行 pytest 时添加 --cov 选项来生成覆盖率报告。首先,您需要安装 pytest 和 pytest-cov。
2025-01-06 16:09:54
585
原创 PCIe6.0学习小记
从以上图4可知,PAM4的4个电平(Level0,1,2,3)进行格雷编码(Gray Coding),4个电平对应的格雷编码分别是00,01,11,10,格雷编码的方式是要求相邻符号,每次只能变化一位,且首尾符号也只是变化一位,这样的编码方式可以有效改善误码率。在将 PAM4 电压转换为 2 位对齐量后,如果适用,它会进行接收端预编码,然后解码格雷码,如果适用,则在单比特级别进行解扰。如上图所示的对比可以看出,NRZ只有0,1两个电平,形成一个眼,而PAM4会有0,1,2,3共4个电平,形成了3个眼。
2024-12-24 11:07:38
1738
原创 如何使用cx_Freeze打包编译python文件
如果你需要更灵活的打包配置和控制,特别是在处理较复杂的项目时,cx_Freeze 可能更合适。cx_Freeze 和 PyInstaller 都有活跃的用户社区,但 PyInstaller 的用户社区较大,文档和支持资源更为丰富。其他依赖文件:某些库可能还会包含额外的共享资源、C 扩展文件(.pyd 或 .so 文件),以及其他运行时所需的文件。看到如下打印即可,执行此命令后,cx_Freeze 将会创建一个名为 build 的目录,包含你打包后的应用程序。首先,确保你已经安装了 cx_Freeze。
2024-11-14 17:25:48
1335
原创 CXL 寄存器介绍
无论哪种情况,CXL Device 的 Device0 Function0 配置空间中均应实现 CXL PCIe DVSEC 能力结构,并应用于该 Device 内的所有 Device/Function。PCIe DVSEC for CXL Devices(CXL 1.1 时称为 Flex Bus Devices,协议中有时简称为 CXL PCIe DVSEC),该能力结构中具备实现 CXL 所需的最基本的寄存器,用以指示 CXL 能力、控制相关能力/特性的开关及状态指示。该能力结构寄存器布局如下图所示。
2024-11-06 15:05:36
1221
原创 Pyhon中串口通信详解
pyserial 是一个用于串口通信的 Python 库,它为在 Python 中与串口设备通信提供了简单易用的接口。这个库支持多个操作系统,包括 Windows、Linux 和 Mac OS。pyserial 主要支持以下功能:打开和关闭串口读取和写入数据配置串口参数(如波特率、数据位、停止位等)支持超时和读取方式检查可用串口基本使用方法以下是 pyserial 的一些基本使用示例。
2024-10-31 14:16:44
553
原创 PCIe中的 VSC、VSEC、DVSEC 详细介绍
PCIe 定义了三类可由供应商 Vendor 自行指定的能力结构:Vendor-Specific Capability (VSC)、Vendor-Specific Extended Capability (VSEC) 及 Designated Vendor-Specific Extended Capability (DVSEC)。其中,VSC 兼容 PCI,VSEC 及 DVSEC 不兼容 PCI。VSEC 由单个 Vendor 独立使用,DVSEC 由多个相关的 Vendor 共同使用。
2024-10-29 14:40:20
893
原创 PCIe中ACS知识小记
虚拟机内部的访问数据显而易见是带的GPA地址。而目前几乎所有的PCIe 设备都带ACS control,所以它们可以单独assign给不同的VM,但是随之而来的就是即使两个GPU同时assign给同一个VM,由于ACS的存在,他们之间也不会有真正的物理层面的P2P访问。每一个TLP都自带一个address(寻址类TLP),同时每一个endpoint,PCIe switch都自带一段BIOS配置的地址空间范围,一旦这个TLP的address落入某个设备的地址范围,那么这个TLP就属于这个设备并消费。
2024-10-24 09:58:35
2523
2
原创 Devmem工具使用详解
devmem2 是一个非常简单而有效的工具,它允许用户直接读取和写入物理内存地址,这通常用于内存映射 I/O(MMIO)。在嵌入式系统和硬件开发中,它常常被用作调试和系统配置的手段。
2024-10-24 09:50:27
1206
原创 Python中tkinter使用详解
tkinter 是 Python 的标准 GUI(图形用户界面)库,提供了一种简单的方式来创建图形界面应用程序。下面是 tkinter 的一些重要概念、常用控件的说明,以及与 PyQt5 的区别。如果你的需求是简单的,tkinter 是一个很好的选择。如果你需要更复杂的界面或功能,或者希望使用现代设计原则,那么 PyQt5 是一个更好的选择。
2024-10-24 08:00:00
2322
原创 【CXL协议-性能注意事项(13)】
如果 MEC 列指示 ADD,则计数器单元应在每个时钟上添加所有启用事件的发生次数,这可能导致计数器数据在单个时钟内增加超过 1 的值。3. 在 MEC 列中,ADD 表示计数器单元应在每个时钟周期内将所有启用事件的发生次数相加,这可能导致计数器数据在单个时钟周期内增加超过 1 的值。CXL 事件定义为与 CXL 组件操作相关的特定组件活动的发生。用于平均测量的消息的地址应随机分布。但是,如果实现不匹配速率,则需要较快的实现限制其协议流量的速率,以匹配较慢的实现(包括突发),只要没有明确的流量控制循环。
2024-10-21 16:32:01
760
原创 Python进阶之-加密库cryptography使用详解
cryptography 库是一个强大的 Python 加密库,提供了对加密算法和协议的高层和低层访问。它是用来实现数据加密、签名、密钥管理等功能的。以下是一些常见用法的详解,帮助你理解如何使用这个库。
2024-09-02 11:23:15
2836
原创 如何对CXL Port做Link Disable和Hot Reset
在CXL设备的验证测试中,对CXL设备做Link Disable和Hot Reset对比PCie的Port做相同的操作略有不同。
2024-08-01 11:30:10
465
原创 Python进阶之Openpyxl详解
openpyxl 是一个用于读取和编辑 Excel 文件(即 .xlsx 格式文件)的 Python 库。以下是 openpyxl 的详细介绍及常见操作示例。
2024-07-24 19:58:49
4884
2
原创 X86/Aarch64下编译PMDK工具
什么是PMDK?Intel的PMDK(Persistent Memory Development Kit)是一个库,旨在简化持久内存的应用开发并解决一些常见挑战。PMDK,全称为Persistent Memory Development Kit,是由Intel开发的一套函数库和工具的集合,适用于所有的持久内存(厂商中立),无论这些内存来自哪个制造商。
2024-07-12 16:27:06
1049
原创 Centos7安装Glibc 2.32版本(超详细)
这应该会输出刚刚安装的4.2.1版本信息。将make cp到/usr/bin 目录。
2024-07-11 11:37:35
8635
15
原创 Python中序列化利器pickle使用详解
Python 中的 pickle 模块是一个序列化和反序列化Python对象结构的工具,也就是说它可以把Python中任意一个对象转化为一串字节流,也可以将这串字节流重新恢复为原来的对象。这个过程也分别被称为“pickling”(序列化)和“unpickling”(反序列化)。
2024-07-03 11:02:57
703
原创 Jenkins通过Squid代理服务器添加局域网节点机器
当jenkins在公网上的时候,如果要添加局域网内的服务器为节点机器构建的时候,这里就需要通过squid代理服务来实现了。当然你也可以使用其他的方式例如Apache等等,这里主要介绍通过Squid的方式。Squid是一种广泛使用的缓存代理服务器,它主要用于缓存和转发HTTP、HTTPS、FTP等常见的网络协议数据。Squid能够帮助减少带宽消耗、提高内容加载速度,并提供安全的网络访问控制。
2024-06-26 23:48:36
1236
原创 Python类中变量定义详解
Python中的类可以定义两种类型的变量:类变量和实例变量。类变量(Class Variables): 类变量是在类级别上定义的变量,它们是对所有实例共享的。这意味着类变量只有一个副本,无论你创建了多少个类的实例,类变量的值都是相同的。如果你通过任意一个实例或者类本身改变了类变量的值,这个改变对所有实例都是可见的。
2024-06-19 11:39:20
3325
原创 CXL协议中 Register Locator DVSEC详解
Register Locator DVSEC(Designated Vendor-Specific Extended Capability)是一种PCI Express(PCIe)配置空间的能力,专为CXL(Compute Express Link)技术中的设备设计。这包括CXL根端口、CXL下行交换端口、CXL上行交换端口以及非RCD(即非寄存器配置数据)设备。这项能力的主旨是帮助这些设备实现额外的寄存器块,以便更好地配置和管理CXL技术提供的高级功能。
2024-06-13 22:35:13
1606
原创 Python进阶之-mmap详解
Python中的mmap模块允许你创建一个内存映射的文件,这意味着文件数据直接映射到虚拟内存。这样做的好处包括:提高文件访问速度、可通过修改内存来修改文件、可以像操作普通内存一样操作这块特殊的内存区域。
2024-06-07 10:07:57
2273
原创 【CXL协议-控制和状态寄存器(8)】
设备 0、功能 0 DVSEC 中的功能、状态和控制字段控制整个 CXL 设备的 CXL 功能。在此过程中应保持向后兼容性。Bit 7: CXL 复位功能:如果设置,表示设备支持 CXL 复位并在此寄存器中实现 CXL 复位超时字段、在 CXL Control2 寄存器中启动 CXL 复位位并在 CXL Status2 寄存器中实现 CXL 复位完成状态。此 DVSEC 还位于 CXL 2.0 根端口、上行交换机端口、下行交换机端口和 CXL 2.0 设备的主要功能(设备 0、功能 0)的配置空间中。
2024-06-04 09:30:00
1748
原创 Memory测试工具-lmbench使用详解
什么是lmbench?lmbench 是一个广泛使用的、开源的系统性能测量工具,它能对Unix-like操作系统(包括Linux、BSD等)进行全面的性能测试。这个套件包含了一系列针对不同系统组件(如处理器、内存、文件系统等)的基准测试工具。在内存测试方面,lmbench 主要测量内存的带宽和延迟。
2024-06-03 14:36:28
3869
原创 Memory测试工具-stressapptest详解
stressapptest 是一个用于在各种系统组件上施加压力的工具,特别专注于内存和CPU。通过运行各种模式的访问测试,stressapptest 旨在模拟高负载下的系统行为,并帮助发现潜在的错误,比如硬件故障、过热或系统组件的不稳定性。
2024-05-31 11:33:44
6487
2
原创 MMIO知识小记
MMIO和端口I/O都是处理器与I/O设备之间通信的方法。选择哪一种方法取决于硬件设计和特定的应用场景。在现代系统中,MMIO因为其灵活性和易于编程等优势越来越常用,特别是在需要大块数据传输的情况下。端口I/O则主要在传统的或简单的硬件接口(如早期的PC架构)中使用。在具体的编程实践中,高级语言通常通过操作系统提供的抽象(如设备驱动程序接口)来间接访问这些硬件资源,因而开发者通常不必担心底层访问的细节。
2024-05-30 15:32:38
1971
原创 PCIe协议之-DLLP详解
数据链路层将从物理层中获得报文, 并将其传递给事务层;同时接收事务层的报文, 并将其转发到物理层;核心的功能有以下三点1.保证TLP在 PCIe 链路中的正确传递;2.数据链路层使用了容错和重传机制,保证数据传送的完整性与一致性,3.此外数据链路层还需要对PCIe 链路进行管理与监控。DLLP全称是Data Link Layer Packet,是在PCI Express (PCIe) 架构中,数据链路层使用的一种数据包类型。
2024-05-28 22:22:04
2174
原创 Python进阶之-ctypes详解
什么是ctypes?ctypes 是 Python 的一个标准库,它提供了和 C 语言库进行交互的能力,允许在 Python 代码中调用 C 库中的函数,并操作 C 语言数据类型。使用 ctypes 可以创建、访问和修改 C 数据类型,并且可以加载动态链接库(DLLs,在 Windows 上)或共享库(.so 文件,在 Unix/Linux 上),调用其中定义的函数。
2024-05-27 17:08:41
4958
原创 PCIe协议之-Flow Control基础
Flow Control即流量控制,这一概念起源于网络通信中。PCIe总线采用Flow Control的目的是,保证发送端的PCIe设备永远不会发送接收端的PCIe设备不能接收的TLP(事务层包)。也就是说,发送端在发送前可以通过Flow Control机制知道接收端能否接收即将发送的TLP。
2024-05-24 16:03:25
2582
原创 Python进阶之-collections详解
Python中的collections模块提供了一些额外的数据类型:Counter、deque、OrderedDict、defaultdict、namedtuple以及在Python 3.7之后加入的ChainMap。这些数据类型补充了Python标准的内置数据类型,为不同场景提供了更优的数据结构解决方案。
2024-05-21 16:34:48
1475
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人