2

I have been noticing that if I copy a file to some storage device (the system's HDD, SSD, or to a thumbdrive) a small amount of data (20 - 30 MB) is written to the swap space - and the count increases. Yes, even the systems have available RAM.

Writing to the swap space makes the device very slow. Thrashing is the obvious case.

If I turn swap off before copying, the files gets copied just fine!

Here's a screenshot:

enter image description here

I am copying a big file to /dev/sda2. I have available RAM, yet some data is always written to the swap. This behaviour is same across all the devices I own, and the devices I got time to play around.

I tried changing the swappiness with this command command:

sysctl vm.swappiness=n # n for a value from 0..100

Tried turning the swappiness to 0, and also tried turning the swappiness to 100. The behaviour doesn't change. Any system monitor says I am having a good amount of available RAM. It still writes data to the swap.

  • 1
    Have you tuned swappiness? If you have, you may be seeing a similar issue to me. – Sparhawk Apr 7 at 6:01
  • That's a good point. I haven't tuned the swappiness. It came all by default with the Arch Linux installation. BTW, this only happens when copying big files (with cp, rsync, GUI file managers). So, after copying files, I always have to restart my PC to clear the used swap space. – S.Goswami Apr 7 at 6:07
  • 1
    Please try turning swappiness down (or off), test again, then report back here. – Sparhawk Apr 7 at 6:15
  • So, I tried turning swappiness (with the command: sysctl vm.swappiness=0) to 0, copied a file. Same thing. It writes to swap space like before. I turned swappiness to 100, same behaviour. This is quite confusing. I updated the image above. – S.Goswami Apr 7 at 6:41
  • 1
    Modern applications use posix_madvise(3)/madvise(2) to avoid this unwanted but to be expected behaviour. – A.B Apr 7 at 8:01
1

In general, that behavior is application-dependent on whether the copying application gives proper indication to the kernel as to how it will read the file that it will copy.

In your case I see your file is just slightly bigger than your overall memory, so it might be that your GUI’s file manager requests a full generic mmap on the file instead of copying it in chunks.

Try copying it with cp from a terminal window. The cp command diligently gives indications to the kernel and copies the file in whatever chunks it detects to be the most appropriate for the system. You might still see the cache filling the memory but swapping should not be triggered, if not for just a bunch of bytes due to a spike in memory pressure.

1

What is probably happening, is that ram is being used for disk-cache. Disk-cache is not shown on the monitor that you show. The kernel may then decide to swap out inactive memory, in preference to dropping cache.

If there rely is a performance problem (not just a potential problem), then there are ways to tell the system to do something (e.g. copy a file) without writing to the disk-cache. This will not slow down the write, but will slow-down any future read of the file (i.e if you copy the file, then read it).

  • That does not explain why swap is being used. – Faheem Mitha Apr 7 at 11:39

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.