Re: [kvm-unit-tests PATCH RFC] s390x: factor out running of tests into common code

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

 



On 12/09/2017 17:15, David Hildenbrand wrote:
> On 12.09.2017 17:01, Paolo Bonzini wrote:
>> On 12/09/2017 16:16, David Hildenbrand wrote:
>>> I want to use this in another file, so instead of replicating, factoring
>>> it out feels like the right thing to do.
>>>
>>> Let's directly provide it for all architectures, they just have
>>> to implement get_time_ms() in asm/time.h to use it.
>>>
>>> Signed-off-by: David Hildenbrand <david@xxxxxxxxxx>
>>> ---
>>>
>>> The next step would be allowing to add custom parameters to a test.
>>> (defining them similar to the test cases).
>>>
>>> Any other requests/nice to have? Does this make sense?
>>
>> It does, but we have at least this, vmx.c (v1 and v2) and vmexit.c, with
>> not exactly overlapping usecases and command-line syntax.  Would it make
> 
> Yes, the ultimate goal would be to combine all into one. I only had a
> look at some ARM tests yet. Will have a look at these.
> 
>> sense to have an API that is not home-grown, e.g. a subset of GTest?
>> The command-line arguments could be globs (like GTest's "-p").
> 
> I'll have a look. Any experts around?

Take a look at https://developer.gnome.org/glib/stable/glib-Testing.html.

But... one obstacle is probably the lack of malloc in x86, so this would
be a prerequisite.  Andrew first proposed it last year, and there was
some discussion on the design and how to abstract giving more memory to
malloc.  You can find the result here:
https://patchwork.kernel.org/patch/9409843/ -- it's a longish thread,
but it should be fun to implement. :)

The idea is to have four allocator APIs:

- "phys" (phys_alloc) provides contiguous physical addresses and is used
in early allocations or for tests that do not enable the MMU.  It need
not be able to free anything.  It also provides an arch-dependent
interface to register the available memory.

- "page" (alloc_page) is initialized after the MMU is started.  It picks
whatever memory wasn't allocated by phys, and slices it in pages.  Like
"phys", it provides contiguous physical addresses.

- "virt" (alloc_vpages) is also initialized after the MMU is started,
and it allocates virtual address space.  It also provides an
arch-dependent interface to install PTEs.  It provides contiguous
virtual addresses.

- "malloc" is the API we all love :) and it uses a pluggable allocator
underneath, called "morecore" in the thread, with the prototype

    void *(*morecore)(size_t size, size_t align_min);

In the beginning "morecore" simply uses "phys", later it is switched
(when the MMU is started) to use both "page" and "virt".  That is it
takes not necessarily consecutive physical memory at page
granularity from "page", it assigning consecutive virtual address (from
"virt") to it, and if needed it also slices pages into smaller allocations.

Of course each could be arbitrarily complicated, but it need not be.

"page" could be a buddy system, but really in practice it need not even
support reusing freed pages, except for 1-page allocations.  This makes
it enough to use a simple free list of pages, plus a separately-tracked
huge block of consecutive free physical addresses at the top.

Likewise, "malloc" could be Doug Lea's malloc, but really in practice it
will just be a small veneer over morecore, with a dummy free.  Like the
testing thing, the important part is avoiding under-engineering.

Quoting from the thread, you can choose separately at each layer whether
to implement freeing or not.  "phys", "virt" and "morecore" do not need
it.  See in particular the Nov. 3, 2016, 5:34 p.m. message for a plan to
transform Drew's v2 series
(https://www.spinics.net/lists/kvm/msg139685.html) into the design
envisioned above.

Paolo



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux