found an article explaining another linux VM "feature":
The Swap Cache
When swapping pages out to the swap files, Linux avoids writing pages if it does not have to. There are times when a page is both in a swap file and in physical memory. This happens when a page that was swapped out of memory was then brought back into memory when it was again accessed by a process. So long as the page in memory is not written to, the copy in the swap file remains valid.
Linux uses the swap cache to track these pages. The swap cache is a list of page table entries, one per physical page in the system. This is a page table entry for a swapped out page and describes which swap file the page is being held in together with its location in the swap file. If a swap cache entry is non-zero, it represents a page which is being held in a swap file that has not been modified. If the page is subsequently modified (by being written to), its entry is removed from the swap cache.
When Linux needs to swap a physical page out to a swap file it consults the swap cache and, if there is a valid entry for this page, it does not need to write the page out to the swap file. This is because the page in memory has not been modified since it was last read from the swap file.
The entries in the swap cache are page table entries for swapped out pages. They are marked as invalid but contain information which allow Linux to find the right swap file and the right page within that swap file.
isn't that great? linux swaps out active data from RAM just to cache it? so instead of actually moving data from swap back into RAM, because it is ACTIVE DATA, it keeps it in swap and now has to keep it in sync by wasting CPU and disk i/o time. Knowing how bad linux VM in relation to swapping is, it creates a huge problem. consider this scenario: you have a bunch of active data in swap and it is being cached in RAM, meaning your RAM is still utilized, then
linux decides to cache some more of filesystem and your system is basically out of swap and out of RAM at the same time. your main process using all this RAM(read: the most important process) is killed and you are screwed.
very unimpressive, linux.