Re: Swap partition priority

Joshua Armstrong <[email protected]>
Newsgroups gmane.os.freebsd.devel.hackers
Message-ID <[email protected]>
Short answer, yes - interleaving is hardcoded and the swapon(2) syscall only accepts the device node name (or file name). Here’s the doc header comment for the allocation code in sys/vm/swap_pager.c:

    915 /*
    916  * SWP_PAGER_GETSWAPSPACE() -   allocate raw swap space
    917  *
    918  *      Allocate swap for up to the requested number of pages.  The
    919  *      starting swap block number (a page index) is returned or
    920  *      SWAPBLK_NONE if the allocation failed.
    921  *
    922  *      Also has the side effect of advising that somebody made a mistake
    923  *      when they configured swap and didn't configure enough.
    924  *
    925  *      This routine may not sleep.
    926  *
    927  *      We allocate in round-robin fashion from the configured devices.
    928  */

However, the suggestion to use a concatenated GEOM should work great because that’s a single device according to the swap and the GEOM allocator is (should be) entirely transparent to the swap strategy:

Relevant snippet from swapgeom_strategy:

   3212         bp->b_caller1 = bio;
   3213         bio->bio_caller1 = sp;
   3214         bio->bio_caller2 = bp;
   3215         bio->bio_cmd = bp->b_iocmd;
   3216         bio->bio_offset = (bp->b_blkno - sp->sw_first) * PAGE_SIZE;
   3217         bio->bio_length = bp->b_bcount;
   3218         bio->bio_done = swapgeom_done;
   3219         bio->bio_flags |= BIO_SWAP;
   3220         if (!buf_mapped(bp)) {
   3221                 bio->bio_ma = bp->b_pages;
   3222                 bio->bio_data = unmapped_buf;
   3223                 bio->bio_ma_offset = (vm_offset_t)bp->b_offset & PAGE_MASK;
   3224                 bio->bio_ma_n = bp->b_npages;
   3225                 bio->bio_flags |= BIO_UNMAPPED;
   3226         } else {
   3227                 bio->bio_data = bp->b_data;
   3228                 bio->bio_ma = NULL;
   3229         }
   3230         g_io_request(bio, cp);
   3231         return;


> On Aug 18, 2026, at 9:00 AM, Joshua Armstrong <[email protected]> wrote:
> 
> I’ll throw my hat into this ring.
> 
> As soon as I’m finished with my meeting, I’ll check the swap management / virtual memory code to see if interleaving is hardcoded or not. I believe the current (and long-standing, according to my ancient copy of the Unix System Administration Handbook) behavior is to interleave swap writes between configured devices for performance.
> 
> I agree, however, that having a priority system would make more sense in today’s world. I sometimes end up creating a temporary zvol and using that as emergency extra swap if I’m building world, but I would assume this has a performance penalty (though perhaps not massive) versus swap partitions on bare disks.
> 
> -Joshua
> 
>> On Aug 18, 2026, at 3:48 AM, Miroslav Lachman <[email protected]> wrote:
>> 
>> On 18/08/2026 09:49, Stéphane Rochoy wrote:
>>> Andrea Venturoli <[email protected]> writes:
>>>> Is it possible to set swap partition priority?
>>>> According to swapon(8), the answer is no, but I wonder if the man page
>>>> might be outdated, if patches are available, etc...
>>>> 
>>>> The reason is I have SSDs and HDDs in the same system: I normally use
>>>> swap on SSDs (for speed obviously), but sometimes the amount is not enough.
>>>> So I'm ponderind adding swap on HDDS too, but this would slow down
>>>> everyrting unless it's really used as last resort.
>>> Hello,
>>> Long ago I came accross a setup were the swap device was a GEOM mirror
>>> (see gmirror(8)). AFAIK it was working except for vmcores: the kernel
>>> was always using the first device which required to help savecore(8) a
>>> bit.
>>> So maybe there's some GEOM class matching your needs.
>> There is geom_concat - see man gconcat. It may be possible to use it for swap (never tried it).
>> 
>> Best regards
>> Miroslav Lachman
>> 
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.