OSDev

для всех
Текущее время: 19 окт 2019, 06:14

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу Пред.  1, 2
Автор Сообщение
СообщениеДобавлено: 24 авг 2012, 19:12 

Зарегистрирован: 24 авг 2012, 15:10
Сообщения: 7
Во первых, в хелло ворлде не хотелось бы ничего особо эмулировать, тем более CPU. Если на ПК 2 CPU, то хотелось бы сделать 1 полностью доступным одной ОС, 2 - второй. И только при вызове привилегированной операции произошёл бы vmexit.
Во-вторых можно сделать ещё одно упрощение: ОС ничего сама по себе может производить только вычисления (кроме CPU, памяти ничего не трогать). При переключении остальные ресурсы эксклюзивно передаются активной ОС. И ресурсы передавать через IOMMU, снижая потребность в эмуляции.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 24 авг 2012, 19:13 

Зарегистрирован: 24 авг 2012, 15:10
Сообщения: 7
SII писал(а):
доступ будет в видеопамять

VGA passthrough через IOMMU.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 24 авг 2012, 19:24 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1113
Цитата:
VGA passthrough через IOMMU.

Не получится разные ОС могут работать в разных режимах к примеру текстовый и графический с большим разрешением.
Так что надо не просто сохранять состояние но и переключать режимы.

Цитата:
У каких это осей доступ обычно через БИОС? У МС-ДОС?

Да у всех.
Память само собой. Но её эмалировать проще всего. Поэтому это и не рассматривается.
Цитата:
ведь даже у доисторических S3 были уже примитивные функции ускорения.

А причем тут S3 ? Сейчас уже сформировался стандартный набор железа эмулятора и S3 нету.
Что-бы ОС запустилась достаточно без ускорения. А если хотите ускорение, то есть открытые разработки.
Во вторых мыже говорим о приметивном гипервизоре, а не о законченном продукте.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 24 авг 2012, 22:16 

Зарегистрирован: 26 мар 2012, 17:32
Сообщения: 208
Держите и ни в чём себе не отказывайте: http://www.codeproject.com/Articles/457 ... torial-for
Странно, но я точно помню что раньше в гугле находил сначала русский вариант этой статьи, а сейчас вот найти его не могу (а закладка соотв. осталась в браузере на работе).

Ну, естественно, всем читать сорцы palacios (хоть его авторы и несколько нехорошие люди) и Tiny Virtual Machine Monitor (TVMM) с которого он когда-то был местами содран.

Вот ещё клёвая учебная программа: http://www.cs.usfca.edu/~cruse/cs686s07/


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 27 авг 2012, 02:47 

Зарегистрирован: 24 авг 2012, 15:10
Сообщения: 7
Nable писал(а):
Держите и ни в чём себе не отказывайте: http://www.codeproject.com/Articles/457 ... torial-for
Странно, но я точно помню что раньше в гугле находил сначала русский вариант этой статьи, а сейчас вот найти его не могу (а закладка соотв. осталась в браузере на работе).

Спасибо!

Nable писал(а):
Ну, естественно, всем читать сорцы palacios (хоть его авторы и несколько нехорошие люди) и Tiny Virtual Machine Monitor (TVMM) с которого он когда-то был местами содран.

Крошку уже находил, бегло смотрел - показалась неминимальной. Palacios тоже бегло видел. Там они упор на встраиваемость, вроде, делают. В принципе практично, но мне интересно, чтобы на "голом железе" стартовала. Или он и так тоже умеет?

Nable писал(а):
Вот ещё клёвая учебная программа: http://www.cs.usfca.edu/~cruse/cs686s07/

О! Вот этого не находил, спасибо! Как-то по привычке ищу AMD SVM, а тут и для интела есть! Но в итоге они там модуль для линукс написали, а не bare metall :/

На данный момент выходит, что крошка таки сравнительно минимальна. Наконец-то попробовал её make'ом - всего одно предупреждение. Ну, молодцы, написали 6 лет назад.

Осталось найти самый удобный способ загрузки через qemu (или bochs). Из того, что нашёл - grub-mknetdir, написать конфиг для груба, и каждый раз просто переписывать собранный файлик. Если б не http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=635877. Хотя патч я уже нашёл, так что если никто не знает ещё более простого способа загрузки, то придётся патчить и самому собирать grub в deb.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 авг 2012, 21:46 

