Этот вопрос связан со следующим наблюдением:
Это связано с записью одного большого файла на диск с высокой скоростью.
Я пытаюсь сделать что-то подобное, создав эталон того, как запись большого файла (минимум 30 ГБ) ведет себя на SSD (ОС Windows 7). Основу тестового кода можно найти по ссылке выше (ярлык здесь: http://www.quicklz.com/write.c).
Результаты для создания одного файла размером 30 ГБ можно увидеть в следующей таблице. Размер куска (записанного на диск) выровнен по 256 КиБ (используется _aligned_malloc при физическом размере страницы 4096 КиБ в NTFS). Также пробовал больший размер куска (например, 1 ГБ), но результаты были похожи. Первый столбец - это размер файла, создаваемый в каждой итерации (каждый раз добавляется около 1 ГБ), а столбцы 2-5 - это скорости записи, наблюдаемые для HDD / SSD с использованием «кэширования / буферизации» (опция по умолчанию в WriteFile) по сравнению с «без буферизации». / caching "case (см. флаг CreateFile FILE_FLAG_NO_BUFFERING
). В случае кеширования Windows ОС решает, когда использовать FlushFileBuffers (явно не вызывается).
+-----------+---------------+--------------+---------------+--------------+
| File Size | Win cache HDD | No cache HDD | Win cache SSD | No cache SSD |
+-----------+---------------+--------------+---------------+--------------+
| 1024 MiB | 3282 MiB/s | 205 MiB/s | 2626 MiB/s | 187 MiB/s |
| 2048 MiB | 2853 MiB/s | 203 MiB/s | 2626 MiB/s | 383 MiB/s |
| 3072 MiB | 2861 MiB/s | 207 MiB/s | 3132 MiB/s | 388 MiB/s |
| 4097 MiB | 2977 MiB/s | 198 MiB/s | 2626 MiB/s | 393 MiB/s |
| 5121 MiB | 2986 MiB/s | 206 MiB/s | 2731 MiB/s | 388 MiB/s |
| 6145 MiB | 3282 MiB/s | 200 MiB/s | 2626 MiB/s | 199 MiB/s |
| 7169 MiB | 33 MiB/s | 201 MiB/s | 215 MiB/s | 377 MiB/s |
| 8194 MiB | 2626 MiB/s | 201 MiB/s | 287 MiB/s | 197 MiB/s |
| 9218 MiB | 2626 MiB/s | 207 MiB/s | 317 MiB/s | 345 MiB/s |
| 10242 MiB | 2853 MiB/s | 197 MiB/s | 215 MiB/s | 181 MiB/s |
| 11266 MiB | 3122 MiB/s | 202 MiB/s | 375 MiB/s | 343 MiB/s |
| 12291 MiB | 3282 MiB/s | 202 MiB/s | 368 MiB/s | 209 MiB/s |
| 13315 MiB | 187 MiB/s | 199 MiB/s | 194 MiB/s | 362 MiB/s |
| 14339 MiB | 145 MiB/s | 201 MiB/s | 329 MiB/s | 356 MiB/s |
| 15363 MiB | 140 MiB/s | 205 MiB/s | 125 MiB/s | 195 MiB/s |
| 16388 MiB | 135 MiB/s | 195 MiB/s | 220 MiB/s | 360 MiB/s |
| 17412 MiB | 126 MiB/s | 204 MiB/s | 279 MiB/s | 196 MiB/s |
| 18436 MiB | 124 MiB/s | 195 MiB/s | 269 MiB/s | 103 MiB/s |
| 19460 MiB | 129 MiB/s | 199 MiB/s | 242 MiB/s | 104 MiB/s |
| 20485 MiB | 137 MiB/s | 203 MiB/s | 189 MiB/s | 107 MiB/s |
| 21509 MiB | 128 MiB/s | 198 MiB/s | 120 MiB/s | 116 MiB/s |
| 22533 MiB | 134 MiB/s | 202 MiB/s | 109 MiB/s | 107 MiB/s |
| 23557 MiB | 137 MiB/s | 194 MiB/s | 112 MiB/s | 113 MiB/s |
| 24582 MiB | 135 MiB/s | 204 MiB/s | 107 MiB/s | 102 MiB/s |
| 25606 MiB | 131 MiB/s | 194 MiB/s | 122 MiB/s | 101 MiB/s |
| 26630 MiB | 130 MiB/s | 200 MiB/s | 151 MiB/s | 108 MiB/s |
| 27654 MiB | 139 MiB/s | 199 MiB/s | 108 MiB/s | 117 MiB/s |
| 28679 MiB | 130 MiB/s | 206 MiB/s | 104 MiB/s | 103 MiB/s |
| 29703 MiB | 121 MiB/s | 195 MiB/s | 105 MiB/s | 107 MiB/s |
| 30727 MiB | 132 MiB/s | 203 MiB/s | 102 MiB/s | 104 MiB/s |
+-----------+---------------+--------------+---------------+--------------+
Некоторые наблюдения здесь:
Оба кейса Win Cache (SSD и HDD) сначала имеют очень высокую скорость благодаря кешированию Windows. Тогда ставка снижается.
В случае с жестким диском без кеширования мы видим стабильную скорость (и нормальную скорость для моего жесткого диска, поскольку она составляет около 207 МБ / с).
В случае с SSD без кеширования мы можем увидеть даже худшую скорость по сравнению с HDD.
Итак, наконец, на мой вопрос:
Зачем?
Почему у меня худшие показатели, когда я не использую буферизацию на SSD? Где узкое место? Обработка ОС Windows? SSD родное поведение? Или и программное и аппаратное обеспечение?
Могу ли я добиться постоянной скорости передачи, как у жесткого диска (но выше)? Предполагая, что мой SSD имеет скорость записи 340 МБ / с, могу ли я добиться этого с постоянной скоростью?
Пожалуйста, дайте мне понять, что я здесь игнорирую.