学号/
├── partA/
│ ├── main.c # I/O 性能测试程序
│ ├── Makefile
│ └── report.pdf # 实验报告
├── partB/
│ ├── src/ # 服务器与客户端源码
│ ├── Makefile
│ ├── README.md
│ └── paper.pdf # 论文
└── README.md
测试以下 I/O 方式在不同 BUFFSIZE 下的 real/user/sys 时间:
| 测试 | 说明 |
|---|---|
read_bench |
系统调用 read() |
getc_bench |
逐字符 getc() |
fgetc_bench |
逐字符 fgetc() |
fread_bench |
标准库 fread() |
myfread_bench |
自实现 my_fread() |
write_bench |
write() 无 O_SYNC |
wsync_bench |
write() 有 O_SYNC |
使用根目录的 run.sh 一键完成编译、生成测试文件、运行所有测试并保存结果:
# 运行全部实验(Part A + Part B)
./run.sh
# 只运行 Part A
./run.sh partA
# 只运行 Part B
./run.sh partB结果保存在 results/ 目录下:
results/partA_results.txt— Part A 所有 I/O 方式的性能数据results/partB_<server>.txt— 各服务器的吞吐量与延迟数据
注: 清除页缓存需要 root 权限(
/proc/sys/vm/drop_caches)。无 root 时脚本会打印警告并跳过,测试在热缓存下继续运行,结果仍有效,请在报告中注明。
实现了 4 种并发模型:
| 服务器 | 模型 | 要求 |
|---|---|---|
poll_server |
poll(2) 多路复用 | 必做 |
thread_server |
线程池(默认 8 线程) | 必做 |
epoll_server |
epoll(7) 边缘触发 | 加分项 |
iouring_server |
io_uring 异步 I/O | 加分项(需 liburing) |
详见 partB/README.md。
在虚拟机 / WSL 中运行。请在报告中注明:操作系统版本、内核版本、文件系统类型、磁盘类型(虚拟磁盘)等信息。
uname -a # 内核版本
lsb_release -a # 发行版信息
df -T . # 文件系统类型