Hi guys!
I have what I'd consider a beefy gaming PC. AMD 7700 CPU, 32GB RAM, 7800XT 16GB, NVMe 1TB for OS, mSATA SSD 2TB for storage/games.
So...whenever I get a while using the computer, with a bunch of windows open, say firefox taking 4GB of RAM, total for everything a bit over 16GB...I'm prone to get a whole system slowdown/freeze, which can take a few full minutes until it settles. I can see the storage red led on the whole time without blinking, so it really looks like swapping.
However sometimes I don't see movements in the system process viewer, in usage from RAM/swap, I'd imagine those graphs would change if the data in swap has changed.
Swapping is set in the mSATA, taking 8GB, so I reckon that migth not be the fastest. Still, that's an SSD. I'm not sure how can I check/troubleshoot whatever is tanking my computer performance?
sudo sysctl vm.swappiness=10
Been enjoying Linux for ~25 years, but have never been happy with how it handled low memory situations. Swapping have always killed the system, tho it have improved a little. It's been a while since I've messed with it. I've buckled up and are using more ram now, but afair, you can play with:
(0. reduce running software, and optimize them for less memory, yada yada)
EDIT: 6. when NOT gaming, add some of your vram as swap space. Its much faster than your ssd. Search github or your repository for 'vram cache' or something like that. It works via opencl, so everyone with dedicated vram can use it as super fast cache. Perhaps others can remember the name/link ?
Something like that anyway, others will know more about each point.
Also, perhaps ask an AI to create a small interface for you to fiddle with vm settings and cgroups in an automated/permanent way ? just a quick thought. Good luck.
An SSD is a few thousand times slower than ram
What's your ram usage look like? Your system shouldn't need swap unless you are running something very ram intensive
It reduces the drive’s lifespan.
Let's remember that swapping frequency and volume are system-dependent; practically zero on many systems. On a healthy system that doesn't swap much, having swap space on an SSD can be easier on the environment and wallet than buying and powering a separate device for it.
Nevertheless, I agree that minimizing SSD writes is worthwhile., and avoid the mindset of an SSD's useful lifetime ending when I'm done with it. (See my other comment.)
In the sysstat package, there's a command,
iostat
, that shows the amount of time that the average CPU (core) is waiting for something."User" is the CPU time used by regular processes. "Nice" is the time used by "niced" processes, stuff running at low priority. "System" is time used by the kernel. "Iowait" is the time waiting for I/O operations to complete.
If you're bounded on I/O, then the iowait number is probably going to be relatively high.
It'll also show you I/O load on each device (and the sysstat package can log this over time, let you use
sar
to see historical numbers).You can artificially induce load on a given I/O device to see whether load on it induces your problem. Something like this:
That'll start your system just writing zeroes to a file. If it's I/O contention on the mSATA drive, then I'd expect you to see the problems you mentioned.
One thing you might check is whether your system is logging errors during this time. I don't know what a failing SSD looks like, but a failing rotational drive would often see errors and then attempts to re-perform I/O operations, and they'll show up in the kernel log. To see kernel errors since the current boot:
The smartmontools package contains a command,
smartctl
, which will let you see what your drive thinks of its own health. I'm not really familiar with what a failing SSD would look like, but with rotational drives, it can indicate that something's wrong with the drive, and it looks like my SSDs do report SMART status.##Moving swap
Linux can, if it needs to, use a swap file instead of a swap partition, so you don't need to repartition your NVMe if you just want to try putting your swap on the NVMe.
If you want to, first, for the current boot, disable all the active swap partitions.
If you run
top
, you'll see the available swap be at zero.Then you want to create the swap file. Say we drop it in /var:
And then you can enable it:
Then see how things perform.
If it makes your problem go away and you want to make the change persistent:
In /etc/fstab, you'll have a line for your swap partition that the system reads at each boot. Will probably look something like this:
Comment that out by sticking a "#" at the beginning of your line, and put a line in for your swapfile:
Thanks for the very detailed guide. Would you advice to have such a large swapfile? If I remember correctly, the old advice was to have double the storage in swap than in RAM. But after 4 or 8GB of RAM or so, this is no longer needed and just a generic amount of swap is kinda needed.
I'm moving now my swapfile to the nvme. I might put it in /var indeed. Thanks!
On laptops, you normally want at least as much swap space as you do physical memory, as when you hibernate the thing, that's where the hibernation data is stored, and if you don't have enough space there, hibernation will fail. IIRC, it's also required for some kernel debugging technique (where, as hazy memory indicates, I believe the kernel can basically "dump core" to swap space, then reboot and write it out to regular storage). So it certainly works, because there are a lot of Linux systems out there that use that much relative to physical memory. Though I admit that I've never tried using a swap file instead of a swap partition, myself.
It's not quite like the old days, with rotational drives, and pre-OOM killer, where having a huge amount of swap would let the system bog down to the point where it couldn't be used.
Do you need 32GB swap? Probably not, if you don't plan to hibernate the system. But unless you need the storage for something else, probably doesn't hurt. And if you've got a 1TB system drive, I doubt that you're short on space.
I have 128GB of main memory and 128GB of swap on this system. Same 1:1 ratio, and I normally use that on Linux systems.
For the example, I just chose an arbitrary, "reasonable" size. Feel free to pick a size that you feel is better, if you'd prefer something else.
state of computer operation where no additional memory can be allocated
Contributors to Wikimedia projects (Wikimedia Foundation, Inc.)