New Feature Coming in Beta 15: VM Manager


jonp

Recommended Posts

It's great and all that unRaid is getting these new features, but only a portion of its users can take advantage of this whereas a feature like Dual Parity can be used by everyone and is arguably more valuable.  Is that even being worked on?

Let's not start down a path of comparing features and order of importance. Its not a good idea. There is an open thread with discussion on dual parity support, but its never been on the roadmap and there are plenty of other features that we have added with 6.0 that can be used with lesser hardware (e.g. docker).

 

I'd also argue the value of dual parity for the majority of our users. Dual parity is only beneficial in arrays with larger quantities of disk devices for which only a small percentage of our users need.  It is certainly a good feature idea for us to add at some point, but as drive size capacities seem to keep growing faster and faster, the need for extremely large arrays will dwindle in the home market.  Anyhow, this topic of dual parity has been discussed ad nauseum and again, don't want to derail yet another thread on this topic.

 

 

damn, i must be in the super rare category of people who can use VM's and have a large array.

 

i knew i was special, lol.

Link to comment
  • Replies 77
  • Created
  • Last Reply

Top Posters In This Topic

It's great and all that unRaid is getting these new features, but only a portion of its users can take advantage of this whereas a feature like Dual Parity can be used by everyone and is arguably more valuable.  Is that even being worked on?

Let's not start down a path of comparing features and order of importance. Its not a good idea. There is an open thread with discussion on dual parity support, but its never been on the roadmap and there are plenty of other features that we have added with 6.0 that can be used with lesser hardware (e.g. docker).

 

I'd also argue the value of dual parity for the majority of our users. Dual parity is only beneficial in arrays with larger quantities of disk devices for which only a small percentage of our users need.  It is certainly a good feature idea for us to add at some point, but as drive size capacities seem to keep growing faster and faster, the need for extremely large arrays will dwindle in the home market.  Anyhow, this topic of dual parity has been discussed ad nauseum and again, don't want to derail yet another thread on this topic.

 

 

damn, i must be in the super rare category of people who can use VM's and have a large array.

 

i knew i was special, lol.

 

Oh so special  :) :)

 

One note r.e. Jon's comment which I think was intended to imply dual parity is becoming less necessary (I definitely do NOT agree with that):

 

... as drive size capacities seem to keep growing faster and faster, the need for extremely large arrays will dwindle in the home market.

 

I assume by "extremely large arrays" you're referring to the number of disks.  FWIW, the probability of an unrecoverable bit error isn't a function of the number of drives in an array ... it's a function of the number of BITS in the array.  Virtually all modern consumer drives have bit error rates of 1 in 10^14 bits ... that's one unrecoverable read for every 12.5TB of data read.    Doesn't take many drives these days to be reading more than that amount of data routinely ... e.g. a parity check on a 2-drive system with an 8TB parity drive and an 8TB data drive will read more than that !!    And while 8TB drives are rare, 4TB drives certainly aren't, and any system with more than 4 of those will start to have a fairly high statistical likelihood of an unrecoverable read error during a parity check or drive rebuild.

 

 

 

Link to comment

The goal of implementing virtualization technology had been to improve support and usability of applications. As evidenced by the amount of participation and contribution in our forums around apps, this was highly desired by the community.  Making apps better, easier, and safer, was really important for us.  See the blog post in my forum signature for the full story on our mission with virtualization.

 

From a strategy standpoint, there are plenty of competitors that have focused on traditional NAS and incorporated dual parity. We wanted to focus on differentiating unRAID 6 from our competitors in a way relevant to our primary customer markets:  technology, media, and gaming enthusiasts. By creating a software OS that scales with the underlying hardware in terms of capabilities, we differentiate ourselves from the rest of the herd and can pursue new opportunities that our competitors cannot.

 

Data protection capabilities are very important to us. Adding support for dual parity is one way of doing this. Another would be through the addition of btrfs and with it, scrubbing / checksumming capability.  Another would be the ability to install backup services and other file transfer services that enable replication to tiertiary storage which can protect your data. More focus on this will be coming in time.

 

The purpose of this post was to shed some light on why we feel virtualization isn't only important to unRAID, but critical in keeping us unique from competitors.

 

Link to comment

Is the VM Manager adding anything hyper-v related?  Like the clock element?  Maybe check the output xml, rather than the input xml.

 

How do I check the output xml?

 

I clicked the brackets next to the VM, not sure if that's the output xml. I don't see anything about hyper-v.

 

The XML editor button in the webgui for VMs is the furthest to the right.

Link to comment

 

