Механизм отображения экземпляров Redis для разделения ядер ЦП - PullRequest
0 голосов
/ 02 февраля 2019

Документально подтверждено, что отдельные экземпляры Redis отображаются на отдельные ядра ЦП.Если бы у меня было 8 экземпляров redis, запущенных на машине Debian / Ubuntu с 8 ядрами, все они отображались бы на каждое ядро.

1) Что произойдет, если я уменьшу эту машину до 4 ядер?

2) Изменения происходят автоматически (по умолчанию), или в них задействована какая-то явная конфигурация?

3) Есть ли способ контролировать поведение?Если да, то в какой степени?

Хотелось бы понять технические аспекты, стоящие за этим, и наглядный пример очень приветствуется.Я запускаю приложение, размещенное в облаке, которое использует Redis в качестве серверной части.Расширение (и уменьшение) процессорных ядер машины - это одна из вещей, которую я должен сделать, но я хотел бы знать, во что я впервые вхожу.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Redis - это (в основном) однопоточный процесс, что означает, что экземпляр сервера будет использовать одно ядро ​​ЦП.

Процесс сервера сопоставляется с ядром операционной системой - это одиносновных задач, за которые отвечает ОС.Повторим еще раз: назначение ресурсов, включая ЦП, является решением ОС и очень сложным (то есть попробуйте прочитать код планировщика ядра;)).

Если у меня запущено 8 экземпляров redisна машине Debian / Ubuntu с 8 ядрами все они будут привязаны к ядру каждое.

Возможно, это зависит от усмотрения ОС.Нет гарантии, что каждый экземпляр получит уникальное ядро, и возможно, что одно ядро ​​может использоваться несколькими экземплярами.

1) Что произойдет, если я уменьшу эту машину до 4 ядер?

Уменьшение, как это, означает перезапуск.После перезапуска серверов Redis ОС назначит их с доступными ядрами.

2) Изменения происходят автоматически (по умолчанию), или требуется какая-то явная конфигурация?

Никаких изменений не происходит - каждый процесс, Redis или нет, получает ядро.Ядра распределяются между процессами, а ОС управляет всем этим.

3) Есть ли способ контролировать поведение?Если да, то в какой степени?

Да, большинство операционных систем предоставляют интерфейсы для управления распределением ресурсов.В частности, команду taskset Linux можно использовать для установки или получения соответствия процессорного процесса.

Примечание: вы должны оставить настройку привязки центрального процессора к ОС - она ​​должна быть достаточно хорошей.Вместо этого убедитесь, что вы правильно подготовили свой сервер к нагрузке.

0 голосов
/ 02 февраля 2019

Нет магии.Поскольку Redis является однопоточным, один экземпляр Redis будет занимать только одно ядро ​​одновременно.Запуск нескольких экземпляров создает возможность того, что более одного из них будут выполняться одновременно на разных ядрах (если они у вас есть).Как это сделать, полностью зависит от операционной системы.Сам по себе redis ничего не делает для «привязки» экземпляров к конкретным ядрам.

На практике вполне возможно, что запуск 8 экземпляров на 8 ядрах может дать вам нечто, похожее на прямое отображениеэкземпляров к ядрам, поскольку интеллектуальная ОС будет распределять процессы по ядрам (для максимального увеличения доступных ресурсов) и должна демонстрировать некоторые предпочтения для запуска процесса на том же ядре, которое оно недавно освободило (для лучшего использования кэша).Но в лучшем случае это справедливо только для простого случая отображения 1: 1, когда в системе нет других процессов, все процессы загружены одинаково, нет влияния сетевых драйверов и т. Д.

В общем случаевсе, что вы можете сказать, - это то, что ОС решит, как выделить процессорное время для всех запущенных вами экземпляров, и, вероятно, будет работать довольно хорошо, потому что части планирования ОС написаны людьми, которые знают, что ониделаешь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...