Terraform проект предназначен для тестирования производительности блочных устройств в Openstack.
Принцип работы:
- Создается
security_group
для доступа к fio-server и ssh - Создается
instance_num
кол-во ВМ, используяflavor_id
,network_id
,image_id
- Через cloud-init передается конфигурация
root_pass
,custom_repos
(опционально), ставится fio - Для каждой ВМ создается один volume размером
volume_size
- По ssh на каждой машине запускается fio-server
- С локальной машины запускается fio-client и передает выбранный
test_type
- Output теста записывается в директорию
results_dir
в форматеfio_output_format
- На хостовой машине должен быть установлен fio той же версии.
- Рабочий кластер Openstack + Cinder
- Заполнить ENV переменные для авторизации в кластере openstack.
source creds.sh.example
-
Создать файл
terraform.tfvars
. Заполнить в соответствии с вашими требованиями. -
Подгрузить требуемые зависимости
terraform init
- Запустить
Обязательно задать паралелизм равный кол-ву инстансов (instance_num). По умолчанию у terraform parellelism=10.
terraform apply -parallelism=n
Название | Обязательная | Описание |
---|---|---|
instance_name | нет | Шаблон имени ВМ |
image_id | Да | Используемый image в openstack |
flavor_id | Да | Используемый image в openstack |
network_id | Да | Используемая сеть в openstack |
instance_num | Нет | Кол-во ВМ |
volume_size | Нет | Размер volume |
security_groups | Нет | Список дополнительных security_group |
root_pass | Нет | Пароль для пользователя ВМ |
test_type | Да | Тип теста для запуска |
custom_repos_type | Нет | Тип дополнительных репозиториев, если нужно |
custom_repos | Нет | Список репозиториев |
fio_output_format | Нет | Формат вывода результатов тестирования fio |
results_dir | Нет | Локальная директория с результатами тестирования |
instance_num = 3
instance_name = "perf-test"
flavor_id = "bf17125b-08e3-471e-abfc-ba4a772c95a7"
network_id = "11bcb688-74a5-4427-bdde-1fcc1ebb72ee"
security_groups = [
"test-security-group"
]
image_id = "98493ea4-e926-4ab0-bbdb-b968156e2585"
root_pass = "root"
volume_size = 10
test_type = "rw"
custom_repos = [{
name = "el9-baseos"
url = "http://repo/el9-baseos/"
enabled = true
gpgcheck = false
}, {
name = "el9-appstream"
url = "http://repo/el9-appstream/"
enabled = true
gpgcheck = false
}]
Заполнение и насыщение массива (WSAT/Preconditioning) – подготовительная процедура перед тестированием AFA-массивов, подразумевающая перевод массива из состояния PURGE/FOB в состояние STEADY STATE. Применяются разные технологии насыщения и заполнения массива (разный размер блока, последовательное или рандомное обращение к ячейкам flash-памяти и т.д.), но учитывая принадлежность массива к midrange-level системам хранения и текущий профиль нагрузки, выбран размер блока 256k для данного теста и последовательная запись. Записываем в каждую ячейку последовательно указанным ранее блоком, равномерно заполняя выделенный объем хранилища до отметки 81%. Из данного этапа мы можем примерно понять какая рабочая пропускная способность шины подключения дисков.
Перезапись или устаревание данных – один из самых важных этапов в тестировании AFA-массива, подразумевающий перезапись имеющихся данных, которые были записаны на массив в предыдущем этапе тестирования – WSAT/Independent Preconditioning. Данный этап важен ввиду специфики работы NAND-памяти. Умышленно не используется файловая система ни на уровне виртуализации, ни на уровне операционной системы. Перезапись данных начнется с самого начала адресации LBA и это неминуемо вызовет P/E Cycle, что в дальнейшем повлечет за собой включение процесса Garbage Collection и значительное усиление Wear Leveling, что, собственно, нам и нужно.
Профилированная нагрузка – этап тестирования системы хранения, которая покажет производительность массива поблочно, манипулируя потоком чтения/записи в процентном соотношении. В данном тесте исключен полностью последовательный профиль обращения к массиву, он крайне редко применим, но часть результатов есть в разделе «Заполнение и насыщение массива». Так же исключены профили со 100% чтением и 100% записью, они не применяются в нашей инфраструктуре.
Выбраны 3 основных профиля коррелирующие с нашей нагрузкой: read20%+write80%, read50%+write50% read80%+write20% для основных рабочих блоков 8/16/64k.
Стабильность массива – это производительность системы хранения при заполненности свыше 80% и применении рабочей нагрузки. Стабильность массива гарантируется при одном важном условии: на массив в меньше степени пишутся новые данные сверх установленного порога, все операции на запись носят характер «изменить блок» по полному циклу P/E.