Решил протестировать скорость операций с файлами на SMR диске в зависимости от типа файловой системы и размера кластера. SMR-диски плохи тем, что операции со множеством мелких файлов быстро заполняют кэш, и диск перестаёт принимать новые команды, пока не разложит содержимое кэша по лентам. По этой причине синтетические тесты утилитами типа AS SSD Benchmark, CrystalDiskMark дают нестабильный результат.
ST5000LM000-2AN170
Вложение:
Комментарий к файлу: ATTODiskBenchmark: ST5000LM000-2AN170 ATTO Disk Bench NTFS 4K.jpg [ 76.92 КБ | Просмотров: 1824 ]
Поэтому пришлось писать свои скрипты: копирование (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 КБ | Просмотров: 1761 ]
Операции с файлами размером от 256 Кб до 4 Мб (всего 362,2 Мб)
Вложение:
Комментарий к файлу: Операции с файлами размером от 256 Кб до 4 Мб 4MB.png [ 173.4 КБ | Просмотров: 1761 ]
Операции с файлами размером от 0 до 256 Кб (всего 190,5 Мб)
Вложение:
Комментарий к файлу: Операции с файлами размером от 0 до 256 Кб 256K.png [ 173.05 КБ | Просмотров: 1761 ]
Операции с файлами размером от 0 до 4 Кб (всего 2,9 Мб)
Вложение:
Комментарий к файлу: Операции с файлами размером от 0 до 4 Кб 4K.png [ 172.78 КБ | Просмотров: 1761 ]
Как видно из графиков, скорость дисковых операций на диске с технологией черепичной записи (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 Откуда: Московская обл.
Кэширование для внешнего диска чревато потерей данных - например, если пользователю приспичит срочно убежать, забрав диск, не сделав безопасное извлечение или недождавшись пока оно отработает.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения