Конфигурация
Сервис поставляется в пакете storage-csd. Для создания читайте Руководство администратора.
Статические параметры могут быть заданы при создании сервиса. Динамические параметры могут быть изменены позже через файл конфигурации.
Статические параметры
repo.block-size: Определяет гранулярность хранения данных. Допустимые значения: 512 Б, 4096 Б. Чем больше размер блока, тем меньше размер требуемых метаданных и выше производительность. При записи данных, не выровненных по размеру блока, производится RMW-цикл, что существенно замедляет подобные записи.
repo.cold-wal-size: Размер журнала данных и метаданных холодного хранилища. При высокой степени паралеллизма (большой скорости кластера) параметр может быть увеличиен, что ограничит глубину записи в холодное хранилище.
repo.hot-stor-size: Размер горячего хранилища. Актуален при расположении горячего и холодного хранилищ на одном разделе. Увеличение размера горячего хранилища может привести к увеличению скорости случайного IO и уменьшению объема доступного логического дискового пространства. При гибридной схеме — расположению горячего и холодного хранилищ на разных разделах, данный параметр автоматически задается близким к общему размеру горячего раздела.
repo.hot-wal-size: Размер журнала метаданных горячего хранилища. Увеличение параметра может увеличить производительность за счет более эффективного батчинга (склеивания) метаданных.
repo.prefill: Инициализирует файлы репозитория при первом старте сервиса. Замедляет первый старт, но нивелирует просадки в производительности нового сервиса. При тестировании производительности задайте значение параметра — True.
Динамические параметры
Параметр |
Рписание |
Связанные метрики |
Связанные дашборды |
---|---|---|---|
log.level |
Определяет подробность логов. Значение по-умолчанию info логгирует только минимум информации. Для отладки рекомендуется уровень не ниже debug. |
||
cold.cache-capacity |
Определяет максимальный размер кеша заморозки в памяти. При высокой степени параллелизма может быть оправдано увеличение кеша, для уменьшения количество промахов. |
sds_csd_cold_cache_hits_total{cs_id=»1»,shard=»0»,type=»io_fragment_cache»} ds_csd_cold_cache_misses_total{cs_id=»1»,shard=»0»,type=»io_fragment_cache»} ds_csd_cold_free_memory{cs_id=»1»,shard=»0»,type=»io_fragment_cache»} sds_csd_cold_total_memory{cs_id=»1»,shard=»0»,type=»io_fragment_cache»} |
CS Overview: «IO fragment cache» |
cold.recovery-max-mem |
Определяет максимальный размер памяти для нужд восстановления данных. Определяет глубину очереди, увеличение потенциально ускоряет восстановление данных, но может замедлить другие активности, в том числе пользовательский трафик. |
sds_csd_cold_free_memory{cs_id=»1»,shard=»0»,type=»recovery»} sds_csd_cold_total_memory{cs_id=»1»,shard=»0»,type=»recovery»} |
|
cold.scrub-max-mem |
Аналогичный параметр для нужд скраббинга. |
sds_csd_cold_free_memory{cs_id=»1»,shard=»0»,type=»scrub»} sds_csd_cold_total_memory{cs_id=»1»,shard=»0»,type=»scrub»} |
|
hot.target-usage |
Определяет рабочие границы заполненности горячего хранилища. Чем больше заполненность, тем полнее используется выделенное под горячее хранилище место, тем больше вероятность склейки фрагментов, тем (статистически) крупнее замораживаемые фрагменты данных, тем меньше overhead на вычитывание данных при заморозке. Обратной стороной является то, что при переполнении горячего хранилища, сервис начинает работать со скоростью близкой к скорости холодного хранилища. Тем самым ограничивается возможность сглаживания пиков нагрузки, которые могут осуществляться путем роста заполненности горячего хранилища. Сервис имеет внутренние алгоритмы, которые управляют скоростью заморозки. Конфигурацией для них являются 2 числа: первое определяет условную нижнюю границу заполненности, по уходу ниже которой сервис приостанавливает заморозку (в общем случае). Второе число — условная рабочая граница, которую сервис старается поддерживать при нагруженности кластера близкой к максимальной. |
sds_csd_hot_extents_overwritten_bytes_total{cs_id=»1»,shard=»0»} # количество перезаписанных данных. Хороший рейт означает хорошую аккумулируемость данных. sds_csd_disk_space{cs_id=»1»,shard=»0»,tier=»fast»,type=»total»} sds_csd_disk_space{cs_id=»1»,shard=»0»,tier=»fast»,type=»used»} # заполненность горячего хранилища. |
CS: «Disk Space (Hot)», «Hot storage hit ratio» CS Overview: «Hot storage usage», «Hot storage space» |
max-open-chunks |
Максимальное количество чанков, которые могут быть открыты на CS. Открытие чанка требуется для любой операции, и включает в себя открытие файлов, считывание состояния, что существенно замедляет операцию. После завершения операции, чанк остается в кеше открытых чанков, потребляя ресурсы (память, файловые дескрипторы), пока не будет вытеснен из кеша другим чанком. Таким образом большой размер кеша статистически уменьшает хвостовую latency запросов, но увеличивает потребление памяти. При большом размере воркинг сета следует не допускать т.н. трешинга кеша, когда каждый новый запрос требует вытеснения старого и открытия нового чанка (пример: true random IO (например, round-robin) по max_open_chunks+1 чанкам). |
sds_csd_storage_chunks_active{cs_id=»1»,shard=»0»} # количество чанков с активными (in-flight) запросами. sds_csd_storage_chunks_evicted{cs_id=»1»,shard=»0»} # счетчик вытеснений чанков. sds_csd_storage_chunks_opened{cs_id=»1»,shard=»0»} # количество открытых чанков (i.e. <=max_open_chunks). sds_csd_storage_chunks_total{cs_id=»1»,shard=»0»} # количество чанков в которые приходили запросы с момента старта сервиса. |
CS: «Chunks», «Evicted chunks» CS Overview: «Active chunks», «Evicted chunks» |
seastar.cpuset seastar.thread-affinity |
Определяет возможность статически привязать сервис к определенным ядрам процессора. |
||
seastar.memory |
Общий размер памяти доступный для сервиса. Следует отметить, что сервис обладает собственной логикой выделения памяти, при которой освобожденная память не всегда возвращается системе. Таким образом, достигнув в один момент потребления памяти, например, 4Гб, потребление памяти с точки зрения ОС останется на этом уровне до завершения процесса. Для просмотра действительного потребления см. метрики. |
sds_csd_memory_allocated_memory{cs_id=»1»,shard=»0»} |
CS, CS Overview: «Memory Usage» |
Динамические параметры в /etc/storage/cs.${CS_ID}/seastar.conf:
Параметр |
Значение по умолчанию |
Описание |
---|---|---|
smp |
1 |
n/a |
memory |
n/a |
См. cs make –seastar.memory |
thread-affinity |
0 |
См. cs make –seastar.cpuset |
poll-aio |
true |
Режим адаптивного поллинга, увеличивает производительность ценой возможного overhead по CPU. |
abort-on-seastar-bad-alloc |
True |
n/a |
overprovisioned |
False |
Позволяет сократить потребление ресурсов ценой потери производительности. Предназначен для использования в средах с ограниченными ресурсами (ноутбук, виртуальная машина). |
default-log-level |
info |
Уровень логирования подсистемы seastar. Для сбора логов отладки требуется также и в первую очередь изменить параметр log-level в cs.conf (см ниже). |
Динамические параметры в /etc/storage/cs.${CS_ID}/cs.conf:
Параметр |
Значение по умолчанию |
Описание |
---|---|---|
log-level |
info |
Уровень логирования (см. cs make –log.level). Может быть изменен без перезапуска процесса. |
log-rotate-file-cnt |
20 |
Количество лог файлов ротирования. |
log-rotate-file-size-mb |
128 |
Размер файла после которого произойдет ротирование лога. |
net-batch-size |
128Kb |
Размер RPC буфера. В общем случае, увеличение параметра ведет к увеличению пропускной способности ценой увеличения latency. |
net-gc-max-conn |
256 |
Количество исходящих сетевых соединений, по превышении которого соединения, неактивные в течение net-gc-idle-sec, будут закрыты. |
net-gc-idle-sec |
60 |
См. выше. |
cs-rpc-alignment |
128 |
Граница выравнивания rpc-запросов. Не рекомендуется к изменению. |
rpc-keepalive-timeout-sec |
3 |
Таймаут для исходящих соединений, по истечению которого (если от данного удаленного сервиса не было никаких сообщений) соединение признается проблемным и закрывается (и принимаются меры вплоть до сообщения в MDS и признании удаленного сервиса неактивным/недоступным). |
net-peer-timeout-sec |
60 |
«Hard» таймаут для исходящих запросов, по истечению которого запрос признается зависшим и завершается внутренним таймаутом (даже если соединение работает, например от удаленного сервиса приходят другие сообщения). |
net-negotiation-timeout-sec |
3 |
Таймаут для полного установления нового RPC соединения. |
net-connect-timeout-ms |
100 |
Таймаут для connect фазы нового соединения; при отсутствии TCP ответа от удаленного сервиса в течение данного периода, производится повторная попытка, при ее неудаче удаленный сервис признается проблемным. |
net-peer-ping-timeout-sec |
3 |
Таймаут для исходящих пинг-сообщений. |
rpc-max-memory |
32 Mb |
Количество памяти доступное для входящих реквестов (данный лимит выставляется для каждого из типов: клиенты, другие CS, MDS). |
rpc-max-iodepth |
2048 |
Количество входящих реквестов (для каждого из типов). |
rpc-max-resources-deviation |
512Kb |
Параметр для равномерного обслуживания всех входящих соединений: определяет максимальную меру неравномерности в нагрузке. |
rpc-user-auth |
False |
Включение режима аутентификации для RPC. |
max-hot-stor-occupation |
100 |
При помощи данного параметра можно жестко ограничить процент использования горячего хранилища. Используется для отладки. |
hot-stor-target-usage |
30-70 |
(См. –hot.target-usage) |
hot-stor-max-age-minutes |
1440 # 24 часа |
По истечении данного периода неактивности, данные будут перемещены в холодное хранилище (даже если заполненность горячего хранилища в пределах таргетов). |
hot-replicator-iodepth |
8 |
Глубина восстановления горячего хранилища (количество воркеров). Увеличение параметра ускоряет восстановление репликации чанков, но может замедлить клиентский трафик. |
max-open-chunks |
1024 |
(См. –max-open-chunks) |
writethrough |
False |
Направляет все клиентские запросы напрямую в холодное хранилище. |
writethrough-min-size |
20K |
Последовательные записи размером данного параметра или более, будут направляться напрямую в холодное хранилище. |
cold-enable-dsync-mode |
True |
Использовать файловый параметр O_DSYNC для работы с файлами холодного хранилища. В противном случае используются отдельные вызовы fdatasync(). |
cold-extent-allocation-size-hint |
0 |
Задать параметр XFS_XFLAG_EXTSIZE для файлов холодного хранилища. |
cold-enable-deduplication |
True |
В настоящее время не поддерживается. |
cold-cache-capacity |
256M |
(См. выше –cold.cache-capacity) |
cold-recovery-max-mem |
32M |
(См. выше –cold.recovery-max-mem) |
cold-recovery-urgent-max-mem |
32M |
(См. выше –cold.recovery-max-mem) — отдельный лимит для срочного восстановления. |
cold-scrub-max-mem |
16Mb |
(См. выше –cold.scrub-max-mem) |
cold-flush-max-mem |
0 # unlimited |
Аналогичный параметр для сброса кеша данных. |
cold-rpc-max-mem |
0 # unlimited |
Аналогичный параметр для обслуживания запросов от соседних CS. |
slow-op-threshold |
3 |
Длительность завершенной операции в секундах, по превышении которой информация об операции включается в статистику медленных операций и передается в MDS. |
slow-op-fix-period |
1000 |
Периодичность (в мс) отправки информации о медленных операциях на MDS. |
hung-op-threshold |
10 |
Длительность текущей операции в секундах, по превышении которой операция считается зависшей и информация передается в MDS. |
shred-shares shred-io-bandwidth shred-cold-sem-limit shred-hot-sem-limit |
15 10M 8 8 |
Лимиты для шреддинга (надежного уничтожения данных) удаляемых томов. Предназначены для того, чтобы операция не отнимала ресурсы у пользовательских операций. |
rpc-rdma-ingress |
False |
Принимать RPC подключения по RDMA. |
rpc-rdma-egress |
False |
Инициировать RPC подключения к соседним CS по RDMA. |
rdma-max-recv-wr-size |
16384 |
Размер блока в байтах на чтение в режиме RDMA RPC. |
rdma-max-send-wr-size |
16384 |
Верхняя граница размера блока в байтах на запись в режиме RDMA RPC. |
rdma-max-recv-wr |
32 |
Верхняя граница числа блоков на чтение в режиме RDMA RPC. |
rdma-max-send-wr |
16 |
Верхняя граница числа блоков на запись в режиме RDMA RPC. |
- Статические параметры
- Динамические параметры