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
>>
>