Pull to refresh

Comments 45

вкусно, люблю такие топики. Просто о сложном.
Пригодится, если вдруг облако придётся делать…
У меня в облаке процы загружены на 3-5% при том, что там работает довольно ресурсоёмкий софт. Я там даже bitcoin взвёл, дабы зря мощя не простаивала)
наконец-то я осознал, что такое «домен» применительно к виртуализации. Отлично написано.
Там всё хитрее — если вы машину мигрируете, то получается новый домен. Проще всего смотреть с помощью xm list или xl list, там видно, что номер домена меняется при каждой миграции или ребуте.

Кстати, xen гарантирует, что в течение жизни хоста номер домена всегда уникальный (то между перезагрузками хостов один и тот же домен не может в разные моменты времени соответствовать разным виртуальным машинам). У нас на это довольно много логики управления завязано.
Хм, а у вас нет случайно планов завести дата-центр в Европе, а не в России?
Я таких далёких планов не знаю, но если будет — обязательно напишем.
Спасибо за интересную статью. Для полноты картины: откуда вы берете значения этих счетчиков процессорного времени по каждой виртуальной машине? xm выдает эти данные или в /proc какой-то файлик?
Во-первых, в XCP нет этой глючной поделки под названием xm и xend. Сколько я не бодался против окамла, но его стабильность на пару порядков выше, чем у шевелящейся кучи из питона и шелловых скриптов под названием 'xend'. Часть xcp построена на libxl.

Во-вторых, нет, мы не используем xl для аккаунтинга, вместо этого у нас идут hypercalls к гипервизору через низкоуровневую библиотеку. Сам зен возвращает время работы домена (не виртуальной машины!) в наносекундах. Мы учитываем предыдущие показатели (предыдущие домены виртуальной машины), собираем статистику и суммирующие счётчики.
XCP в плане управления критично отличается от обычого гипервизора? или это касается тоьлко учёта реурсов?
Гипервизор там xen. А вот всё остальное по большей части там другое, и xend'овые приёмы там не прокатят.
Учет процессорного времени… в голову сразу лезут аналогии с одной ЭВМ на целый отдел, и графиком загруженности… а вот оно как, круговорот однако!
Автору + за статью.
у меня другу в конторе сказали: «вот тебе доступ на сервер, там 90 ядер, будешь тестить свою програмку — больше 40 не занимай.»
совсем недавно 2 или 4 ядра/процессора было непозволительной роскошью
Честно говоря, я думал это все очевидно… Даже странно, что люди как то об этом не знали.
Когда я начинал работать с xen'ом и толком ещё не разбирался в низкоуровневой части работы зена, для меня большим неприятным сюрпризом был сброс счётчиков.
Правильно ли я понимаю?
1. Облако само может развести на разные ядра несколько параллельных процессов — например, несколько Апачей, отдающих статику разным пользователям.
2. Но какой-то один прожорливый PHP-скрипт (пусть, условно говоря, я конвертирую 10-мегапиксельный TIFF в JPEG) — по-любому будет грузить единственное ядро?
3. А если PHP-скрипт сам ничего не конвертирует, а вызывает конвертер, написанный на C++ с поддержкой многопоточности, как дочерний процесс — тогда распараллеливание тоже будет?
Облако ничего не знает про апачи. Это проблема ядра гостевой системы (линукса), и по слухам, он это умеет делать.

Поддержка многопоточности — целиком и полностью на совести приложения. Если взять однопоточное приложение, то хоть 200 процов рядом положи, оно будет мурыжить один.
Ну что облако не знает слова «Апач», я догадывался. Я просто взаимодействие этого Зена с тем самым Линуксом представляю себе в очень-очень общих чертах :)

Просто в порядке дилетантских рассуждений.
Например, я — Линукс, сижу в среде Зена, но думаю, что он — обычная «железная» машина. Сколько процессоров я вижу? Ну пусть, например, 8. Вот я запускаю внутри себя какие-то процессы, развожу их по процессорам/ядрам. И вдруг Зен решил, что сейчас 3 ядра из 8 (которые я вижу и на которые рассчитываю) целесообразно отдать конкурирующей виртуальной машине (о которой я ни сном ни духом). Что произойдет, если я тоже захочу эти занятые кем-то ядра задействовать? Не наступит ли у меня жестокий когнитивный диссонанс — я же ОС! Я рулю железом, а тут мне вдруг говорят, что ядра заняты.

