Skip to content

Commit 46a0b99

Browse files
committed
Make zvol io taskq thread number configurable
1 parent 0d2ecc2 commit 46a0b99

File tree

4 files changed

+19
-1
lines changed

4 files changed

+19
-1
lines changed

include/os/windows/zfs/sys/kstat_windows.h

+2
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ typedef struct windows_kstat {
149149
kstat_named_t zfs_total_memory_limit;
150150
kstat_named_t zfs_removal_suspend_progress;
151151
kstat_named_t cpu_avx_supported;
152+
kstat_named_t zvol_io_threads;
152153
} windows_kstat_t;
153154

154155

@@ -259,6 +260,7 @@ extern uint64_t zfs_initialize_value;
259260
extern int zfs_autoimport_disable;
260261
extern int zfs_removal_suspend_progress;
261262
extern int cpu_avx_supported;
263+
extern int zvol_io_threads;
262264

263265
int kstat_windows_init(void *);
264266
void kstat_windows_fini(void);

module/os/windows/zfs/arc_os.c

+3
Original file line numberDiff line numberDiff line change
@@ -695,6 +695,8 @@ arc_kstat_update_windows(kstat_t *ksp, int rw)
695695
zfs_arc_p_min_shift = ks->arc_zfs_arc_p_min_shift.value.ui64;
696696
zfs_arc_average_blocksize =
697697
ks->arc_zfs_arc_average_blocksize.value.ui64;
698+
zvol_io_threads =
699+
ks->zvol_io_threads.value.ui32;
698700

699701
#ifdef _KERNEL
700702
if (ks->zfs_total_memory_limit.value.ui64 > total_memory &&
@@ -729,6 +731,7 @@ arc_kstat_update_windows(kstat_t *ksp, int rw)
729731
ks->arc_zfs_arc_p_min_shift.value.ui64 = zfs_arc_p_min_shift;
730732
ks->arc_zfs_arc_average_blocksize.value.ui64 =
731733
zfs_arc_average_blocksize;
734+
ks->zvol_io_threads.value.ui32 = zvol_io_threads;
732735

733736
#ifdef _KERNEL
734737
ks->zfs_total_memory_limit.value.ui64 = total_memory;

module/os/windows/zfs/zfs_kstat_windows.c

+6-1
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,8 @@ windows_kstat_t windows_kstat = {
172172
{ "zfs_autoimport_disable", KSTAT_DATA_UINT64 },
173173
{ "zfs_total_memory_limit", KSTAT_DATA_UINT64 },
174174
{ "zfs_removal_suspend_progress", KSTAT_DATA_INT32 },
175-
{ "cpu_avx_supported", KSTAT_DATA_UINT32 }
175+
{ "cpu_avx_supported", KSTAT_DATA_UINT32 },
176+
{ "zvol_io_threads", KSTAT_DATA_UINT32 }
176177
};
177178

178179

@@ -382,6 +383,8 @@ windows_kstat_update(kstat_t *ksp, int rw)
382383
ks->zfs_removal_suspend_progress.value.i32;
383384
cpu_avx_supported =
384385
ks->cpu_avx_supported.value.ui32;
386+
zvol_io_threads =
387+
ks->zvol_io_threads.value.ui32;
385388

386389
} else {
387390

@@ -571,6 +574,8 @@ windows_kstat_update(kstat_t *ksp, int rw)
571574
zfs_removal_suspend_progress;
572575
ks->cpu_avx_supported.value.ui32 =
573576
cpu_avx_supported;
577+
ks->zvol_io_threads.value.ui32 =
578+
zvol_io_threads;
574579
}
575580
arc_kstat_update_windows(ksp, rw);
576581
return (0);

module/os/windows/zfs/zvol_os.c

+8
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ unsigned int zvol_request_sync = 0;
4646
unsigned int zvol_prefetch_bytes = (128 * 1024);
4747
unsigned long zvol_max_discard_blocks = 16384;
4848
unsigned int zvol_threads = 32;
49+
int zvol_io_threads = 0;
4950

5051
taskq_t *zvol_taskq;
5152

@@ -1028,8 +1029,15 @@ const static zvol_platform_ops_t zvol_windows_ops = {
10281029
int
10291030
zvol_init(void)
10301031
{
1032+
if (!zvol_io_threads)
1033+
zvol_io_threads = zvol_threads;
1034+
1035+
zvol_threads = zvol_io_threads;
1036+
10311037
int threads = MIN(MAX(zvol_threads, 1), 1024);
10321038

1039+
KdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL,
1040+
"%s: zvol taskq threads %d regvalue: %d\n", __func__, threads, zvol_io_threads));
10331041
zvol_taskq = taskq_create(ZVOL_DRIVER, threads, maxclsyspri,
10341042
threads * 2, INT_MAX, TASKQ_PREPOPULATE | TASKQ_DYNAMIC);
10351043
if (zvol_taskq == NULL) {

0 commit comments

Comments
 (0)