svn commit: r246940 - vendor-sys/illumos/dist/uts/common/fs/zfs vendor-sys/illumos/dist/uts/common/fs/zfs/sys vendor/illumos/dist/lib/libzpool/common vendor/illumos/dist/lib/libzpool/common/sys
Martin Matuska
mm at FreeBSD.org
Mon Feb 18 11:48:09 UTC 2013
Author: mm
Date: Mon Feb 18 11:48:08 2013
New Revision: 246940
URL: http://svnweb.freebsd.org/changeset/base/246940
Log:
Update vendor/illumos/dist and vendor-sys/illumos/dist
to illumos-gate 13957:512faafc0eaf
Illumos ZFS issues:
3537 want pool io kstats
Modified:
vendor-sys/illumos/dist/uts/common/fs/zfs/spa_misc.c
vendor-sys/illumos/dist/uts/common/fs/zfs/sys/spa_impl.h
vendor-sys/illumos/dist/uts/common/fs/zfs/vdev_queue.c
Changes in other areas also in this revision:
Modified:
vendor/illumos/dist/lib/libzpool/common/kernel.c
vendor/illumos/dist/lib/libzpool/common/sys/zfs_context.h
Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/spa_misc.c
==============================================================================
--- vendor-sys/illumos/dist/uts/common/fs/zfs/spa_misc.c Mon Feb 18 09:07:59 2013 (r246939)
+++ vendor-sys/illumos/dist/uts/common/fs/zfs/spa_misc.c Mon Feb 18 11:48:08 2013 (r246940)
@@ -480,6 +480,7 @@ spa_add(const char *name, nvlist_t *conf
mutex_init(&spa->spa_scrub_lock, NULL, MUTEX_DEFAULT, NULL);
mutex_init(&spa->spa_suspend_lock, NULL, MUTEX_DEFAULT, NULL);
mutex_init(&spa->spa_vdev_top_lock, NULL, MUTEX_DEFAULT, NULL);
+ mutex_init(&spa->spa_iokstat_lock, NULL, MUTEX_DEFAULT, NULL);
cv_init(&spa->spa_async_cv, NULL, CV_DEFAULT, NULL);
cv_init(&spa->spa_proc_cv, NULL, CV_DEFAULT, NULL);
@@ -559,6 +560,13 @@ spa_add(const char *name, nvlist_t *conf
KM_SLEEP) == 0);
}
+ spa->spa_iokstat = kstat_create("zfs", 0, name,
+ "disk", KSTAT_TYPE_IO, 1, 0);
+ if (spa->spa_iokstat) {
+ spa->spa_iokstat->ks_lock = &spa->spa_iokstat_lock;
+ kstat_install(spa->spa_iokstat);
+ }
+
return (spa);
}
@@ -608,6 +616,9 @@ spa_remove(spa_t *spa)
spa_config_lock_destroy(spa);
+ kstat_delete(spa->spa_iokstat);
+ spa->spa_iokstat = NULL;
+
for (int t = 0; t < TXG_SIZE; t++)
bplist_destroy(&spa->spa_free_bplist[t]);
@@ -625,6 +636,7 @@ spa_remove(spa_t *spa)
mutex_destroy(&spa->spa_scrub_lock);
mutex_destroy(&spa->spa_suspend_lock);
mutex_destroy(&spa->spa_vdev_top_lock);
+ mutex_destroy(&spa->spa_iokstat_lock);
kmem_free(spa, sizeof (spa_t));
}
Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/sys/spa_impl.h
==============================================================================
--- vendor-sys/illumos/dist/uts/common/fs/zfs/sys/spa_impl.h Mon Feb 18 09:07:59 2013 (r246939)
+++ vendor-sys/illumos/dist/uts/common/fs/zfs/sys/spa_impl.h Mon Feb 18 11:48:08 2013 (r246940)
@@ -231,6 +231,8 @@ struct spa {
uint64_t spa_deadman_calls; /* number of deadman calls */
uint64_t spa_sync_starttime; /* starting time fo spa_sync */
uint64_t spa_deadman_synctime; /* deadman expiration timer */
+ kmutex_t spa_iokstat_lock; /* protects spa_iokstat_* */
+ struct kstat *spa_iokstat; /* kstat of io to this pool */
/*
* spa_refcnt & spa_config_lock must be the last elements
* because refcount_t changes size based on compilation options.
Modified: vendor-sys/illumos/dist/uts/common/fs/zfs/vdev_queue.c
==============================================================================
--- vendor-sys/illumos/dist/uts/common/fs/zfs/vdev_queue.c Mon Feb 18 09:07:59 2013 (r246939)
+++ vendor-sys/illumos/dist/uts/common/fs/zfs/vdev_queue.c Mon Feb 18 11:48:08 2013 (r246940)
@@ -29,6 +29,7 @@
#include <sys/zfs_context.h>
#include <sys/vdev_impl.h>
+#include <sys/spa_impl.h>
#include <sys/zio.h>
#include <sys/avl.h>
@@ -142,15 +143,62 @@ vdev_queue_fini(vdev_t *vd)
static void
vdev_queue_io_add(vdev_queue_t *vq, zio_t *zio)
{
+ spa_t *spa = zio->io_spa;
avl_add(&vq->vq_deadline_tree, zio);
avl_add(zio->io_vdev_tree, zio);
+
+ if (spa->spa_iokstat != NULL) {
+ mutex_enter(&spa->spa_iokstat_lock);
+ kstat_waitq_enter(spa->spa_iokstat->ks_data);
+ mutex_exit(&spa->spa_iokstat_lock);
+ }
}
static void
vdev_queue_io_remove(vdev_queue_t *vq, zio_t *zio)
{
+ spa_t *spa = zio->io_spa;
avl_remove(&vq->vq_deadline_tree, zio);
avl_remove(zio->io_vdev_tree, zio);
+
+ if (spa->spa_iokstat != NULL) {
+ mutex_enter(&spa->spa_iokstat_lock);
+ kstat_waitq_exit(spa->spa_iokstat->ks_data);
+ mutex_exit(&spa->spa_iokstat_lock);
+ }
+}
+
+static void
+vdev_queue_pending_add(vdev_queue_t *vq, zio_t *zio)
+{
+ spa_t *spa = zio->io_spa;
+ avl_add(&vq->vq_pending_tree, zio);
+ if (spa->spa_iokstat != NULL) {
+ mutex_enter(&spa->spa_iokstat_lock);
+ kstat_runq_enter(spa->spa_iokstat->ks_data);
+ mutex_exit(&spa->spa_iokstat_lock);
+ }
+}
+
+static void
+vdev_queue_pending_remove(vdev_queue_t *vq, zio_t *zio)
+{
+ spa_t *spa = zio->io_spa;
+ avl_remove(&vq->vq_pending_tree, zio);
+ if (spa->spa_iokstat != NULL) {
+ kstat_io_t *ksio = spa->spa_iokstat->ks_data;
+
+ mutex_enter(&spa->spa_iokstat_lock);
+ kstat_runq_exit(spa->spa_iokstat->ks_data);
+ if (zio->io_type == ZIO_TYPE_READ) {
+ ksio->reads++;
+ ksio->nread += zio->io_size;
+ } else if (zio->io_type == ZIO_TYPE_WRITE) {
+ ksio->writes++;
+ ksio->nwritten += zio->io_size;
+ }
+ mutex_exit(&spa->spa_iokstat_lock);
+ }
}
static void
@@ -317,7 +365,7 @@ again:
zio_execute(dio);
} while (dio != lio);
- avl_add(&vq->vq_pending_tree, aio);
+ vdev_queue_pending_add(vq, aio);
return (aio);
}
@@ -339,7 +387,7 @@ again:
goto again;
}
- avl_add(&vq->vq_pending_tree, fio);
+ vdev_queue_pending_add(vq, fio);
return (fio);
}
@@ -395,7 +443,7 @@ vdev_queue_io_done(zio_t *zio)
mutex_enter(&vq->vq_lock);
- avl_remove(&vq->vq_pending_tree, zio);
+ vdev_queue_pending_remove(vq, zio);
vq->vq_io_complete_ts = ddi_get_lbolt64();
vq->vq_io_delta_ts = vq->vq_io_complete_ts - zio->io_timestamp;
More information about the svn-src-all
mailing list