Не так давно мы писали про новые возможности решения для создания отказоустойчивых кластеров хранилищ VMware vSAN 6.7 Update 1. Одной из новых возможностей этого продукта стала функция возвращения неиспользуемого гостевыми ОС дискового пространства в сторону физической дисковой подситсемы. Ранее эта возможность не работала, о чем мы писали вот тут.
Все понимают, что современные операционные системы стараются писать новые данные в новые пустые блоки, чтобы оставалась возможность восстановить старые, помеченные как удаленные. vSAN поддерживает технологию thin provisioning, что позволяет создавать хранилища растущие по мере наполнения данными. Но дело в том, что такие хранилища растут всегда, даже когда в гостевых системах освобождается место, что следует из первого предложения этого абзаца.
В этом случае очень бы хотелось это место вернуть опять как свободное на сторону дискового хранилища, так вот функции TRIM и UNMAP именно это и делают. vSAN 6.7 U1 теперь полностью обрабатывает SCSI/ATA-команды TRIM/UNMAP и автоматически возвращает дисковое пространство хранилищу. При этом, поскольку vSAN не использует тома LUN или VMFS, в рамках этой процедуры не требуется прохождения рабочего процесса через эти уровни абстракции.
Помимо очевидного преимущества очистки хранилища, процесс возвращения дисковых блоков имеет еще 3 позитивных эффекта:
Блоки, вышедшие из пространства vSAN, не нужно реплицировать между хостами и тратить на это ресурсы.
Эти блоки не надо обрабатывать со стороны систем резервного копирования.
Очистка грязных страниц из кэша на чтение, что уменьшает число копируемых блоков между кэшем и ярусом хранения (capacity tier).
VMware говорит, что в целом TRIM/UNMAP не влияет на производительность, но если происходит большое число команд UNMAP, то надо посматривать за производительностью.
Для включения этого механизма можно использовать команду:
vsan.unmap_support VSAN-Cluster -e
Windows Server 2012 и более поздние версии ОС поддерживают автоматическое возвращение дискового пространства. Чтобы проверить работу этой функции, надо выполнить команду:
Надо отметить, что процесс возвращения блоков происходит асинхронно, поэтому результат проявляется не сразу. Чтобы в Windows запустить TRIM для диска можно выполнить команду PowerShell:
PS C:\>Optimize-Volume -DriveLetter H -ReTrim -Verbose
Результат будет, например, таким:
Также TRIM можно сделать и с помощью утилиты дефрагментации, запустив ее с флагом /L:
Defrag C: D: /L
За производительностью процесса TRIM/UNMAP можно наблюдать в консоли vSAN, в разделе Monitor->vSAN->Performance.
Здесь два основных параметра на нижнем графике:
UNMAP Throughput - скорость прохождения команд UNMAP к дисковым группам хоста.
Recovery UNMAP Throughput - скорость прохождения команд UNMAP, которые выполняются как часть процесса object repair при отсутствующем или испорченном дисковом объекте.