我想在同一台机器上混合 CPU 和 IO 密集型基准测试,并具有不同级别的 CPU 利用率和 IO 吞吐量。
不幸的是,我无法在不给 CPU 带来压力的情况下产生高 IO 负载。我尝试了一个用 C 编写的临时程序,然后使用带宽参数进行 rsync。理论上,无需 CPU 干预即可将数据从内存传输到磁盘,这就是 DMA 的意义所在。
我想知道是否有任何 API 或程序可以帮助我在整个过程中产生一定的 IO,而不产生(太多)CPU 负载。
答案1
您应该查看系统调用sendfile(2)
,该系统调用优化了将数据从一个打开的文件描述符复制到内核中的另一个打开的文件描述符。请注意,这 2 个文件描述符不必都是磁盘文件。您还可以使用网络套接字。
当与文件O_DIRECT
一起使用时,还要查看标志。open(2)
它允许读/写,而无需将数据从 dma 缓冲区重新复制到用户缓冲区,但您必须在页面或类似位置上对齐缓冲区,并使用页面大小的倍数作为长度。
hdparm -t --direct
可以用这个标志进行时序测试。
包中的一些命令sg3_utils
(例如sg_dd
)执行低级磁盘 io,并且O_DIRECT
也有选项。