Зарегистрирован: 26 мар 2012, 17:32
Сообщения: 208
> Там они упор на встраиваемость, вроде, делают.
Использую в роли модуля для kittenos. Это реально почти голое железо. Главная проблема - то что пилится оно по большей части ради публикаций, а не реального использования (если что, то это моё личное мнение, а никак не организации на которую я работаю, ну и далее по тексту), про некоторые мелкие косяки, как я понимаю, авторы вообще говорят "оставили чтобы было чем заниматься нашим студентам". Впрочем, в основе там многое всё равно неплохо сделано, посмотреть есть на что. Хотя местами за стиль и несоблюдение собственных правил оформления очень хочется "строго спросить".
Надеюсь, скоро всё же можно будет выложить нашу ветку этого безобразия, глядишь, народ подтянется.

И да, кто б помог перенести некоторые улучшения в KVM.

Для быстрой загрузки могу порекомендовать ключ -kernel у qemu: http://qemu.weilnetz.de/qemu-doc.html#d ... x_005fboot

Хотя, сам не вижу никакой проблемы в том чтобы закидывать файлы в образ диска установленным grub.
Код:
mount -t vfat ${PREFIX}/bochs-flash ${PREFIX}/flash/ -o loop,offset=16384 && cp ${PREFIX}/kitten/kitten.new/init_task ${PREFIX}/flash/boot/init_task && cp ${PREFIX}/kitten/kitten.new/arch/x86_64/boot/bzImage ${PREFIX}/flash/boot/bzImage && umount ${PREFIX}/flash/


А на тему минимальности - гипервизор должен заниматься управлением виртуалками, функции ОС (да и то же управление памятью) в него впихивать за очень редким исключением не надо.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 28 авг 2012, 22:25 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1389
Nable писал(а):
А на тему минимальности - гипервизор должен заниматься управлением виртуалками, функции ОС (да и то же управление памятью) в него впихивать за очень редким исключением не надо.


В реальном -- просто придётся впихивать практически всё:

-- управление памятью: он же должен физическую память разделять между несколькими ВМ, а значит, должен поддерживать свою собственную виртуальную память и эмулировать нужным образом соответствующее железо для ВМ, поскольку оси на ВМ тоже обычно имеют свою виртуальную память;
-- управление процессами и потоками: по сути, каждая ВМ -- это отдельный процесс с несколькими потоками; надо разделять физически имеющиеся процессоры между несколькими ВМ, переключая их по мере надобности;
-- управление вводом-выводом: не всегда есть возможно выделить то или иное устройство в полное распоряжение определённой ВМ, тем более навсегда; значит, необходимо самому заниматься вводом-выводом и уметь эмулировать некоторые устройства для ВМ.

В общем, все основные функции "настоящей" оси у серьёзного гипервизора по-любому будут, просто реализуются они довольно специфическим образом, учитывая его назначение. (И, естественно, реализация сильно зависит от стиля аппаратной поддержки виртуализации).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 авг 2012, 02:04 

Зарегистрирован: 24 авг 2012, 15:10
Сообщения: 7
Nable писал(а):
Надеюсь, скоро всё же можно будет выложить нашу ветку этого безобразия, глядишь, народ подтянется.

А на чём упор в этой ветке?
Nable писал(а):
И да, кто б помог перенести некоторые улучшения в KVM.

Но они ещё пока не анонсированы?

Nable писал(а):
Для быстрой загрузки могу порекомендовать ключ -kernel у qemu

Да, уже нашёл, что он не только для линукс, но и для любого multiboot-ядра, и таким образом самый простой способ. Но несмотря на мультибутность ни TVMM, ни MAVMM у меня не запустились.

Nable писал(а):
Хотя, сам не вижу никакой проблемы в том чтобы закидывать файлы в образ диска установленным grub.

Если гостевую ОС не пришивать к загрузчику+ядру (если так можно, а как ведь tvmm tos находит?), то, спасибо за пример, надо будет настроить такое.

Nable писал(а):
А на тему минимальности - гипервизор должен заниматься управлением виртуалками, функции ОС (да и то же управление памятью) в него впихивать за очень редким исключением не надо.

Я только за! Хотя вот на днях обнаружил, что гипервизор и VMM не всегда синонимы. По крайней мере в терминах микрогипервизор и vmm карма. Т.е. в VMM нужно реализовывать больше функционала.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 авг 2012, 02:15 

Зарегистрирован: 24 авг 2012, 15:10
Сообщения: 7
SII писал(а):
В реальном -- просто придётся впихивать практически всё:

И поэтому в классике имеем dom0 & kvm. Когда-то ещё до появления аппаратной виртулизации был уверен, что с её появлением ОС смогут независимо друг от друга работать, что в этом смысл. Прошёл 2006. И что? Ничего, оказалось всё прозаичней.