Virbr0 is a auto created private bridge that uses NAT and DHCP from the unRAID server to give a private IP to your vm. If you wish the VM to get an IP from your router, you can change virbr0 to the name of your network bridge you created on the unraid network settings page. If you want ALL VMs you create to use a specific bridge, you can change this setting from the vm settings page.

 

The disk picker issue is new to us. Will need to investigate. Thank you for reporting!

 

OVMF was a last minute inclusion for beta 15.  It does work, but I need to write up a brief guide on this today on working with the EFI shell to install and boot VMs as it is not in the wiki documentation yet.

 

Does this also apply to VM's with static IP addresses? I seem to have problems with this where every time I restart the VM, I'm back on a public network and have to change it to private before using RDP with a static IP to the VM. This is more of a problem with beta 15 than previous betas. I've been using br0 as the bridge as defined in the unRAID network settings for my VM's.

 

If there is a more reliable way to do this, I'm all ears.

 

Gary

Gary can you send me PM with an example setup for what you are trying to do so I can try to replicate?

 

JonP, I sent you a PM about this but the problem seems to have resolved itself. The VM has been responding to the static IP fine over the last day or so. I think it is just Windows being quirky with detected network changes.

 

Thanks, Gary

Link to comment

Has anyone had any luck passing through a PCIe network card to a VM? Every time I tried in the past, unRAID never received an IP address because it connected to the PCIe NIC instead of the my MOBO onboard ethernet, even when I hid the NIC from unRAID on startup. Just wondering if anything had changed recently?

Link to comment

The new GUI is awesome! I've been playing with it using existing VM's and creating new ones.

 

I just edited a Windows 8.1 VM that DOES NOT use pass-through which was previously created under beta 14 by using the new GUI in beta 15. This worked out just fine. There were of course some minor differences between the Before and After XML files (which I expected). I'm only posting this for informational purposes. Some users are probably hesitant doing this for fear of screwing up their VM. Of course I made backups just in case! Here are my XML files in case you're wondering what was changed using the new GUI when editing a VM created under a previous beta. I used bold text to highlight the differences between the 2 versions.

 

Windows 8.1 VM created manually with an XML file under beta 14:

 

<domain type='kvm'>

  <name>Win81MB3-VM</name>

  <uuid>a6230972-5487-4b51-89b1-20cf86c0bd5c</uuid>

  <description>VM running Windows 8.1 Pro and Media Browser 3 Server along with additional HTPC media applications.</description>

  <memory unit='KiB'>4194304</memory>

  <currentMemory unit='KiB'>4194304</currentMemory>

  <vcpu placement='static'>2</vcpu>

  <cputune>

    <vcpupin vcpu='0' cpuset='2'/>

    <vcpupin vcpu='1' cpuset='3'/>

  </cputune>

  <os>

    <type arch='x86_64' machine='pc-q35-2.2'>hvm</type>

    <boot dev='hd'/>

    <boot dev='cdrom'/>

  </os>

  <features>

    <acpi/>

    <apic/>

  </features>

  <cpu mode='host-passthrough'>

    <topology sockets='1' cores='2' threads='1'/>

  </cpu>

  <clock offset='localtime'/>

  <on_poweroff>destroy</on_poweroff>

  <on_reboot>restart</on_reboot>

  <on_crash>restart</on_crash>

  <devices>

    <emulator>/usr/bin/qemu-system-x86_64</emulator>

    <disk type='file' device='disk'>

      <driver name='qemu' type='qcow2'/>

      <source file='/mnt/cache/VMs/KVM/Win81MB3-VM/Win81MB3-VM.qcow2'/>

      <target dev='hda' bus='virtio'/>

      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x0'/>

    </disk>

    <disk type='file' device='cdrom'>

      <driver name='qemu' type='raw'/>

      <source file='/mnt/user/Programs/DreamSpark/Windows 8 x64/Windows8to81.iso'/>

      <target dev='hdc' bus='sata'/>

      <readonly/>

      <address type='drive' controller='0' bus='0' target='0' unit='2'/>

    </disk>

    <disk type='file' device='cdrom'>

      <driver name='qemu' type='raw'/>

      <source file='/mnt/user/Programs/Virtualization ISOs/virtio-win-0.1-100.iso'/>

      <target dev='hdd' bus='sata'/>

      <readonly/>

      <address type='drive' controller='0' bus='0' target='0' unit='3'/>

    </disk>

    <controller type='usb' index='0' model='ich9-ehci1'>

      <address type='pci' domain='0x0000' bus='0x02' slot='0x02' function='0x7'/>

    </controller>

    <controller type='usb' index='0' model='ich9-uhci1'>

      <master startport='0'/>

      <address type='pci' domain='0x0000' bus='0x02' slot='0x02' function='0x0' multifunction='on'/>

    </controller>

    <controller type='sata' index='0'>

      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>

    </controller>

    <controller type='pci' index='0' model='pcie-root'/>

    <controller type='pci' index='1' model='dmi-to-pci-bridge'>

      <address type='pci' domain='0x0000' bus='0x00' slot='0x1e' function='0x0'/>

    </controller>

    <controller type='pci' index='2' model='pci-bridge'>

      <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/>

    </controller>

    <interface type='bridge'>

      <mac address='52:54:00:01:01:02'/>

      <source bridge='br0'/>

      <model type='virtio'/>

      <address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x0'/>

    </interface>

    <serial type='pty'>

      <target port='0'/>

    </serial>

    <console type='pty'>

      <target type='serial' port='0'/>

    </console>

    <input type='tablet' bus='usb'/>

    <input type='mouse' bus='ps2'/>

    <input type='keyboard' bus='ps2'/>

    <graphics type='vnc' port='-1' autoport='yes' websocket='-1' listen='0.0.0.0'>

      <listen type='address' address='0.0.0.0'/>

    </graphics>

    <video>

      <model type='vmvga' vram='16384' heads='1'/>

      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>

    </video>

    <memballoon model='virtio'>

      <address type='pci' domain='0x0000' bus='0x02' slot='0x04' function='0x0'/>

    </memballoon>

  </devices>

</domain>

 

After editing the Windows 8.1 VM with the new GUI (You know, the sexy form to add or edit a VM):

 

<domain type='kvm'>

  <name>Win81MB3-VM</name>

  <uuid>a6230972-5487-4b51-89b1-20cf86c0bd5c</uuid>

  <description>VM running Windows 8.1 Pro and Media Browser 3 Server along with additional HTPC media applications.</description>

  <memory unit='KiB'>4194304</memory>

  <currentMemory unit='KiB'>4194304</currentMemory>

  <memoryBacking>

    <nosharepages/>

    <locked/>

  </memoryBacking>

  <vcpu placement='static'>2</vcpu>

  <cputune>

    <vcpupin vcpu='0' cpuset='2'/>

    <vcpupin vcpu='1' cpuset='3'/>

  </cputune>

  <os>

    <type arch='x86_64' machine='pc-q35-2.2'>hvm</type>

  </os>

  <features>

    <acpi/>

    <apic/>

  </features>

  <cpu mode='host-passthrough'>

    <topology sockets='1' cores='2' threads='1'/>

  </cpu>

  <clock offset='localtime'>

    <timer name='rtc' tickpolicy='catchup'/>

    <timer name='pit' tickpolicy='delay'/>

    <timer name='hpet' present='no'/>

  </clock>

  <on_poweroff>destroy</on_poweroff>

  <on_reboot>restart</on_reboot>

  <on_crash>restart</on_crash>

  <devices>

    <emulator>/usr/bin/qemu-system-x86_64</emulator>

    <disk type='file' device='disk'>

      <driver name='qemu' type='qcow2' cache='none' io='native'/>

      <source file='/mnt/cache/VMs/KVM/Win81MB3-VM/Win81MB3-VM.qcow2'/>

      <target dev='hda' bus='virtio'/>

      <boot order='1'/>

      <address type='pci' domain='0x0000' bus='0x02' slot='0x03' function='0x0'/>

    </disk>

    <disk type='file' device='cdrom'>

      <driver name='qemu' type='raw'/>

      <source file='/mnt/user/Programs/DreamSpark/Windows 8 x64/Windows8to81.iso'/>

      <target dev='hda' bus='sata'/>

      <readonly/>

      <boot order='2'/>

      <address type='drive' controller='0' bus='0' target='0' unit='0'/>

    </disk>

    <disk type='file' device='cdrom'>

      <driver name='qemu' type='raw'/>

      <source file='/mnt/user/Programs/Virtualization ISOs/virtio-win-0.1-100.iso'/>

      <target dev='hdb' bus='sata'/>

      <readonly/>

      <address type='drive' controller='0' bus='0' target='0' unit='1'/>

    </disk>

    <controller type='usb' index='0' model='ich9-ehci1'>

      <address type='pci' domain='0x0000' bus='0x02' slot='0x02' function='0x7'/>

    </controller>

    <controller type='usb' index='0' model='ich9-uhci1'>

      <master startport='0'/>

      <address type='pci' domain='0x0000' bus='0x02' slot='0x02' function='0x0' multifunction='on'/>

    </controller>

    <controller type='sata' index='0'>

      <address type='pci' domain='0x0000' bus='0x00' slot='0x1f' function='0x2'/>

    </controller>

    <controller type='pci' index='0' model='pcie-root'/>

    <controller type='pci' index='1' model='dmi-to-pci-bridge'>

      <address type='pci' domain='0x0000' bus='0x00' slot='0x1e' function='0x0'/>

    </controller>

    <controller type='pci' index='2' model='pci-bridge'>

      <address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/>

    </controller>

    <interface type='bridge'>

      <mac address='52:54:00:01:01:02'/>

      <source bridge='br0'/>

      <model type='virtio'/>

      <address type='pci' domain='0x0000' bus='0x02' slot='0x01' function='0x0'/>

    </interface>

    <serial type='pty'>

      <target port='0'/>

    </serial>

    <console type='pty'>

      <target type='serial' port='0'/>

    </console>

    <input type='tablet' bus='usb'/>

    <input type='mouse' bus='ps2'/>

    <input type='keyboard' bus='ps2'/>

    <graphics type='vnc' port='-1' autoport='yes' websocket='-1' listen='0.0.0.0'>

      <listen type='address' address='0.0.0.0'/>

    </graphics>

    <video>

      <model type='vmvga' vram='16384' heads='1'/>

      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>

    </video>

    <memballoon model='virtio'>

      <address type='pci' domain='0x0000' bus='0x02' slot='0x04' function='0x0'/>

    </memballoon>

  </devices>

