mirror of
https://github.com/opnsense/src.git
synced 2026-06-11 09:41:03 -04:00
zfs: spa: ZIO_TASKQ_ISSUE: Use symbolic priority
This allows to change the meaning of priority differences in FreeBSD without requiring code changes in ZFS. MFC after: 1 month Event: Kitchener-Waterloo Hackathon 202506 Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D45390
This commit is contained in:
parent
8ecc419180
commit
fd141584cf
4 changed files with 12 additions and 21 deletions
|
|
@ -45,7 +45,9 @@
|
|||
#ifdef _KERNEL
|
||||
#define CPU curcpu
|
||||
#define minclsyspri PRIBIO
|
||||
#define defclsyspri minclsyspri
|
||||
#define defclsyspri minclsyspri
|
||||
/* Write issue taskq priority. */
|
||||
#define wtqclsyspri ((PVM + PRIBIO) / 2)
|
||||
#define maxclsyspri PVM
|
||||
#define max_ncpus (mp_maxid + 1)
|
||||
#define boot_max_ncpus (mp_maxid + 1)
|
||||
|
|
|
|||
|
|
@ -92,8 +92,10 @@
|
|||
* Treat shim tasks as SCHED_NORMAL tasks
|
||||
*/
|
||||
#define minclsyspri (MAX_PRIO-1)
|
||||
#define maxclsyspri (MAX_RT_PRIO)
|
||||
#define defclsyspri (DEFAULT_PRIO)
|
||||
/* Write issue taskq priority. */
|
||||
#define wtqclsyspri (MAX_RT_PRIO + 1)
|
||||
#define maxclsyspri (MAX_RT_PRIO)
|
||||
|
||||
#ifndef NICE_TO_PRIO
|
||||
#define NICE_TO_PRIO(nice) (MAX_RT_PRIO + (nice) + 20)
|
||||
|
|
|
|||
|
|
@ -623,8 +623,10 @@ extern void delay(clock_t ticks);
|
|||
* Process priorities as defined by setpriority(2) and getpriority(2).
|
||||
*/
|
||||
#define minclsyspri 19
|
||||
#define maxclsyspri -20
|
||||
#define defclsyspri 0
|
||||
/* Write issue taskq priority. */
|
||||
#define wtqclsyspri -19
|
||||
#define maxclsyspri -20
|
||||
|
||||
#define CPU_SEQID ((uintptr_t)pthread_self() & (max_ncpus - 1))
|
||||
#define CPU_SEQID_UNSTABLE CPU_SEQID
|
||||
|
|
|
|||
|
|
@ -1231,29 +1231,14 @@ spa_taskqs_init(spa_t *spa, zio_type_t t, zio_taskq_type_t q)
|
|||
spa->spa_proc, zio_taskq_basedc, flags);
|
||||
} else {
|
||||
#endif
|
||||
pri_t pri = maxclsyspri;
|
||||
/*
|
||||
* The write issue taskq can be extremely CPU
|
||||
* intensive. Run it at slightly less important
|
||||
* priority than the other taskqs.
|
||||
*
|
||||
* Under Linux and FreeBSD this means incrementing
|
||||
* the priority value as opposed to platforms like
|
||||
* illumos where it should be decremented.
|
||||
*
|
||||
* On FreeBSD, if priorities divided by four (RQ_PPQ)
|
||||
* are equal then a difference between them is
|
||||
* insignificant.
|
||||
*/
|
||||
if (t == ZIO_TYPE_WRITE && q == ZIO_TASKQ_ISSUE) {
|
||||
#if defined(__linux__)
|
||||
pri++;
|
||||
#elif defined(__FreeBSD__)
|
||||
pri += 4;
|
||||
#else
|
||||
#error "unknown OS"
|
||||
#endif
|
||||
}
|
||||
const pri_t pri = (t == ZIO_TYPE_WRITE &&
|
||||
q == ZIO_TASKQ_ISSUE) ?
|
||||
wtqclsyspri : maxclsyspri;
|
||||
tq = taskq_create_proc(name, value, pri, 50,
|
||||
INT_MAX, spa->spa_proc, flags);
|
||||
#ifdef HAVE_SYSDC
|
||||
|
|
|
|||
Loading…
Reference in a new issue