Решил протестировать скорость операций с файлами на SMR диске в зависимости от типа файловой системы и размера кластера. SMR-диски плохи тем, что операции со множеством мелких файлов быстро заполняют кэш, и диск перестаёт принимать новые команды, пока не разложит содержимое кэша по лентам. По этой причине синтетические тесты утилитами типа AS SSD Benchmark, CrystalDiskMark дают нестабильный результат.
ST5000LM000-2AN170
Вложение:
Комментарий к файлу: ATTODiskBenchmark: ST5000LM000-2AN170 ATTO Disk Bench NTFS 4K.jpg [ 76.92 КБ | Просмотров: 2553 ]
Поэтому пришлось писать свои скрипты: копирование (XCOPY), поиск текста в файлах (Select-String), изменение атрибутов файлов (ATTRIB), удаление файлов (Remove-Item). Для тестирования использовались следующие наборы данных: 1) 2500 файлов размером от 0 до 4 Кб общим объёмом 2,9 Мб. 2) 5000 файлов размером от 0 до 256 Кб общим объёмом 190,5 Мб; 3) 500 файлов размером от 256 Кб до 4 Мб общим объёмом 362,2 Мб; 4) Файл размером 2,5 Гб;
Тестирование проводилось в файловых системах NTFS и exFAT от 4К до 256K в ОС Windows 11 22H2.
Копирование
Код:
@echo off chcp 1251 >nul SET /P Name="Введите имя файла: " :: Путь к приложению, запускаемому из консоли set program="XCOPY /-I C:\TEST\test.f J:\test.f" for /f "tokens=*" %%A in ('powershell -Command "Measure-Command { %program% } | Select-Object -ExpandProperty TotalSeconds"') do set "elapsed=%%A" echo Copy 2,5G: %elapsed%>>"%Name%.txt" echo Copy 2,5G: %elapsed% секунд TIMEOUT 10 set program="XCOPY /S /I /Q C:\TEST\test3 J:\test3" for /f "tokens=*" %%A in ('powershell -Command "Measure-Command { %program% } | Select-Object -ExpandProperty TotalSeconds"') do set "elapsed=%%A" echo Copy 4M: %elapsed%>>"%Name%.txt" echo Copy 4M: %elapsed% секунд TIMEOUT 10 set program="XCOPY /S /I /Q C:\TEST\test2 J:\test2" for /f "tokens=*" %%A in ('powershell -Command "Measure-Command { %program% } | Select-Object -ExpandProperty TotalSeconds"') do set "elapsed=%%A" echo Copy 256K: %elapsed%>>"%Name%.txt" echo Copy 256K: %elapsed% секунд TIMEOUT 10 set program="XCOPY /S /I /Q C:\TEST\test J:\test" for /f "tokens=*" %%A in ('powershell -Command "Measure-Command { %program% } | Select-Object -ExpandProperty TotalSeconds"') do set "elapsed=%%A" echo Copy 4K: %elapsed%>>"%Name%.txt" echo.>>"%Name%.txt" echo Copy 4K: %elapsed% секунд :: Звуковой сигнал echo 0y | choice /c y /n>nul @pause
Поиск текста
Код:
@echo off chcp 1251 >nul SET /P Name="Введите имя файла: " for /f "tokens=*" %%A in ('powershell -Command "Measure-Command { Select-String -Path J:\test.f -Pattern "ABRACADABRA" } | Select-Object -ExpandProperty TotalSeconds"') do set "elapsed=%%A" echo Find 2,5G: %elapsed%>>"%Name%.txt" echo Find 2,5G: %elapsed% секунд TIMEOUT 10 for /f "tokens=*" %%A in ('powershell -Command "Measure-Command { Select-String -Path J:\test3\* -Pattern "ABRACADABRA" } | Select-Object -ExpandProperty TotalSeconds"') do set "elapsed=%%A" echo Find 4M: %elapsed%>>"%Name%.txt" echo Find 4M: %elapsed% секунд TIMEOUT 10 for /f "tokens=*" %%A in ('powershell -Command "Measure-Command { Select-String -Path J:\test2\* -Pattern "ABRACADABRA" } | Select-Object -ExpandProperty TotalSeconds"') do set "elapsed=%%A" echo Find 256K: %elapsed%>>"%Name%.txt" echo Find 256K: %elapsed% секунд TIMEOUT 10 for /f "tokens=*" %%A in ('powershell -Command "Measure-Command { Select-String -Path J:\test\* -Pattern "ABRACADABRA" } | Select-Object -ExpandProperty TotalSeconds"') do set "elapsed=%%A" echo Find 4K: %elapsed%>>"%Name%.txt" echo.>>"%Name%.txt" echo Find 4K: %elapsed% секунд :: Звуковой сигнал echo 0y | choice /c y /n>nul @pause
Изменение атрибутов
Код:
@echo off chcp 1251 >nul SET /P Name="Введите имя файла: " for /f "tokens=*" %%A in ('powershell -Command "Measure-Command { ATTRIB +R J:\test.f } | Select-Object -ExpandProperty TotalSeconds"') do set "elapsed=%%A" echo Attr 2,5G: %elapsed%>>"%Name%.txt" echo Attr 2,5G: %elapsed% секунд TIMEOUT 1 for /f "tokens=*" %%A in ('powershell -Command "Measure-Command { ATTRIB +R J:\test3\* } | Select-Object -ExpandProperty TotalSeconds"') do set "elapsed=%%A" echo Attr 4M: %elapsed%>>"%Name%.txt" echo Attr 4M: %elapsed% секунд TIMEOUT 10 for /f "tokens=*" %%A in ('powershell -Command "Measure-Command { ATTRIB +R J:\test2\* } | Select-Object -ExpandProperty TotalSeconds"') do set "elapsed=%%A" echo Attr 256K: %elapsed%>>"%Name%.txt" echo Attr 256K: %elapsed% секунд TIMEOUT 10 for /f "tokens=*" %%A in ('powershell -Command "Measure-Command { ATTRIB +R J:\test\* } | Select-Object -ExpandProperty TotalSeconds"') do set "elapsed=%%A" echo Attr 4K: %elapsed%>>"%Name%.txt" echo.>>"%Name%.txt" echo Attr 4K: %elapsed% секунд :: Звуковой сигнал echo 0y | choice /c y /n>nul @pause
Удаление
Код:
@echo off chcp 1251 >nul SET /P Name="Введите имя файла: " for /f "tokens=*" %%A in ('powershell -Command "Measure-Command { Remove-Item J:\test.f -Force } | Select-Object -ExpandProperty TotalSeconds"') do set "elapsed=%%A" echo Del 10G: %elapsed%>>"%Name%.txt" echo Del 10G: %elapsed% секунд TIMEOUT 1 for /f "tokens=*" %%A in ('powershell -Command "Measure-Command { Remove-Item J:\test3 -Recurse -Force } | Select-Object -ExpandProperty TotalSeconds"') do set "elapsed=%%A" echo Del 4M: %elapsed%>>"%Name%.txt" echo Del 4M: %elapsed% секунд TIMEOUT 10 for /f "tokens=*" %%A in ('powershell -Command "Measure-Command { Remove-Item J:\test2 -Recurse -Force } | Select-Object -ExpandProperty TotalSeconds"') do set "elapsed=%%A" echo Del 256K: %elapsed%>>"%Name%.txt" echo Del 256K: %elapsed% секунд TIMEOUT 10 for /f "tokens=*" %%A in ('powershell -Command "Measure-Command { Remove-Item J:\test -Recurse -Force } | Select-Object -ExpandProperty TotalSeconds"') do set "elapsed=%%A" echo Del 4K: %elapsed%>>"%Name%.txt" echo Del 4K: %elapsed% секунд :: Звуковой сигнал echo 0y | choice /c y /n>nul @pause
Копирование данных на жёсткие диски проводилось с SSD Samsung 970 EVO Plus. Между операциями над разными группами файлов - пауза в 10 сек, чтобы дать диску "прийти в себя". После отработки каждого скрипта - перезагрузка компьютера с переподключением USB-диска.
Для сравнения провел тесты на стареньком диске WDC WD20EARX-00PASB0 серии Caviar Green (предположительно ~5000-5600 об/мин) с файловой системой NTFS и размером кластера 4K.
Результаты тестов. Время выполнения указано в секундах.
Операции с файлом размером 2,5 Гб
Вложение:
Комментарий к файлу: Операции с файлом размером 2,5 Гб 2,5G.png [ 172.49 КБ | Просмотров: 2490 ]
Операции с файлами размером от 256 Кб до 4 Мб (всего 362,2 Мб)
Вложение:
Комментарий к файлу: Операции с файлами размером от 256 Кб до 4 Мб 4MB.png [ 173.4 КБ | Просмотров: 2490 ]
Операции с файлами размером от 0 до 256 Кб (всего 190,5 Мб)
Вложение:
Комментарий к файлу: Операции с файлами размером от 0 до 256 Кб 256K.png [ 173.05 КБ | Просмотров: 2490 ]
Операции с файлами размером от 0 до 4 Кб (всего 2,9 Мб)
Вложение:
Комментарий к файлу: Операции с файлами размером от 0 до 4 Кб 4K.png [ 172.78 КБ | Просмотров: 2490 ]
Как видно из графиков, скорость дисковых операций на диске с технологией черепичной записи (Shingled Magnetic Recording, SMR) в файловой системе exFAT сильно зависит от размера кластера: чем больше кластер, тем меньше времени затрачивается на операцию. Для NTFS каких-то существенных отличий не выявлено. Но при больших размерах кластеров в NTFS после дисковых операций Windows длительное время не даёт безопасно извлечь диск. Почему SMR-диск с трудом работает с маленькими файлами - загадка учитывая, что все 2500 файлов размером от 0 до 4 Кб общим объёмом 2,9 Мб поместятся в кэш диска. Но стоит отметить, что тесты проводились на пустом диске после форматирования. При частичном заполнении диска результаты могут кардинально отличаться с учётом степени фрагментации данных. Также видно, что старый добрый CMR-диск (или PMR?) в большинстве сценариев показывает лучшие результаты, чем более новый SMR. А в случае с маленькими файлами - лучше на 1-2 порядка.
Из личного опыта скажу, что ST5000LM000 не подходит для скачивания торрентов, содержащих много файлов: при сбросе на диск последний может "задуматься" на десятки минут.
Выяснилось, что сравнение USB-диска с внутренним было некорректным: по умолчанию в Windows 11 у внутреннего диска включено кэширование, а у внешнего - отключено. И при записи на диск с включенным кэшированием программа рапортует о выполнении (отмечено стрелочкой) ещё до того, как данные фактически будут записаны на диск.
Moderator
Статус: Не в сети Регистрация: 13.01.2017 Откуда: Московская обл.
Кэширование для внешнего диска чревато потерей данных - например, если пользователю приспичит срочно убежать, забрав диск, не сделав безопасное извлечение или недождавшись пока оно отработает.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения