Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Azure compatibility? #735

Open
KrishnaPG opened this issue Mar 19, 2016 · 5 comments
Open

Azure compatibility? #735

KrishnaPG opened this issue Mar 19, 2016 · 5 comments

Comments

@KrishnaPG
Copy link

Is it possible to use OSv on Azure?

Azure is supporting Linux VMs, but could not find much info on how to use OSv with Azure. Any info is greatly appreciated.

For startups Azure is giving free credits for multiple years, so would be worth considering support for Azure (at-least with the view of helping startups cut down their operational costs with OSv; e.g. cassandra osv appliance on Azure)

@nyh
Copy link
Contributor

nyh commented Mar 20, 2016

As far as I know, Azure uses the Hyper-V hypervisor, which is not yet supported by OSv.

Adding Hyper-V support to OSv was proposed as one of the Google Summer of Code projects which were proposed in this site, but wasn't picked up by a developer. For completeness I'll include here the explanation we had in that proposal:

Hyper-V support
Hyper-V is a VMM provided from Microsoft. It’s requires non-standard para-virtual drivers to run GuestOS, called “Virtual Service Client”(VSC). NetVSC is for networking, StorVSC is for block device. VSCs are communicate through VMBus, which is similar to Xen’s XenBus. Hyper-V Architecture details are here: https://msdn.microsoft.com/en-us/library/cc768520%28v=bts.10%29.aspx
Note that Open Source Hyper-V drivers already exists for other Operating Systems, and can be used as a basis. In particular, the BSD drivers are license compatible and could be used as a starting point.
Required Skills: Device Drivers, the Hyper-V protocol, C++
Difficulty: Easy.

@KrishnaPG
Copy link
Author

Thank you for the detailed information @nyh I will try to dig into these details, see if I can do something about this. Will get back with questions / some kind of poc

@wkozaczuk
Copy link
Collaborator

wkozaczuk commented Feb 20, 2017

I am interested in picking it up unless somebody has been working on it and I have not been aware.

It was assessed as "easy" for Google Summer of Code project probably for someone that meets these criteria - Device Drivers, the Hyper-V protocol, C++ - I only have some experience with C++. So I am guessing it will be hard for me.

Anyway I have been researching what needs to be done specifically and here is the list of my observations and tasks:

Observations:

  • It should be fairly easy to test it on any hardware with running Windows 10 professional that supports Hyper-V (https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v)
  • I could not find detailed enough specification of Hyper-V protocol; I think the only way to learn it is by analyzing the implementation of the Hyper-V drivers in FreeBSD and comparing it to Xen drivers in FreeBSD and OSv
  • Hyper-V seems to be conceptually similar to Xen so the OSv implementation should be modeled after Xen to some extent (hopefully Hyper-V will be easier)

Tasks:

  • Copy selected sources from https://github.com/freebsd/freebsd/tree/master/sys/dev/hyperv under https://github.com/cloudius-systems/osv/tree/master/bsd/sys/dev; they should be converted to C++ I guess
  • change arch_init_drivers() in x64/arch_setup todiscover Hyper-V vmbus device and register corresponding drivers
  • define and implement hyperv::vmbus class that should be modeled after xenfront::xenbus
  • define and implement hyperv::hyperv_driver class that should be modeled after xenfront::xenfront_driver
  • define and implement various C callback functions intended to be called from Hyper-V code; I am referring here to similar xen functions in xenfront_xenbus.cc like device_add_child() and device_set_ivars() (and many more) that in case of xen are called from bed/sys/xen/xenbus/xenbusb.cc/xenbusb_add_device; the implementations of these functions would be different though for hyper-V so we should possibly place them in different namespaces (xen vs hyper-v) or prefixing them; anyhow it feels this is the most tricky and challenging part

It seems like I am missing many more details so if anybody can fill me in with anything I missed or misstated or got completely wrong I would appreciate it.

@shushamen
Copy link

@wkozaczuk , count me in , lets work together

@kkushagra
Copy link

@wkozaczuk even, i am interested in working on this. I have some experience with C++.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants