Hugh,
Great topics. As per one of Rik original points:
skip writeout of zero-filled pages - this can be a big help for KVM virtual machines running Windows, since Windows zeroes out free pages; simply discarding a zero-filled page is not at all simple in the current VM, where we would have to iterate over all the ptes to free the swap entry before being able to free the swap cache page (I am not sure how that locking would even work)
with the extra layer of indirection, the locking for this scheme can be trivial - either the faulting process gets the old page, or it gets a new one, either way it'll be zero filled
Since it's KVMs realm here, can't KSM simply solve the zero-filled pages problem avoiding unnecessary burden for the Swap subsystem?
Cheers, Luca