SII писал(а):
В общем, все основные функции "настоящей" оси у серьёзного гипервизора по-любому будут, просто реализуются они довольно специфическим образом, учитывая его назначение. (И, естественно, реализация сильно зависит от стиля аппаратной поддержки виртуализации).

Выходит, что аппаратную виртуализацию надо было засунуть и во всё остальное железо (учитывая, что сейчас в САТА-контроллере за 10 евро - АРМ-чип, то почему бы и нет?)

<мечтаю>...Но сегодня в обычном таком домашнем ПК есть проц на 4 ядра, есть IOMMU, есть пара жёстких дисков. Без проблем можно поставить вторую сетевуху. Ну и в конце концов докупить вторую видяху. И может, та моя уверенность про 2006-ой станет реальностью?.. 2 ОС, работающие параллельно, но да на выделенном железе, но совершенно обычном.</мечтаю>


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 29 авг 2012, 21:58 

Зарегистрирован: 26 мар 2012, 17:32
Сообщения: 208
Цитата:
-- управление памятью: он же должен физическую память разделять между несколькими ВМ, а значит, должен поддерживать свою собственную виртуальную память и эмулировать нужным образом соответствующее железо для ВМ, поскольку оси на ВМ тоже обычно имеют свою виртуальную память;

Рекомендую посмотреть какой API предоставляет KittenOS для Palacios'а, там всего около десятка функций.
Для виртуализации памяти достаточно функций ОС для выделения/освобождения физически непрерывных кусков + функций для преобразования между HPA и HVA (Host {Physical/Virtual} Addresses). Правда, со стороны гипервизора ещё нужны функции для построения EPT/NPT таблиц, но куда ж без них.

> эмулировать нужным образом соответствующее железо для ВМ,
Как у вас там в 2005, хорошо живётся? А у нас 2012, shadow page tables иногда используются, но обычно и без них неплохо живётся.

Ещё могут понадобиться функции для разбора гостевых таблиц страниц, но в минимальном варианте можно и без них.

Страшное начинается когда гостю разрешают использовать DMA, но тоже терпимо, ибо всё уже изобретено до нас.

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

Цитата:
-- управление процессами и потоками: по сути, каждая ВМ -- это отдельный процесс с несколькими потоками; надо разделять физически имеющиеся процессоры между несколькими ВМ, переключая их по мере надобности;

Если правильно спроектировано, то можно, опять-таки, обойтись процессами/потоками ОС (даже без потоков), разве что для полного счастья нужны функции для установки affinity.

Цитата:
-- управление вводом-выводом: не всегда есть возможно выделить то или иное устройство в полное распоряжение определённой ВМ, тем более навсегда; значит, необходимо самому заниматься вводом-выводом и уметь эмулировать некоторые устройства для ВМ.

Звучит как слова человека, который в недрах VMM ничего не писал, а знает только по-наслышке. Или писал, но рассказывать пытается уж очень общо.

Хуки на порты ввода/вывода и MMIO делаются средствами гипервизора, от ОС требуется функция для хуканья прерываний.
Виртуальные устройства - отдельный разговор, но к функциям ОС они отношения не имеют.
Устройства, которые попеременно то у хостовой, то у гостевой ОС - ужасный и редкий (редко используемый) гемор (из той же серии что сохранение состояний устройств, живая миграция с проброшенными устройстами и т.д.), про который в рамках этого треда лучше не вспоминать.

Цитата:
Да, уже нашёл, что он не только для линукс, но и для любого multiboot-ядра, и таким образом самый простой способ. Но несмотря на мультибутность ни TVMM, ни MAVMM у меня не запустились.
У Bochs есть похожая вещь, называется 32-bit OS load hack, можно ещё использовать всякие фичи seabios. И да, могло не запуститься из-за версии qemu, не поддерживающей вложенную виртуализацию/эмуляцию виртуализации.
Вообще, в таких делах самособранный trunk Bochs'а - наше всё. Хоть отловленные мной баги и никак не помечены что найдены мной.. ЧСВ--

Цитата:
Но они ещё пока не анонсированы?
Да вот в рамках дипломной работы пилил в Palacios поддержку exitless interrupt handling (можно нагуглить соотв. статью и почитать, она клёвая, но авторы не выкладывают сорцы и сделали только однопроцессорный вариант, так что мне было поручено запилить свой). Даже успел вовремя сделать работающий вариант, но его ещё пилить и пилить, а потом переносить в KVM, эхх.

Цитата:
А на чём упор в этой ветке?

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB