Re: [PATCH v4 kvmtool 00/12] arm64: Allow the user to set RAM base address

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 16/06/2022 14:48, Alexandru Elisei wrote:
The series can be found at [1]. It is loosely based on the patches that
allow the user to define the VM memory layout (RAM + MMIO) [2]. I've
cherry-picked a handful of patches from that series, the rest I wrote from
scratch since there have been several changes to the way guest memory is
handled. I've chosen to focus on specifying the RAM layout with only one
RAM bank and leave the rest for a later series because this was relatively
easy to accomplish, while still being very useful.

What this series does: for arm64, the user can now specify the base address
for RAM:

$ ./lkvm run -m1G@2G .. # Equivalent to ./lkvm run -m1024

The memory units are B (bytes), K (kilobytes), M (megabytes), G
(gigabytes), T (terrabytes), P (petabytes). Lowercase is also valid.

Want to put RAM at the top of the physical address range? Easy:

$ ./lkvm run -m2G@1022G .. # Assumes the maximum is 40 bits of IPA

There one limitation on the RAM base address: it must not overlap with the
MMIO range that kvmtool uses for arm/arm64, which lives below 2GB.

Why this is useful, in my opinion:

1. Testing how a payload handles different memory layouts without the need
to hack kvmtool or find the hardware that implements the desired layout.

2. It can serve as a development tool for adding support for larger PA
ranges for Linux and KVM (currently capped at 48 bits for 4k/16k pages), or
other payloads.

Summary of the series
======================

* The series starts with refactoring how kvm->cfg.ram_size is validated
   and used, followed by several cleanups in the arm and arm64 code.

* Then patch #8 ("builtin_run: Allow standard size specifiers for memory")
   introduced the ability to specify the measurement unit for memory. I
   believe that typing the equivalent of 2TB in megabytes isn't appealing
   for anyone.

* More cleanups in the arm/arm64 code follow, which are needed for patch
   #12 ("arm64: Allow the user to specify the RAM base address"). This is
   where the ability to specify the RAM base address is introduced.

Testing
=======

Same testing as before:

- Build tested each patch for all architectures.

- Ran an x86 kernel with and without setting the amount of RAM using the
   memory specifiers; tested that setting the RAM address results in an
   error.

- Ran an arm64 kernel without setting the size, with setting the size and
   with setting the size and address; tried different addresses (2G, 3G,
   256G); also tested that going below 2G or above the maximum IPA correctly
   results in an error.

- Ran all arm64 kvm-unit-test tests with similar combinations of memory
   size and address (instead of 256G I used 128G, as that's where I/O lives
   for qemu and kvm-unit-tests maps that unconditionally as I/O).

- Ran all 32bit arm tests on an arm64 host with various combinations of
   memory size and address (base address at 2G and 2.5G only due to a
   limitation in the way the tests are set up).

I have tested this series on arm64 Fast model, with memory placed from
32bit to 48bit IPA and it works well.

For the series:

Reviewed-and-Tested-by: Suzuki K Poulose <suzuki.poulose@xxxxxxx>
_______________________________________________
kvmarm mailing list
kvmarm@xxxxxxxxxxxxxxxxxxxxx
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm



[Index of Archives]     [Linux KVM]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux