# uc_bw **Repository Path**: zeasa/uc_bw ## Basic Information - **Project Name**: uc_bw - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-10 - **Last Updated**: 2026-02-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # UC/WC 内存带宽测试 Linux 内核模块,提供 **UC (Uncacheable)** 和 **WC (Write-Combining)** 两种缓存模式的内存区域,供用户态通过 mmap 访问并测试写入带宽。 ## 项目组成 | 文件 | 说明 | |------|------| | `ucwc_mmap_drv.c` | 内核模块,创建 `/dev/uc_mem` 和 `/dev/wc_mem` 两个字符设备,各提供 64KB 可 mmap 内存 | | `ucwc_bw.c` | 用户态带宽测试程序,支持多种写入模式 | | `Makefile` | 编译内核模块和测试程序 | ## 依赖 - Linux 内核 5.15 或 6.x(自动兼容 `class_create` API 差异) - 内核头文件:`/lib/modules/$(uname -r)/build` - 用户态:支持 AVX2/AVX512 的 x86-64 CPU(可选,用于 SIMD 测试) ## 编译 ```bash make all ``` - `ucwc_mmap_drv.ko`:内核模块 - `ucwc_bw.bin`:带宽测试程序(默认启用 AVX2 + AVX512) ## 使用 ### 加载/卸载模块 ```bash make load # 编译并加载模块 make unload # 卸载模块 make reload # 卸载后重新加载 ``` 加载成功后会出现设备节点: - `/dev/uc_mem`:UC 内存 - `/dev/wc_mem`:WC 内存 ### 带宽测试 ```bash # 基本用法 ./ucwc_bw.bin [选项] # 选项 # -i N 迭代次数(默认 10000) # -d DEV 设备:uc_mem 或 wc_mem(默认 uc_mem) # -w MODE 写入模式:int64 | avx2 | avx512 | movnt(默认 int64) # -f 在 movnt 模式下启用 sfence ``` 示例: ```bash # UC 内存,int64 写入,5000 次迭代 ./ucwc_bw.bin -i 5000 -d uc_mem -w int64 # WC 内存,AVX512 写入,100000 次迭代 ./ucwc_bw.bin -i 100000 -d wc_mem -w avx512 # WC 内存,非临时存储 + sfence ./ucwc_bw.bin -i 100000 -d wc_mem -w movnt -f ``` ### 预设基准测试 ```bash make benchmark ``` 依次运行 UC/WC 下多种模式的测试。 ## 写入模式说明 | 模式 | 说明 | |------|------| | `int64` | 标量 64 位写入 | | `avx2` | AVX2 256 位向量写入 | | `avx512` | AVX-512 512 位向量写入 | | `movnt` | 非临时存储(streaming store),绕过缓存,适合 WC 内存 | ## 调试 ```bash make dmesg # 查看内核日志 ``` ## 许可证 GPL