Our initial plans for testing involved not only writing up detailed unit /
functional tests using ATF, but we also wanted to do some integration testing in
real time. As a part of this we wanted to work on rumpkernel(7) and re-write
the existing virtual memory sub-system of Rump to utilize the uvm_hotplug(9)
API.
Everytime I visited rumpkernel(7), I found that the task of implementing the
basic plug/unplug operation from uvm_hotplug(9) was not a trivial task. To start
with rumpkernel(7)’s memory manager was not completely using uvm(9), it stubbed
just enough uvm(9) parts as well as system calls to finish the uvm_init()
.
Also it was interesting when we noticed that the rumpkernel(7) manages the
memory as a vmem(9) arena, whose size depends on the parameters passed to
rumpkernel(7) at start up.
Initially I tried to get uvm_page_physload()
to work within rumpkernel(7) but
this involved a lot of stubbing of many of the functions in uvm(9), even after
this I was not able understand how to map the vmem(9) so that our uvm_hotplug(9)
could properly do plug/unplug of memory.
I noticed that the amount of time and effort required to make rumpkernel(7) to
work as expected was quite large. And that it might side track us from getting
the current work out in time. So the changes to rumpkernel(7) was reverted (the
changes were preserved in our private git repository) and was put on ice.
May be someday in the future when I get enough time and motivation I should
visit the universe of rumpkernel(7) and try to make uvm_hotplug(9) integration
testing within a rump instance a reality.