diff --git a/include/sys/zfs_ioctl.h b/include/sys/zfs_ioctl.h index 30dfd1b3818d..e8b25e779a2e 100644 --- a/include/sys/zfs_ioctl.h +++ b/include/sys/zfs_ioctl.h @@ -594,6 +594,7 @@ typedef struct { char zpoolHealthState[MAXNAMELEN]; char name[MAXNAMELEN]; + unsigned __int64 l2arc_alloc_size; }zpool_zfs_metrics; typedef struct { diff --git a/module/os/windows/spl/spl-kstat.c b/module/os/windows/spl/spl-kstat.c index 5463100c663e..b3e60d10e65e 100644 --- a/module/os/windows/spl/spl-kstat.c +++ b/module/os/windows/spl/spl-kstat.c @@ -2261,6 +2261,11 @@ int spl_kstat_write(PDEVICE_OBJECT DiskDevice, PIRP Irp, return (0); } +uint64_t +getL2ArcAllocSize(arc_stats_t* arc_ptr) { + return arc_ptr->arcstat_l2_psize.value.ui64; +} + // Added comments inline referring to perl arcstat.pl void arc_cache_counters_perfmon(cache_counters* perf, arc_stats_t* arc_ptr) diff --git a/module/os/windows/zfs/zfs_ioctl_os.c b/module/os/windows/zfs/zfs_ioctl_os.c index b46a08f53c9c..80128255ede5 100644 --- a/module/os/windows/zfs/zfs_ioctl_os.c +++ b/module/os/windows/zfs/zfs_ioctl_os.c @@ -88,6 +88,7 @@ zfs_vfs_ref(zfsvfs_t **zfvp) return (error); } +extern kstat_t* perf_arc_ksp; NTSTATUS zpool_zfs_get_metrics(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_LOCATION IrpSp) { Irp->IoStatus.Information = 0; @@ -112,6 +113,7 @@ NTSTATUS zpool_zfs_get_metrics(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_ perf->zpool_size = 0; perf->zfs_volSize = 0; strncpy(perf->zpoolHealthState, "", sizeof(perf->zpoolHealthState)); + perf->l2arc_alloc_size = 0; perf->used = getUsedData(perf->name); perf->compress_ratio = getCompressRatio(perf->name); @@ -141,6 +143,12 @@ NTSTATUS zpool_zfs_get_metrics(PDEVICE_OBJECT DeviceObject, PIRP Irp, PIO_STACK_ else perf->zfs_volSize = getZvolSize(perf->name); + KSTAT_ENTER(perf_arc_ksp); + int error = KSTAT_UPDATE(perf_arc_ksp, KSTAT_READ); + if (!error) + perf->l2arc_alloc_size = getL2ArcAllocSize(perf_arc_ksp->ks_data); + KSTAT_EXIT(perf_arc_ksp); + Irp->IoStatus.Information = sizeof(zpool_zfs_metrics); return STATUS_SUCCESS; }