</domain>

 

Hope that helps some of you that are curious about updating a VM with the new GUI,

 

Gary

Link to comment

The XML editor button in the webgui for VMs is the furthest to the right.

 

Great! That's what I thought and what I had been checking.

 

Full XML:

<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>Gaming</name>
  <uuid>d46c5469-e9f2-edbe-01b2-63da5d44202c</uuid>
  <description>Windows 7 Gaming Image</description>
  <memory unit='KiB'>8388608</memory>
  <currentMemory unit='KiB'>8388608</currentMemory>
  <memoryBacking>
    <nosharepages/>
    <locked/>
  </memoryBacking>
  <vcpu placement='static'>6</vcpu>
  <cputune>
    <vcpupin vcpu='0' cpuset='0'/>
    <vcpupin vcpu='1' cpuset='1'/>
    <vcpupin vcpu='2' cpuset='2'/>
    <vcpupin vcpu='3' cpuset='3'/>
    <vcpupin vcpu='4' cpuset='4'/>
    <vcpupin vcpu='5' cpuset='5'/>
  </cputune>
  <os>
    <type arch='x86_64' machine='pc-i440fx-2.2'>hvm</type>
  </os>
  <features>
    <acpi/>
    <apic/>
  </features>
  <cpu mode='host-passthrough'>
    <topology sockets='1' cores='6' threads='1'/>
  </cpu>
  <clock offset='localtime'>
    <timer name='rtc' tickpolicy='catchup'/>
    <timer name='pit' tickpolicy='delay'/>
    <timer name='hpet' present='no'/>
  </clock>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/qemu-system-x86_64</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='none' io='native'/>
      <source file='/mnt/cache/VM/Windows 7/vdisk1.img'/>
      <target dev='hdc' bus='virtio'/>
      <boot order='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/user/VM/GSP1RMCHPXFREO_EN_DVD.iso'/>
      <target dev='hda' bus='ide'/>
      <readonly/>
      <boot order='2'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/mnt/user/VM/virtio-win-0.1-100.iso'/>
      <target dev='hdb' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='0' target='0' unit='1'/>
    </disk>
    <controller type='usb' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'/>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:a2:d0:6d'/>
      <source bridge='virbr0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </memballoon>
  </devices>
  <qemu:commandline>
    <qemu:arg value='-device'/>
    <qemu:arg value='ioh3420,bus=pci.0,addr=1c.0,multifunction=on,port=2,chassis=1,id=root.1'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='vfio-pci,host=02:00.0,bus=root.1,addr=00.0,multifunction=on,x-vga=on'/>
  </qemu:commandline>
</domain>

 

To test the card, I installed windows on a spare drive and booted the system with it. The card seems to operate fine, I was able to load the windows desktop even with the generic VGA drivers. Pretty much at a loss as to why it's not working for this VM.

Link to comment

Two things.  First, it appears you're not passing through the audio function of the GPU.  Edit the VM (not XML editing, just regular edit) and add the NVIDIA sound device to it, then try to start.

 

If that doesn't work, try switching your machine type from i440fx to q35.

 

