On 06/22/2009 08:03 PM, Anthony Liguori wrote:
1) Start a guest with 1024, balloon down to 128MB. RSS size is now
2) Live migrate to a different node
3) RSS on different node jumps to ~1GB
3.5) RSS on source node jumps to ~1GB, since reading the page
instantiates the pte
I don't follow. In this case, the issue is:
Surely we can do better here...
For TCG, we always know when memory is dirty and we can check it
atomically. So we know whether a page has changed since we knew it
was last zero. We basically need a ZERO_DIRTY bit. All memory
initially carries this bit and ballooning also sets the bit. During
live migration, we can check the dirty bit first.
You mean, a NONZERO bit which is cleared by ballooning and set on any
write. This will work naturally with the qemu dirty bytemap.
For KVM, we would have to enable dirty tracking always to keep
ZERO_DIRTY up to date. Since write faults are going to happen anyway
at start up, perhaps the cost of doing this wouldn't be so bad?
You need to do this on the source node. Unfortunately, there's no way
to initialize the values racelessly when you start live migration
without introducing a new ioctl. I'd like a more general solution
rather than something that targets this specific problem.
error compiling committee.c: too many arguments to function