Я провел несколько тестов и получил некоторые результаты.
Тесты проводились на 100 Мбит / с и 1 Гбит / с. Исходный компьютер - сервер Win2K3 (SATA), а целевой компьютер - сервер Win2k3 (RAID 5).
Я провел 3 теста:
1) Network Reader -> Эта программа просто читает файлы по сети. Цель программы - найти максимальную скорость чтения н / ж. Я выполняю операции чтения без буфера, используя CreateFile & ReadFile.
2) Disk Writer -> Эта программа измеряет скорость RAID 5 путем записи данных. Не буферизированные записи выполняются с использованием CreateFile и WriteFile.
3) Blitz Copy -> Эта программа является механизмом копирования файлов. Копирует файлы по сети. Логика этой программы обсуждалась в первоначальном вопросе. Я использую синхронный ввод-вывод с NO_BUFFERING для чтения и записи. Используются следующие API-интерфейсы: CreateFile, ReadFile & WriteFile.
Ниже приведены результаты:
ЧИТАТЕЛЬ СЕТИ: -
100 Мбит / с NIC
Потребовалось 148344 мсек для чтения 768 МБ с размером фрагмента 8 КБ.
Потребовалось 89359 мсек для чтения 768 МБ с размером фрагмента 64 КБ
Потребовалось 82625 мсек для чтения 768 МБ с размером фрагмента 128 КБ
Потребовалось 79594 мсек для чтения 768 МБ с размером фрагмента 256 КБ
Потребовалось 78687 мсек для чтения 768 МБ с размером фрагмента 512 КБ
Потребовалось 79078 мс для чтения 768 МБ с размером фрагмента 1024 КБ
Потребовалось 78594 мсек для чтения 768 МБ с размером фрагмента 2048 КБ
Потребовалось 78406 мсек для чтения 768 МБ с размером фрагмента 4096 КБ
Потребовалось 78281 мс для чтения 768 МБ с размером фрагмента 8192 КБ
1 Гбит / с NIC
Потребовалось 206203 мсек для чтения 5120 МБ (5 ГБ) с размером фрагмента 8 КБ
Потребовалось 77860 мс для чтения 5120 МБ с размером фрагмента 64 КБ
Потребовалось 74531 мс для чтения 5120 МБ с размером фрагмента 128 КБ
Потребовалось 68656 мсек для чтения 5120 МБ с размером фрагмента 256 КБ
Потребовалось 64922 мс для чтения 5120 МБ с размером фрагмента 512 КБ
Потребовалось 66312 мсек для чтения 5120 МБ с размером фрагмента 1024 КБ
Потребовалось 68688 мс для чтения 5120 МБ с размером фрагмента 2048 КБ
Потребовалось 64922 мсек для чтения 5120 МБ с размером фрагмента 4096 КБ
Потребовалось 66047 мс для чтения 5120 МБ с размером фрагмента 8192 КБ
ДИСКОВЫЙ ПИСАТЕЛЬ: -
Запись выполнена на RAID 5 с NO_BUFFERING & WRITE_THROUGH
Запись 2048 МБ (2 ГБ) данных с размером блока 4 МБ заняла 68328 мс.
Запись 2048 МБ данных с размером блока 8 МБ заняла 55985 мс.
Запись 2048 МБ данных с размером фрагмента 16 МБ заняла 49569 мс.
Запись 2048 МБ данных с размером фрагмента 32 МБ заняла 47281 мс.
Запись выполняется на RAID 5 только с NO_BUFFERING
Запись 2048 МБ (2 ГБ) данных с размером блока 4 МБ заняла 57484 мс.
Запись 2048 МБ данных с размером блока 8 МБ заняла 52594 мс.
Запись 2048 МБ данных с размером фрагмента 16 МБ заняла 49125 мс.
Запись 2048 МБ данных с размером фрагмента 32 МБ заняла 46360 мс.
Производительность записи линейно снижается по мере уменьшения размера чанка. И флаг WRITE_THROUGH вводит некоторое снижение производительности
BLITZ COPY: -
1 Гбит / с NIC, копирование 60 ГБ файлов с NO_BUFFERING
Время завершения копирования: 2236735 мс. То есть 37,2 мин.
Скорость ~ 97 ГБ / чел.
100 Мбит / с NIC, копирование 60 ГБ файлов с NO_BUFFERING
Время, затраченное на завершение копирования: 7337219 мс. Т.е. 122 мин.
Скорость ~ 30 ГБ / чел.
Я попытался использовать программу 10-FileCopy от Джеффри Ритчера, которая использует Async-IO с NO_BUFFERING. Но результаты были плохими. Я предполагаю, что причиной может быть размер куска 256 КБ ... 256 КБ запись на RAID 5 ужасно медленная.
Сравнение с робокопией:
100 Мбит / с NIC: Blitz Copy и robocopy выполняют @ ~ 30 ГБ в час.
Сетевая карта 1 Гбит / с: Blitz Copy работает со скоростью ~ 97 ГБ в час, а при робокопии - ~ 50 ГБ в час.