Lastly, I see you're trying to create a Windows 7 virtual machine.  Windows 8 is actually much better for GPU pass through and should allow you to use OVMF mode as Windows 8 support UEFI.  To toggle OVMF, you will need to create a new VM and under the advanced view, adjust the BIOS setting from SeaBIOS to OVMF.

Link to comment

Two things.  First, it appears you're not passing through the audio function of the GPU.  Edit the VM (not XML editing, just regular edit) and add the NVIDIA sound device to it, then try to start.

 

If that doesn't work, try switching your machine type from i440fx to q35.

 

Hi Jon,

 

I've tried both of these things (originally, I had audio function enabled and only disabled it as a test). Switching to q35 didn't appear to make a difference.

 

Lastly, I see you're trying to create a Windows 7 virtual machine.  Windows 8 is actually much better for GPU pass through and should allow you to use OVMF mode as Windows 8 support UEFI.  To toggle OVMF, you will need to create a new VM and under the advanced view, adjust the BIOS setting from SeaBIOS to OVMF.

 

I'll try this. Maybe there's an issue with SeaBIOS for the passthrough? As you mentioned previously, it shouldn't be a Windows 7 issue as I should have at least seen the seaBIOS screen.

 

Thanks,

Greg

Link to comment

Two things.  First, it appears you're not passing through the audio function of the GPU.  Edit the VM (not XML editing, just regular edit) and add the NVIDIA sound device to it, then try to start.

 

If that doesn't work, try switching your machine type from i440fx to q35.

 

Hi Jon,

 

I've tried both of these things (originally, I had audio function enabled and only disabled it as a test). Switching to q35 didn't appear to make a difference.

 

Lastly, I see you're trying to create a Windows 7 virtual machine.  Windows 8 is actually much better for GPU pass through and should allow you to use OVMF mode as Windows 8 support UEFI.  To toggle OVMF, you will need to create a new VM and under the advanced view, adjust the BIOS setting from SeaBIOS to OVMF.

 

I'll try this. Maybe there's an issue with SeaBIOS for the passthrough? As you mentioned previously, it shouldn't be a Windows 7 issue as I should have at least seen the seaBIOS screen.

 

Thanks,

Greg

 

Well, you should have seen the SeaBIOS screen, but if you didn't, you may see the TianoCore screen when you do OVMF mode.  Might need to check to see if your GPU has a BIOS update for it and if that BIOS update adds UEFI support, that could be the fix.

Link to comment

jonp, any change to add passthrough of other devices to the GUI? At least, the plugin could maintain the <qemu:commandline> tag intact when editing.....

 

This is a future feature that we have to work on still.  The challenge is specifically with storage, network, and USB controllers.  These are devices that unRAID OS utilizes and therefore could cause major issues if assigned to a VM.  The trick is determining for each PCI device in use, whether or not assigning that device to the VM will break unRAID OS somehow. 

  • Assigning a storage controller that is used for array devices would hard-detach those from the array...not good.
  • Assigning a network controller should be fine, so long as there is another network controller that unRAID can use.
  • Assigning a USB controller should also be fine, so long as that controller isn't the one used by the unRAID flash device.

 

There are other considerations with IOMMU that we also need to consider before we support other device types.  Graphics and sound were logical first choices as they are never used by our OS.

 

I cannot stress this enough:  passing through other devices than what we support in the GUI is not officially supported yet.  Until we can build in code to detect the previously described scenarios, passing through other device types by editing XML is "at your own risk."

 

As far as the form-based editor maintaining custom XML code for manual qemu arguments or other tweaks, Eric has mentioned to me that he'd like to do that, but I can't say for certain when that would be implemented.

Link to comment

When assigning CPU to VMs via the UI, it seems that if I want more than one, I've got to specify the cores and these are then pinned to that VM, meaning they are unavailable to other VMS. Help indicates that this is default.  Is this correct?

 

Is there a way to specify the number of CPUs but not have them pinned? Ideally I'd like to run multiple VMs and have them share CPU cores as needed. (This is how I had my Xen VMs set up and it worked really well).

 

Thanks

 

 

 

Link to comment

When assigning CPU to VMs via the UI, it seems that if I want more than one, I've got to specify the cores and these are then pinned to that VM, meaning they are unavailable to other VMS. Help indicates that this is default.  Is this correct?

 

Is there a way to specify the number of CPUs but not have them pinned? Ideally I'd like to run multiple VMs and have them share CPU cores as needed. (This is how I had my Xen VMs set up and it worked really well).

 

Thanks

Pinning cores does not make them unavailable to other VMs.

Link to comment
  • 2 months later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.