To be clear, I don’t blame the poster of this comment at all for the content of their post – this is accepted as “common knowledge” by a lot of Linux sysadmins and is probably one of the most likely things that you will hear from one if you ask them to talk about swap. It is unfortunately also, however, a misunderstanding of the purpose and use of swap, especially on modern systems.

  • recursive_recursion [they/them]@programming.dev
    link
    fedilink
    English
    arrow-up
    0
    arrow-down
    1
    ·
    edit-2
    4 months ago

    definitely agreed on against using swap as memory as much as you can especially since it can needlessly wear out your ssd (m.2 on most if not all on modern systems)

    allocating swap is still necessary as it provides features such as:

    • mitigating OOM scenarios (but doesn’t prevent them completely)
    • enabling system hibernation(suspend-to-disk)

    On my journey to learning Arch Linux I’ve personally tried:

    • 0 swap: which was pretty awful with constant unexpected system freezes/crashes
    • swap file: finicky but doable
    • swap partition: typical default/ol’reliable

    the last two doesn’t guarantee 0 problems as user errors such as allocating too much system memory to VMs can cause issues for the host system, but it does tend to mitigate the majority of issues that prevent the perception of system stability in comparison to Windows or Macs

    Resources:

    • DefederateLemmyMl@feddit.nl
      link
      fedilink
      English
      arrow-up
      2
      ·
      4 months ago

      0 swap: which was pretty awful with constant unexpected system freezes/crashes

      I’ve run Arch without swap for many years without issues. The key of course is that you need enough RAM for what you are trying to do with your computer.

      There’s no reason why a 32GB RAM + 0GB swap system should have more problems than a 16GB RAM + 16GB swap system with the same workload. If anything, the former is going to run much better.

      swap file: finicky but doable

      What is finicky about a swap file?

      It’s just this:

      mkswap -U clear --size 4G --file /swapfile
      swapon /swapfile
      

      Done

      If anything it’s way easier to create a file in your filesystem than having to (re-)partition your drive to have a swap partition. Much more flexible too if you want to change your swap configuration in the future.

      • recursive_recursion [they/them]@programming.dev
        link
        fedilink
        English
        arrow-up
        0
        arrow-down
        1
        ·
        4 months ago

        I’ve run Arch without swap for many years without issues. The key of course is that you need enough RAM for what you are trying to do with your computer.

        There’s no reason why a 32GB RAM + 0GB swap system should have more problems than a 16GB RAM + 16GB swap system with the same workload. If anything, the former is going to run much better.

        I run a lot of VMs; I typically run 2 at the same time in addition to running other programs in the background, my usecase is more eccentric than most users in the Linux space which is already pretty niche

        What is finicky about a swap file?

        It’s just this:

        mkswap -U clear --size 4G --file /swapfile
        swapon /swapfile
        

        Done

        I’m using BTRFS with LUKS-based Full Disk Encryption, the last time I used swapfiles with BTRFS with FDE it was in 2019 and it was painful to say the least, I rememeber spending several weeks scouring Stack and the Arch forums in order to get it to work properly.

        • usecases and preferences will differ from user to user, so I wouldn’t advise assuming a one-size-fits-all solution

        If anything it’s way easier to create a file in your filesystem than having to (re-)partition your drive to have a swap partition. Much more flexible too if you want to change your swap configuration in the future.

        swapfiles are great in that you can resize them at will, however after trying all 3 options I found myself questioning when would I even want to resize swap for a single system, so at a certain point I felt that swapfiles were more of a gimmick cause again you don’t really want to depend on swap if can.

        • if you’re consistently reaching your physical memory limits, upgrading your ram will most likely be the best bet for both system stability and hardware durability
        • DefederateLemmyMl@feddit.nl
          link
          fedilink
          English
          arrow-up
          1
          ·
          4 months ago

          I run a lot of VMs; I typically run 2 at the same time in addition to running other programs in the background, my usecase is more eccentric than most users in the Linux space which is already pretty niche

          If what you’re doing involves using close to all of your system memory, it does make sense to add swap. So your use case is a good example actually.

          I also have an old Arch PC that I use to run various VMs on (currently 6 VMs in use). It does have a swapfile, but the most swap I’ve ever seen in use is about 1GB.

          I’m using BTRFS with LUKS-based Full Disk Encryption, the last time I used swapfiles with BTRFS with FDE it was in 2019 and it was painful to say the least, I rememeber spending several weeks scouring Stack and the Arch forums in order to get it to work properly.

          Weird. Sounds like you may have painted yourself a bit into a corner by using BTRFS then. I use trusty old ext4 on top of LUKS FDE, no issues with swapfiles whatsoever.

          That brings me to another downside of swap partitions: encryption. You can leak sensitive data through your swap partition, so it should be encrypted. If you use a plain partition, without LUKS in between, information in your swap is exposed. So you need to do more configuration to setup LUKS on your swap partition.

          If you use a swapfile on an already encrypted filesystem though, you don’t have to worry about it.

          when would I even want to resize swap for a single system

          Maybe your requirements change (e.g. “I want to be able to hibernate”), maybe your memory configuration changes, maybe you’ve underestimated or overestimated how much swap you need.

          Case in point: the Arch PC I mentioned above only uses upto 1GB of swap, but it has a 16GB swapfile. This discussion has brought to my attention that perhaps I should downsize the swapfile a bit and free up disk space.

          you don’t really want to depend on swap if can

          That is my position too. It’s always better to have a properly sized system, or limit what you push on an existing system. High swap usage rarely results in a good experience.

      • recursive_recursion [they/them]@programming.dev
        link
        fedilink
        English
        arrow-up
        0
        arrow-down
        2
        ·
        edit-2
        4 months ago

        after a quick preliminary search,
        a couple of things I’ve found out:

        this might not necessarily be adopted by the mainstream desktop users, due to the nature of zram compressing data in addition to disallowing hibernation

        Hibernating to swap on zram is not supported, even when zram is configured with a backing device on permanent storage. logind will protect against trying to hibernate to a swap space on zram.

        • data compression by nature incurs dataloss so there are both pro & con tradeoffs to which should be communicated to the user otherwise they might receive an unnecessary worse user experience:
          • “why is my computer so buggy?”
            • (the system is working as it’s coded but not working in they way the user expects it to)
              • this would be unfortunate as they might leave back to Windows or MacOS
          • I could be completely wrong about this, if so please comment or disregard this section entirely

        to me atm; zram seems great for server based systems rather than for desktop users’ systems


        one other method for zram mainstream adoption is to encourage an eccentric system that I’m currently using, which is to have the host system only contain minimal packages to run Virtual Machines:

        • zram compression might be fine as the main services/programs are run within their relevant and/or separated VM containers
          • this simultaneously achieves:
            • Wikipedia - Separation of Concerns
            • enhanced security as the host is further firewalled/bubblewrapped from the guest like Flatpaking/containerization (and malware is less likely to activate due to malicious users being unhelpful in letting their programs run in a VM 😢🤗)
        • hibernation can still be achived by save-stating VMs (VM restoration at will basically achieves hibernation so it doesn’t really matter if the host is shutdown so long as all VMs are saved by the user before host shutdown)

        sorry for the long comment!
        stuff like this interests me the most so I’ve spent a lot of time in learning and tinkering around🤗