- 博客(21)
- 收藏
- 关注
原创 预取内存 和 非预取内存区别
是两种不同的内存区域类型,主要区别在于它们的访问特性、使用场景以及硬件优化方式。预取内存通常支持 64 位地址,而非预取内存通常限制在 32 位空间。可能导致设备寄存器写入被延迟或合并,引发功能异常(如设备不响应)。写入操作必须立即到达设备(例如,写入控制寄存器触发设备动作)。// PCIe 设备的 BAR 默认是非预取的(无特殊标记)。CPU/PCIe 控制器可以预取数据(提前加载到缓存)。显卡显存(VRAM)、NVMe 设备的 DMA 缓冲区。设备的控制寄存器(如网卡的 TX/RX 控制位)。
2025-05-19 14:08:53
674
原创 platform_device,device,pci_device三者关系与区别
特性devicepci_dev层级基类派生类(虚拟总线设备)派生类(PCI总线设备)总线依赖无虚拟平台总线(PCI总线典型用途所有设备的公共属性SoC外设、嵌入式设备PCI接口硬件资源管理通用属性(名称、电源等)内存/IRQ资源(resourcePCI配置空间、BAR资源匹配方式无名称或设备树兼容字符串。
2025-05-18 09:32:42
856
原创 Linux UIO (Userspace I/O) 框架详解
UIO 是 Linux 内核提供的一种将设备驱动部分逻辑移到用户空间的机制,特别适合需要快速开发或自定义 I/O 处理的场景。
2025-05-15 10:38:08
899
原创 NVMe 中命名空间、nblocks、slba 和 addr 的关系解析
NVMe设备中的逻辑存储分区,类似于传统存储的分区每个命名空间有独立的LBA(逻辑块地址)空间可配置不同的块大小(通常512B、4KB等)通过nsid(命名空间ID)标识。
2025-05-15 09:45:48
891
原创 Linux NVMe驱动深度分析
Linux内核中的NVMe驱动采用分层架构,主要分为以下几个部分:用户空间| 块设备层 (/dev/nvmeXnY) || 字符设备层 (/dev/nvmeX) |内核空间| NVMe核心层 (nvme-core) || PCIe传输层 (nvme-pci) || Fabrics传输层 (nvme-tcp, || nvme-rdma等) |硬件层| NVMe控制器 |
2025-05-15 09:28:28
937
原创 绕过文件系统直接读写NVMe盘的方法
绕过文件系统直接访问NVMe存储设备可以消除文件系统开销,实现最高性能的裸设备访问。以下是不同操作系统下的实现方法。
2025-05-15 09:16:19
484
原创 MMIO机制详解
CPU发出地址 0x40000000 → 内存控制器识别为MMIO区域 → 转发请求到PCIe/SoC总线 → 目标设备响应读写。// 16个32位寄存器。// 写入数据寄存器。的机制,CPU通过读写内存地址来访问设备寄存器,而非专用的I/O指令。:设备监听特定地址范围,当CPU访问该范围时,设备响应操作。:确认数据宽度对齐(32位设备需32位访问)。
2025-05-14 20:03:13
828
原创 MLX5 Linux 驱动代码分析
Mellanox ConnectX 系列网卡的 Linux 驱动 (mlx5) 是一个高性能 RDMA 和 Ethernet 驱动,支持 InfiniBand 和 Ethernet 功能。
2025-05-12 10:48:36
1125
原创 PLX 8748 组播(MC)窗口大小计算方法
实际配置时,请参考PLX 8748数据手册中的"Multicast Configuration"章节,根据具体应用场景调整这些参数。
2025-05-08 15:34:11
315
原创 PCIe Crosslink
PCIe Crosslink(交叉连接)是一种特殊的PCIe链路连接方式,允许两个PCIe设备(通常是Root Complex或Endpoint)是指两个PCIe设备(如两个CPU、两个FPGA或两个GPU)通过PCIe链路直接连接,形成点对点(P2P)通信通道。:两个Intel/AMD CPU通过PCIe Crosslink直接通信(替代UPI/Infinity Fabric)。:主板需提供PCIe Crosslink连接(如特定插槽支持x16/x8 Crosslink)。
2025-05-04 11:05:45
527
原创 EP 设备间P2P 与 基于pcie switch 的p2p区别
对于具体实现,需结合硬件规格(如PLX交换机手册或GPU技术文档)和操作系统支持(如Linux。GPU(Port 1)和NVMe SSD(Port 2)通过PLX Switch直接通信。多台NVMe SSD通过PCIe Switch共享访问(如CXL over PCIe)。GPU和FPGA通过同一PCIe插槽的拆分(Bifurcation)直接通信。设备通过PCIe Lane直接交互(如x16拆分为x8+x8)。启用PCIe Bifurcation(如x16→x8+x8)。
2025-05-04 10:47:53
738
原创 perf 添加自定义函数性能测试实例
要在 Linux 内核或模块的函数添加perf probe探针,可以使用%return后缀来跟踪函数返回。# 添加函数入口探针sudo perf probe -m <模块名,必须路径加ko,不然会报不在.text段> --add <函数名># 添加函数退出探针(使用 %return)sudo perf probe -m <模块名,必须路径加ko> --add <函数名>%return。
2025-04-30 17:41:48
703
原创 linux 内核worker queue实现
├── find_worker_executing_work() // 检查是否已在执行。WORK_STRUCT_DELAYED_BIT, // 是否是延迟工作。└── wake_up_worker() // 唤醒worker线程。WORK_STRUCT_PENDING_BIT = 0, // 是否已排队。├── insert_work() // 添加到pending链表。// 使用指定CPU的worker_pool。// 每个worker_pool有自己的锁。// 2. 执行工作。
2025-04-29 15:11:40
699
原创 linux 内核内存管理概述
硬件抽象层:处理特定架构的内存管理单元(MMU)细节物理内存管理:处理物理页帧的分配和释放虚拟内存管理:提供进程地址空间抽象内存分配器:提供kmalloc、vmalloc等接口用户空间接口:通过brk、mmap等系统调用提供服务Linux 内存管理系统通过精妙的分层设计和多种算法,实现了高效的内存管理。理解其工作原理对于系统调优、性能分析和内核开发都至关重要。随着硬件发展和新需求出现,Linux 内存管理仍在不断演进,如近年来对非易失性内存的支持等新特性。
2025-04-29 10:19:45
729
原创 理解字节对齐的效率
默认使用8字节对齐(64位系统的自然对齐)对性能关键代码进行对齐优化使用工具验证(如GCC的警告)不同架构区别对待(x86较宽容,ARM较严格)在绝大多数64位系统现代CPU上,8字节对齐的访问性能优于4字节对齐,特别是对于64位数据类型的操作。
2025-04-28 20:15:01
706
原创 DMA与关键操作性能对比分析
hlist_for_each_entry_rcu(pos, head, member) { // 无锁读取。// ≈8 ns (无锁算法)当 (CPU拷贝时间) > (DMA启动开销 + DMA传输时间) 时选择DMA。// 同时CPU可以处理其他任务。// 启动DMA传输。// 等待DMA完成。
2025-04-25 15:25:20
890
原创 sysfs_create_bin_file、kobject_create_and_add 与 sysfs_create_file 的区别详解
sysfs_create_bin_file、kobject_create_and_add 与 sysfs_create_file 的区别详解
2025-03-27 17:38:33
931
原创 华为eNSP使用详解
eNSP是一款由华为提供的免费的、可扩展的、图形化的网络设备仿真平台,主要对企业网路由器、交换机、WLAN等设备进行软件仿真,完美呈现真实设备部署实景,支持大型网络模拟,让你有机会在没有真实设备的情况下也能够开展实验测试,学习网络技术。eNSP提供便捷的图形化操作界面,让复杂的组网操作变得更简单,可以直观感受设备形态,并且支持一键获取帮助和在华为网站查询设备资料。按照真实设备支持特性情况进行模拟,模拟的设备形态多,支持功能全面,模拟程度高。支持与真实网卡的绑定,实现模拟设备与真实设备的对接,组网更灵活。
2024-04-15 18:59:11
357
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人