How do I prevent a tar pipe from causing swapping?
- by Jeff Shattock
I have a rather large filesystem that I need to transfer from one Linux server to another. I figured the best way to do this was via a tar/netcat pipe arrangment, something like
tar c . | pv | nc blah blah blah
And it works great, the network stays fairly saturated, life is good. Until the source machine starts swapping.
The files are on a raid on the source system, so the read speed is much faster than the write speed on the other end. Since the dest machine hasnt picked up the data yet, the source machine needs to stick it somewhere, so into RAM it goes, until there is no more free RAM. It then starts swapping, which is horribly painful since that machine has its OS installed on a somewhat slow CF card.
Both machines have 4GB of physical ram, 64 bit Ubuntu 9.04 server. GigE link between them.
How do I prevent this swapping? Can I put a "speed-limit" on the tar or netcat process so that the transfer speed doesn't overwhelm the write throughput on the destination end? The man pages didn't list anything, but there might be something I'm overlooking.