nav-img
Evolution

Конфигурация

Сервис поставляется в пакете 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.