Skip to content

In my homelab I run a variety of hypervisors including /Hyper-V Server 2012 R2/ which is both fully featured (as a hypervisor) and very spartan (in terms of UI). Any server configuration changes are made through the command line either with Powershell or cmd.

Recently I've been working through setting up a separate network configured to used jumbo frames for higher throughput between some multi-NICed servers as the storage server. Larger packets mean less overhead while transferring large quantities of data because the content:header ratio is reduced, the only drawback is that not all devices and switches support larger frames.

The following steps describe the process for enabling jumbo packets on the Hyper-V host.

Enable the network adapter

This step is probably hardware dependent. In my case, the Supermicro board has Intel 82579LM and 82574L NICs and for the =Ethernet 3= interface, the configuration option was called =Jumbo Packet=. =Get-NetAdapterAdvancedProperty= can be used to find the correct configuration name.

Set-NetAdapterAdvancedProperty -Name "Ethernet 3" -DisplayName "Jumbo Packet" -DisplayValue "9014 Bytes"

Enable the virtual switch

With the driver for the physical hardware updated, the next step is to change the configuration on the virtual switch. Here vEthernet (Storage) may be different depending on how your switches are set up.

netsh interface ip set subinterface "vEthernet (Storage)" mtu=9000 store=persistent

Enable inside the VM.

Finally the guest OS needs to be configured to use an MTU of 9000.

In my case I had a CoreOS guest which is configured with a cloud-config file. In my case the NIC connected to the vEthernet (Storage) virtual switch surfaces as eth1. The 00-eth1.link configuration sets the MTU appropriately and the chaser udev rules trigger is a workaround for Bug #174. The 00-eth1.network sets a static IP on the interface since I have no DHCP server running on this subnet.

Here are the relevant changes to /var/lib/coreos-install/user_data.

coreos:
  ...
  units:
   ...
   - name: 00-eth1.link
      runtime: true
      content: |
        [Match]
        Name=eth1

        [Link]
        MTUBytes=9018
    - name: 00-eth1.network
      runtime: true
      content: |
        [Match]
        Name=eth1

        [Network]
        Address=10.180.1.2/24
    - name: systemd-udev-trigger.service
      command: restart