我做了一些测试并得到了一些结果。测试是在 100Mbps 和 1Gbps NIC 上进行的。源机器是 Win2K3 服务器 (SATA),目标机器是 Win2k3 服务器 (RAID 5)。
我进行了 3 个测试:
1) Network Reader -> 这个程序只是通过网络读取文件。该程序的目的是找到最大的 n/w 读取速度。我正在使用 CreateFile 和 ReadFile 执行非缓冲读取。
2) Disk Writer -> 这个程序通过写入数据来测试 RAID 5 的速度。使用 CreateFile 和 WriteFile 执行非缓冲写入。
3) Blitz Copy -> 这个程序是文件复制引擎。它通过网络复制文件。这个程序的逻辑在最初的问题中讨论过。我正在使用带有 NO_BUFFERING 读取和写入的同步 I/O。使用的 API 是 CreateFile、ReadFile 和 WriteFile。
以下是结果:
网络阅读器:-
100 Mbps 网卡
用 148344 毫秒读取 768 MB 块大小为 8 KB。
用 89359 毫秒读取 768 MB 块大小为 64 KB
用 82625 毫秒读取 768 MB 块大小为 128 KB
读取 768 MB 块大小为 256 KB 花费了 79594 毫秒
读取 768 MB 块大小为 512 KB 花费了 78687 毫秒
读取 768 MB 块大小为 1024 KB 花费了 79078 毫秒
读取 768 MB 块大小为 2048 KB 花了 78594 毫秒
读取 768 MB 块大小为 4096 KB 花费了 78406 毫秒
读取 768 MB 块大小为 8192 KB 花费了 78281 毫秒
1 Gbps 网卡
用 206203 毫秒读取 5120 MB (5GB),块大小为 8 KB
读取 5120 MB 块大小为 64 KB 花费了 77860 毫秒
读取 5120 MB 块大小为 128 KB 花费了 74531 毫秒
读取 5120 MB 块大小为 256 KB 花费了 68656 毫秒
读取 5120 MB 块大小为 512 KB 花费了 64922 毫秒
读取 5120 MB 块大小为 1024 KB 花了 66312 毫秒
读取 5120 MB 块大小为 2048 KB 花费了 68688 毫秒
读取 5120 MB 块大小为 4096 KB 花了 64922 毫秒
读取 5120 MB 块大小为 8192 KB 花费了 66047 毫秒
磁盘写入器:-
使用 NO_BUFFERING 和 WRITE_THROUGH 在 RAID 5 上执行写入
写入 2048MB (2GB) 块大小为 4MB 的数据需要 68328 毫秒。
写入块大小为 8MB 的 2048MB 数据耗时 55985 毫秒。
写入块大小为 16MB 的 2048MB 数据需要 49569 毫秒。
写入块大小为 32MB 的 2048MB 数据耗时 47281 毫秒。
仅使用 NO_BUFFERING 在 RAID 5 上执行写入
写入 2048MB (2GB) 块大小为 4MB 的数据需要 57484 毫秒。
写入块大小为 8MB 的 2048MB 数据耗时 52594 毫秒。
写入块大小为 16MB 的 2048MB 数据耗时 49125ms。
写入块大小为 32MB 的 2048MB 数据耗时 46360 毫秒。
随着块大小的减小,写入性能会线性下降。并且 WRITE_THROUGH 标志引入了一些性能影响
闪电战副本:-
1 Gbps NIC,使用 NO_BUFFERING 复制 60 GB 文件
完成复制所用时间:2236735 毫秒。即,37.2 分钟。速度约为 97 GB/每。
100 Mbps NIC,使用 NO_BUFFERING 复制 60 GB 的文件
完成复制所用时间:7337219 毫秒。即,122 分钟。速度约为 30 GB/每。
我确实尝试使用 Jeffrey Ritcher 的 10-FileCopy 程序,它使用 Async-IO 和 NO_BUFFERING。但是,结果很糟糕。我猜原因可能是块大小为 256 KB... RAID 5 上的 256 KB 写入非常慢。
与 robocopy 相比:
100 Mbps NIC:Blitz Copy 和 robocopy 以每小时约 30 GB 的速度执行。
1 GBps NIC:Blitz Copy @ ~97 GB/小时,而 robocopy @ ~50 GB/小时。