Хотя скорее всего мне никто ничего не говорит. А просто делают укол наркоза и принудительно кладут спать, чтоб не задавал лишних вопросов.
Когнитивный диссонанс не наступит. Зен динамически переназначает vcpu (виртуальные процессоры виртуалки) на pcpu (physical cpu). Грубо говоря, ядро думает, что это процессор №2, а на самом деле минуту назад он был «процессор №1», а сейчас «процессор №8». А вот если нет свободных процессоров для планирования исполнения vcpu, в этом случае наступает состояние «все в очередь и пусть никто не уйдёт обиженным».

Я пока не могу говорить со 100% уверенностью, но мы не планируем загрузку выше 50-70% на хост для обеспечения резерва по пикам.

Кстати, одна, очень важная особенность: если по какой-то причине процессорное время не было выделено виртуалке, то оно не оплачивается. То есть ситуация «лагающих машин» нам в принципе не выгодна, т.к. заработаем мы на ней меньше.
А что будет со временем на виртуальной машине, если ей долго не передавалось управление? Есть какой-то механизм синхронизации?
М… Что есть «синхронизация времени»? (На самом деле вы затронули огромной сложности вопрос, потому что в зене есть минимум три разных времени — wallclock, TSC и ещё одно, но я с ходу не соображу куда оно и где). wallclock — это грубо говоря, мировое время. Оно в зене берётся из гипервизора, точнее, из dom0. Другими словами, гостевая система не следит за временем, а когда кто-то спрашивает «сколько времени» ему отвечают настоящим текущим временем.

Есть TSC, это счётчик тиков процессора, который некоторые программы используют в качестве таймера. TSC в этом случае просто транслируется на инструкцию процессора, который считает время независимо от операционной системы.

Ядро на самом деле раз сто в секунду дёргает таймер (ставит алерты) для обновления своих счётчиков и управления ресурсами. Между этими событиями гостевая машина «спит». Когда срабатывает таймер, её будят. В этом смысле домены мало отличаются от обычных процессов в обычной ОС.
Спасибо, понятно.
Т.е. не получится установить на виртуальной машине произвольную дату?
Я немного упростил. wallclock используется как счётчик времени. При этом ядро может иметь своё «базовое» время, то есть можно выставить любую дату, которую съест ядро и продолжить с ним работать.

Собственно, вот проверка:

# date 01010101
Fri Jan  1 01:01:00 MSK 2010
root@vm2172:~# date
Fri Jan  1 01:01:04 MSK 2010
У вас там в описании услуги «облако» не сказано, какую операционку можно запустить, а регистрироваться только для выяснения ответа на этот вопрос — неохота. В частности, интересует — можно ли Windows? Из вашего образа? Из своего?
Виноват, правим. Нет, в ассортименте только Linux. Установка соответствует дистрибутиву производителя (Debian, Ubuntu, CentOS). Windows отсутствует в связи с закрытыми исходными текстами.
Однако, в реальных условиях современного хостинга, скорость работы процессора так высока, что процессор — наименее востребованный и самый простаивающий ресурс и в 99% случаев конкуренции за ресурсы вообще не возникает.

Слова про 99% верны только на ранних этапах жизни хостинга, а в повседневной жизни это не так. Основную массу клиентов стартующего хостинга составляют новорожденные проекты с низкой посещаемостью — просто из-за того, что размещать новый проект проще, чем переносить существующий проект с другого хостинга. Когда хостинг проживет достаточно долго, чтобы на него стали переходить клиенты других хостеров, достаточно будет 3-5 форумов или магазинов с большими базами и парой тысяч уников в сутки, чтобы они съели весь процессор и начали жестко за него конкурировать.
Я очень уверен, что к этому моменту, если не увеличивать размер пула, будут проблемы с памятью и дисковыми операциями. Я не говорю, что процессор невостребован, я говорю, что он самый маловостребованный ресурс в сравнении с остальными.

