virtcontainers: Remove the pc machine

Keeping around two different x86 machines has no added value
and require more tests and maintenance. Prefer the q35 machine
since it has more features and drop the pc machine.

Fixes #1953
Depends-on: github.com/kata-containers/tests#3586
Signed-off-by: Marcel Apfelbaum <marcel@redhat.com>
This commit is contained in:
Marcel Apfelbaum 2021-05-31 11:47:58 +03:00
parent 1faaf5f35d
commit 789a59549e
11 changed files with 20 additions and 81 deletions

View File

@ -65,8 +65,8 @@ configuration in the Kata `configuration.toml` file as shown below.
$ sudo sed -i -e 's/^# *\(hotplug_vfio_on_root_bus\).*=.*$/\1 = true/g' /usr/share/defaults/kata-containers/configuration.toml
```
Make sure you are using the `pc` machine type by verifying `machine_type = "pc"` is
set in the `configuration.toml`.
Make sure you are using the `q35` machine type by verifying `machine_type = "q35"` is
set in the `configuration.toml`. Make sure `pcie_root_port` is set to a positive value.
## Build Kata Containers kernel with GPU support

View File

@ -75,13 +75,6 @@ To use non-large BARs devices (for example, Nvidia Tesla T4), you need Kata vers
Follow the [Kata Containers setup instructions](../install/README.md)
to install the latest version of Kata.
The following configuration in the Kata `configuration.toml` file as shown below can work:
```
machine_type = "pc"
hotplug_vfio_on_root_bus = true
```
To use large BARs devices (for example, Nvidia Tesla P100), you need Kata version 1.11.0 or above.
The following configuration in the Kata `configuration.toml` file as shown below can work:

View File

@ -178,7 +178,7 @@ block_device_driver = "@DEFBLOCKSTORAGEDRIVER_FC@"
# VFIO devices are hotplugged on a bridge by default.
# Enable hotplugging on root bus. This may be required for devices with
# a large PCI bar, as this is a current limitation with hotplugging on
# a bridge. This value is valid for "pc" machine type.
# a bridge.
# Default false
#hotplug_vfio_on_root_bus = true

View File

@ -277,7 +277,7 @@ pflashes = []
# VFIO devices are hotplugged on a bridge by default.
# Enable hotplugging on root bus. This may be required for devices with
# a large PCI bar, as this is a current limitation with hotplugging on
# a bridge. This value is valid for "pc" machine type.
# a bridge.
# Default false
#hotplug_vfio_on_root_bus = true

View File

@ -20,7 +20,7 @@ var defaultCPUFeatures = ""
var systemdUnitName = "kata-containers.target"
const defaultKernelParams = ""
const defaultMachineType = "pc"
const defaultMachineType = "q35"
const defaultVCPUCount uint32 = 1
const defaultMaxVCPUCount uint32 = 0

View File

@ -2095,8 +2095,6 @@ func genericBridges(number uint32, machineType string) []types.Bridge {
case QemuQ35:
// currently only pci bridges are supported
// qemu-2.10 will introduce pcie bridges
fallthrough
case QemuPC:
bt = types.PCI
case QemuVirt:
bt = types.PCI

View File

@ -29,7 +29,7 @@ type qemuAmd64 struct {
const (
defaultQemuPath = "/usr/bin/qemu-system-x86_64"
defaultQemuMachineType = QemuPC
defaultQemuMachineType = QemuQ35
defaultQemuMachineOptions = "accel=kvm,kernel_irqchip"
@ -44,7 +44,6 @@ const (
var qemuPaths = map[string]string{
QemuPCLite: "/usr/bin/qemu-lite-system-x86_64",
QemuPC: defaultQemuPath,
QemuQ35: defaultQemuPath,
QemuMicrovm: defaultQemuPath,
}
@ -71,10 +70,6 @@ var supportedQemuMachines = []govmmQemu.Machine{
Type: QemuPCLite,
Options: defaultQemuMachineOptions,
},
{
Type: QemuPC,
Options: defaultQemuMachineOptions,
},
{
Type: QemuQ35,
Options: defaultQemuMachineOptions,
@ -158,8 +153,7 @@ func newQemuArch(config HypervisorConfig) (qemuArch, error) {
func (q *qemuAmd64) capabilities() types.Capabilities {
var caps types.Capabilities
if q.qemuMachine.Type == QemuPC ||
q.qemuMachine.Type == QemuQ35 ||
if q.qemuMachine.Type == QemuQ35 ||
q.qemuMachine.Type == QemuVirt {
caps.SetBlockDeviceHotplugSupport()
}

View File

@ -42,14 +42,10 @@ func TestQemuAmd64BadMachineType(t *testing.T) {
func TestQemuAmd64Capabilities(t *testing.T) {
assert := assert.New(t)
amd64 := newTestQemu(assert, QemuPC)
amd64 := newTestQemu(assert, QemuQ35)
caps := amd64.capabilities()
assert.True(caps.IsBlockDeviceHotplugSupported())
amd64 = newTestQemu(assert, QemuQ35)
caps = amd64.capabilities()
assert.True(caps.IsBlockDeviceHotplugSupported())
amd64 = newTestQemu(assert, QemuMicrovm)
caps = amd64.capabilities()
assert.False(caps.IsBlockDeviceHotplugSupported())
@ -57,23 +53,11 @@ func TestQemuAmd64Capabilities(t *testing.T) {
func TestQemuAmd64Bridges(t *testing.T) {
assert := assert.New(t)
amd64 := newTestQemu(assert, QemuPC)
len := 5
amd64 := newTestQemu(assert, QemuMicrovm)
amd64.bridges(uint32(len))
bridges := amd64.getBridges()
assert.Len(bridges, len)
for i, b := range bridges {
id := fmt.Sprintf("%s-bridge-%d", types.PCI, i)
assert.Equal(types.PCI, b.Type)
assert.Equal(id, b.ID)
assert.NotNil(b.Devices)
}
amd64 = newTestQemu(assert, QemuMicrovm)
amd64.bridges(uint32(len))
bridges = amd64.getBridges()
assert.Nil(bridges)
amd64 = newTestQemu(assert, QemuQ35)
@ -91,7 +75,7 @@ func TestQemuAmd64Bridges(t *testing.T) {
func TestQemuAmd64CPUModel(t *testing.T) {
assert := assert.New(t)
amd64 := newTestQemu(assert, QemuPC)
amd64 := newTestQemu(assert, QemuQ35)
expectedOut := defaultCPUModel
model := amd64.cpuModel()
@ -108,7 +92,7 @@ func TestQemuAmd64CPUModel(t *testing.T) {
func TestQemuAmd64MemoryTopology(t *testing.T) {
assert := assert.New(t)
amd64 := newTestQemu(assert, QemuPC)
amd64 := newTestQemu(assert, QemuQ35)
memoryOffset := uint64(1024)
hostMem := uint64(100)
@ -139,7 +123,7 @@ func TestQemuAmd64AppendImage(t *testing.T) {
machinesCopy := make([]govmmQemu.Machine, len(supportedQemuMachines))
assert.Equal(len(supportedQemuMachines), copy(machinesCopy, supportedQemuMachines))
cfg := qemuConfig(QemuPC)
cfg := qemuConfig(QemuQ35)
cfg.ImagePath = f.Name()
cfg.DisableImageNvdimm = false
amd64, err := newQemuArch(cfg)
@ -189,41 +173,18 @@ func TestQemuAmd64AppendBridges(t *testing.T) {
var devices []govmmQemu.Device
assert := assert.New(t)
// check PC
amd64 := newTestQemu(assert, QemuPC)
// Check Q35
amd64 := newTestQemu(assert, QemuQ35)
amd64.bridges(1)
bridges := amd64.getBridges()
assert.Len(bridges, 1)
devices = amd64.appendBridges(devices)
assert.Len(devices, 1)
expectedOut := []govmmQemu.Device{
govmmQemu.BridgeDevice{
Type: govmmQemu.PCIBridge,
Bus: defaultPCBridgeBus,
ID: bridges[0].ID,
Chassis: 1,
SHPC: true,
Addr: "2",
},
}
assert.Equal(expectedOut, devices)
// Check Q35
amd64 = newTestQemu(assert, QemuQ35)
amd64.bridges(1)
bridges = amd64.getBridges()
assert.Len(bridges, 1)
devices = []govmmQemu.Device{}
devices = amd64.appendBridges(devices)
assert.Len(devices, 1)
expectedOut = []govmmQemu.Device{
expectedOut := []govmmQemu.Device{
govmmQemu.BridgeDevice{
Type: govmmQemu.PCIBridge,
Bus: defaultBridgeBus,
@ -240,7 +201,7 @@ func TestQemuAmd64AppendBridges(t *testing.T) {
func TestQemuAmd64WithInitrd(t *testing.T) {
assert := assert.New(t)
cfg := qemuConfig(QemuPC)
cfg := qemuConfig(QemuQ35)
cfg.InitrdPath = "dummy-initrd"
amd64, err := newQemuArch(cfg)
assert.NoError(err)
@ -282,7 +243,7 @@ func TestQemuAmd64AppendProtectionDevice(t *testing.T) {
var devices []govmmQemu.Device
assert := assert.New(t)
amd64 := newTestQemu(assert, QemuPC)
amd64 := newTestQemu(assert, QemuQ35)
id := amd64.(*qemuAmd64).devLoadersCount
firmware := "tdvf.fd"

View File

@ -212,9 +212,6 @@ const (
// QemuPCLite is the QEMU pc-lite machine type for amd64
QemuPCLite = "pc-lite"
// QemuPC is the QEMU pc machine type for amd64
QemuPC = "pc"
// QemuQ35 is the QEMU Q35 machine type for amd64
QemuQ35 = "q35"

View File

@ -28,7 +28,7 @@ const (
)
var qemuArchBaseMachine = govmmQemu.Machine{
Type: "pc",
Type: "q35",
}
var qemuArchBaseQemuPaths = map[string]string{
@ -143,7 +143,7 @@ func TestQemuAddDeviceToBridge(t *testing.T) {
// addDeviceToBridge successfully
q := newQemuArchBase()
q.qemuMachine.Type = QemuPC
q.qemuMachine.Type = QemuQ35
q.bridges(1)
for i := uint32(1); i <= types.PCIBridgeMaxCapacity; i++ {
@ -559,10 +559,6 @@ func TestQemuArchBaseAppendIOMMU(t *testing.T) {
CachingMode: true,
},
}
// Test IOMMU is not appended to PC machine type
qemuArchBase.qemuMachine.Type = QemuPC
devices, err = qemuArchBase.appendIOMMU(devices)
assert.Error(err)
qemuArchBase.qemuMachine.Type = QemuQ35
devices, err = qemuArchBase.appendIOMMU(devices)

View File

@ -362,7 +362,7 @@ func TestQemuQemuPath(t *testing.T) {
qemuConfig.HypervisorPath = expectedPath
qkvm := &qemuArchBase{
qemuMachine: govmmQemu.Machine{
Type: "pc",
Type: "q35",
Options: "",
},
qemuExePath: expectedPath,