Задать вопрос
@WSGlebKavash

Как работают негарантированные ядра vCPU?

О чём собственно речь:
6919df22dead1452839372.png6919df2a78ddc218869731.png6919df311365b019541428.png
Дорогие хостинг провайдеры предоставляют VPS (облачный сервер) с неполными виртуальными ядрами. Можно как захватить все 100% ядра, так и взять всего 5%.
Как это работает? Как распределяются ресурсы между виртуалками? Возможно ли реализовать что-то подобное на личном сервере?
  • Вопрос задан
  • 61 просмотр
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Системный администратор
    11 месяцев
    Далее
  • Skillbox
    DevOps-инженер
    7 месяцев
    Далее
  • Merion Academy
    Виртуализация VMware vSphere 7
    1 неделя
    Далее
Пригласить эксперта
Ответы на вопрос 2
VoidVolker
@VoidVolker
Dark side eye. А у нас печеньки! А у вас?
Как именно это работает и как именно распределяются ресурсы — вам следует смотреть в исходниках конкретного гипервизора. В гипервизорах с закрытым исходным кодом вы сможете узнать только сделав запрос разработчикам и если они захотят/им разрешат сверху — они расскажут.
Да, на своём сервер тоже вполне возможно использовать: заходите в настройки вашего гипервизора и точно так же указываете нужное вам значение.
Ответ написан
TrueBers
@TrueBers
Гуглю за еду
Обычно у провайдеров используется модифицированный под себя линуксовый kvm.
Там уже есть куча механизмов разделения ресурсов:
1. Можно делить тупо софтварно по времени. Допустим выделять сколько то микросекунд на одного гостя, когда его таймаут проходит, он вытесняется планировщиком, ставится на паузу, сохраняет контекст и закидывает на исполнение следующего.
2. Можно по VM-exit'у какой-то инструкции, например x86 MWAIT и её аналогов, которые означают, что гостю сейчас не нужны ресурсы, он чего-то ждёт, и их можно отдать другому.
3. Можно привязываться к гостевым таймерам через external-interrupt exiting и решать на их основе.
4. Можно при соответствующей поддержке процессором воспользоваться более жёстким preemption timer'ом, который даст vm-exit по дедлайну.
5. Делить софтварно, но через более точное что-то, типа TSC deadline.
6. Так же можно использовать уже существующие линуксовые cgroups для квотирования, но проще самому написать шедулер, чем разбираться в этом поделии.

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

А вообще, есть вопрос: нахрена оно тебе на личном сервере? Если ты не провайдер, которому нужно делить ресурсы между сотнями гостевых систем, тебе это не нужно. Закручивай процессы через обычную контейнеризацию, которая из коробки в линуксах есть и не парься.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы