company_banner

Тонкая настройка memory on demand в облаке


    Новость одной строкой: теперь клиенты могут изменять параметры MOD из панели управления.

    Давным-давно в нашем mod-server'е была реализована возможность управления параметрами выделения памяти. Это было реализовано на уровне самого сервера и параметров базы данных.

    … Но этого не было в веб-интерфейсе. Самые настойчивые клиенты просили изменить настройки — и мы их меняли вручную. Глупо, да?

    Наконец-таки, мы исправили ситуацию — настройки MOD-сервера стали доступны клиентам. Большая их часть применяется «на ходу» и не требует перезагрузки или приостановки обслуживания.

    Принцип работы Memory-on-Demand

    В зависимости от количества запущенных программ, требуется различный объём памяти. Поскольку память оплачивается в «гигабайто-часах» (на самом деле, в килобайто-наносекундах), то тратить лишние деньги на неиспользуемую память жалко. Но и ютиться в маленьком объёме, залезая в своп, тоже нехорошо.

    Вся система MOD состоит из трёх компонент: сервера, базы данных (настройки) и агентов.

    Агент — modd (mod daemon) запущен внутри гостевой машины, он записывает в xenstore (система, благодаря которой возможно взаимодействие гостевой системы и управляющей в dom0 без использования сети) информацию о текущем состоянии памяти. Точнее, он просто записывает данные из /proc/meminfo в xenstore в data/mod_meminfo.

    Сервер смотрит на эти цифры и решает, добавить ли памяти, или уменьшить. Алгоритм работы MOD-сервера (в общих чертах): считается объём свободной памяти (мы правильно учитываем buffers и cached), если её больше, чем нужно, то память уменьшают. Если меньше, чем нужно — то увеличивают.

    Параметры, управляющие работой MOD

    MOD имеет следующие параметры:
    • жёсткие лимиты памяти — абсолютный минимум и максимум. Эти лимиты определяют границы, в пределах которых возможно изменение объёма памяти. Наличие этих границ — техническое ограничение используемого у нас гипервизора (Xen 3.4). Рекомендуемое соотношение минимума и максимума примерно 1 к 4, максимум 1 к 8. (На экстремальных значениях вида 128Мб — 48Гб можно запросто схлопотать kernel panic из-за того, что у ядра не хватает собственной памяти для обслуживания теоретического лимита). Эти лимиты не параметры MOD — мы их объединили в одну страницу просто потому, что вынос их в отдельное место увеличил бы путаницу.
    • Галка «включить»/«выключить», она всего лишь выключает (включает) MOD. Если MOD выключить, то память фиксируется на последней выставленной величине и больше никак не меняется.
    • «Мягкие лимиты» памяти. Эти лимиты определяют в каких пределах регулировать память. Заметим, это не совсем «лимиты», это, скорее, пожелание к размеру памяти. Если выставить эти числа слишком маленькими, то xen их проигнорирует, если выставить слишком большими — аналогично.
    • Границы свободной памяти. Это самая интересная пара чисел — она определяет, сколько свободной памяти должно быть в виртуальной машине. Точнее, аналогично мягкому лимиту, указывает к какому значению следует стремиться MOD-серверу.
      Эти величины не могут быть равны нулю (если у вас 0 свободной памяти, то либо вы идёте в своп, либо ядро падает). Они так же не могут быть равны друг другу — у этого есть очень довольно специфичное объяснение — если бы лимиты были равны друг другу, то могли бы возникнуть самовзбуждающиеся колебания (, допустим, нам не хватает 8кб. Алгоритм: добавить 16кб, убрать 16кб, добавить 16кб, убрать 16кб...). Поскольку при отдаче памяти в гипервизор, гостевая машина память чистит (было бы странно отдавать память вместе с содержимым), то это операция для клиента не совсем бесплатная. Единичные добавления/удаления памяти занимают незначительные ресурсы; однако, если бы память начала дёргаться туда-сюда постоянно, это создало бы паразитную нагрузку. Значения по-умолчанию — минимум — 96Мб, максимум 192Мб. Для шаблона Mini значения 24 и 32Мб соответственно.

    Если в поле написан ноль (или ничего не написано), значит, используются значения по-умолчанию.

    Исключения


    Список приложений, для которых MOD не нужен. Если приложение является основным на сервере, лимиты памяти можно выставить одинаковыми и не мучать сервер по-понапрасну:
    • JRE, JEEE, Tomcat и прочие Java-based — java использует свой механизм распределения памяти
    • MongoDB — читает настройки памяти при запуске, не проверяет и не обрабатывает ошибки выделения памяти


    P.S. Предыдущий топик по этой теме: habrahabr.ru/company/selectel/blog/99157
    Selectel
    ИТ-инфраструктура для бизнеса

    Похожие публикации

    Комментарии 34

      0
      А на каком ПО виртуализации у вас все устроено? Оно позволяет вам переносить вирт. машину с блока на блок в реалтайме?
        +4
        Гипервизор — Xen, тулстек — Xen Cloud Platform.

        Я не совсем понял о каких блоках вы говорите. Можно ли переносить виртуальные машины между хостами? Да, live migration есть и используется для балансировки нагрузки.
          0
          может еще имелся ввиду перенос между разными площадками.
            +1
            Между дата-центрами в обозримом времени переноса не будет (это не совсем автоматизируемый и прозрачный процесс), облако в Москве — в ближайших планах.
              0
              о, вот это хорошо. Не подскажете плз к какому примерно времени ждать?
                0
                Я не могу точные сроки назвать, но это точно стоит в планах. Как получится, так получится.
        +7
        Что за авария была в облаке в понедельник? Хочется узнать подробности.
          +10
          Ровно то же самое — то же самое хранилище, тот же самый adaptec. Сейчас по чуть-чуть клиентов переводим на нормальные хранилища, а с этой компанией сотрудничество заканчиваем. Если грубо «kernel panic, not synced».
            0
            Это какие?
              –2
              Хм, не ясно конечно за что минусы…
          +1
          у меня вопрос не в тему немного. чем обусловлена невозможность смены hostname на ваших VDS, хотя на виртмашине в облаке это возможно.
            +6
            Ух, я по openvz постольку поскольку. Насколько я понимаю, проблема в том, что openvz делает контейнеры и по этому hostname'у их учитывает. А в xen'е потроха виртуалки — личная проблема виртуалки, они не влияют на учёт и операции с dom0. Хотя это гипотеза.
              0
              спасибо
            0
            о-о-о-о
              +5
              Тоже вопрос не в тему. Можно как-нибудь убрать вырвиглазное творение пьяного дизайнера из раздела «облако» в панели управления и вернуть старое оформление?
                0
                Если вы про смешное «бета-оформление», то да, его планируется выпиливать. Вы случайно ткнули в букву «бета» в заголовке, чтобы вернуться обратно — ссылка "α" рядом со словом «сеть дата-центров».

                Нормальный дизайн в процессе (насколько мне сказали, уже закончили рисовать и начали верстать, а «это» — артефакты доисторического времени).

                … и ещё одно доказательство, что не надо тыкать куда попало.
                  0
                  Неправда. Я никуда не тыкала. И у меня нет никаких ссылок рядом со словами «сеть дата-центров», а вырвиглазное оформление есть. Внезапно появилось.

                    +1
                    Градиенты всегда были, но не во всех браузерах. В опере их нет.

                    По поводу «беты», значит, неправильно угадал, что не так.

                    Если вы про цвет шрифта, то это заделка на будущее — это легенда для графиков.
                      0
                      Да, я про цвет шрифта… не лучше сделать для легенды какой-нить цветной кружочек-квадратик слева от подписи? Графики — это класс! Ждем с нетерпением! На форуме клодо кто-то после падения даже говорил, что не уйдет от клодо, потому что в других облаках нет графиков :-)
                      Еще было бы здОрово статистику с возможностью экспорта в pdf за любой промежуток времени…
                        0
                        Рук не хватает. Категорически.

                        Плюс, у меня дома сейчас навернулся кондиционер — -75% от работоспособности дома.
                          0
                          Мне на этой странице не нравится, что буквы двоятся. Хуже читать. А раскраска разными цветами — это нормально.
                            0
                            А без тени цветные буквы станут менее читабельными, ИМХО. Другое дело, что тень можно было бы чуть подразмыть — не в IE же сидим, в CSS3 доступно размытие тени.
                              0
                              Ну не знаю, какой у вас монитор и какое зрение, мне тень уменьшает читабельность (если сравнить с соседним текстом без тени)
                                0
                                Так соседний-то текст не цветной!
                                  0
                                  хм. да. ну, можно подобрать тёмные цвета для белого фона. Но если цветов будет не хватать, то лучше забить на соответствие цвета на графике и в таблице, имхо.
                              0
                              Пробовали без раскраски, не читаемо. В общем, это stub, до нормальной финансковой отчётности руки не дошли.
                                0
                                А можно еще подложить цветные фоны под черные буквы с белой тенью с параметрами 1px 1px 1px — тогда будет более читаемо, ИМХО…
                              0
                              Да это не претензия, а так — пожелание на будущее. Мне у вас очень нравится и так.
                              +2
                              По здравому рассмотрению так и сделали. Спасибо.
                      0
                      Очень нужная штука! А то после сбоя одна из машинок сожрала всю мою компенсацию немереным потреблением памяти :-(
                        0
                        как я вас понимаю… У меня приложение загнало себя в состояние белки в колесе — падало, перезапускалось, снова падало, снова перезапускалось… За день это выжрало 150 рублей, хотя обычно по 7… Нашел в админке лимит на отключение, немного успокоился )
                        +5
                        Вот что нужно делать, а не понтоваться тарифами. Красавцы.
                          0
                          Подскажите недалёкому — это может помочь сэкономить затраты? На данный момент у меня 85-90% средств уходит на оперативку. (Debian mini, nginx даже без php и sql, пара статичных сайтов, ограничение 110-128 Мб.). Или мне всё-таки только в оптимизацию изнутри смотреть?
                            0
                            Поставьте строгий минимум. К сожалению, меньше сделать нельзя — очень нестабильно получается.

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                          Самое читаемое