Кстати, говорю я это не по наблюдению за облаком, а по опыту работы с VDS, где процессоры простаивают.
С памятью и дисками, безусловно, тоже могут быть. Так как для многих задач вычислительная сложность может снижаться увеличением сложности по памяти, к этому часто прибегают и используют memcached и прочие способы промежуточного кэширования. У таких процессора съедаться будет мало, все будет решаться большим потреблением памяти.

А часто бывает и наоборот: самый легкий способ жечь процессор — это не сайты с большой посещаемостью, а CMS, которые при генерации 1 страницы вместо того, чтобы сохранить в скрипте в переменной какое-нибудь значение, посылают сто sql-запросов в таблицы без индексов. Это зло вечное и неискоренимое.
SQL-запрос без индексов — это ещё и нагрузка на диск или память. Я ж говорю, остальные ресурсы не такие безграничные, как процессор.

PS Если уж образуется такой VIP-клиент, который будет тратить десятки рублей ежедневно на процессор, то ура, ура, у нас не простаивает процессор. Даже если он будет молотить в 8 ядер на нескольких хостах, оставшуюся память спокойно займут те, кому особо процессор не нужен, а credit scheduler обеспечит им отличную производительность.
такой вопрос: почему все клауды оперируют паравиртуализацией, но не hvm-доменами? существуют какие-то ограничения, помимо скорости IO, которые, в принципе, тоже фиксятся? pv-домены проще разворачивать и обслуживать?
и еще один: рассматривали ли kvm для этих целей? и если да, то почему не подошел?
HVM завязан на qemu, а тот дыряв, как винда без сервиспаков. Это касается как повышения привилегий, так и у «уклонения от учёта». KVM пока не рассматривал.
я правильно понимаю что Xen Cloud Platform опенсурс и бесплатна, то есть кто-угодно может поднять тоже самое?
(адский смех) наконец-то кто-то, кроме меня, пройдёт по всем этим граблям!

Да, разумеется. Более того, я сейчас по чуть-чуть начинаю коммитить в рассылку xen-api с некоторыми изменениями XCP, адаптирующими его под провайдерские нужды (т.к. XCP форк XenServer, который традиционно является enterprise-средой).
а у другой накручивает 30 «часов» за часов десять?

Я так понял, это 3 процессора, загруженные весь астрономический час на 100%?
Почему обязательно три? Это могут быть отдельные всплески нагрузки на всех 8 процессорах с простоями в перерыве. В этом универсальность подхода — не имеет значения, как распределяется нагрузка, важно то, сколько фактически времени были заняты процессоры вычислениями «в пользу» виртуальной машины.
Ну это понятно, я на конкретном примере хотел уточнить вариант рассчета. Исходя из этой логики, один процессор за час никогда не потратит больше часа времени?
Ого, как режет глаз опечатка уже после отправки:)
Нет, поскольку это будет физически невозможно. С учётом, что гипервизор весь из себя оптимальный, но всё-таки время тоже на себя тратит, с большой вероятностью это будет даже меньше часа (в пределах долей секунды).
Отличная статья, многие вещи стали более прозрачными. Может на вашем вики ещё это публиковать?
И по последнему графику — сайт выполненный на чем? В целом, по нагрузке и времени работы большая разница между платформами?
Простите, что такое «наша вики»? Сайт — на пхп и mysql, самописный. Подробностей не знаю.
«Всё, я закончило» первый раз в жизни такое читаю :))
Ну, если бы я написал, что ядро делает гипервизов скедулера с опцией idle, это было бы менее живописно, правда?
Просто первый раз вижу средний род в таком контексте :)
А как в данном случае отличается работа высоконагруженного приложения между виртуальной машиной в облаке и обычной машиной в стойке? Т.е. если образно говоря проц загружен и там, и там на 99%, то масштабируемость какая-то есть в облаке? В том случае, если само приложение умеет работать в многопоточной среде конечно.
Sign up to leave a comment.