From owner-svn-src-projects@FreeBSD.ORG Fri Feb 4 04:00:25 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 101F41065693; Fri, 4 Feb 2011 04:00:25 +0000 (UTC) (envelope-from imp@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id F21338FC13; Fri, 4 Feb 2011 04:00:24 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id p1440OHJ068612; Fri, 4 Feb 2011 04:00:24 GMT (envelope-from imp@svn.freebsd.org) Received: (from imp@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id p1440OSk068610; Fri, 4 Feb 2011 04:00:24 GMT (envelope-from imp@svn.freebsd.org) Message-Id: <201102040400.p1440OSk068610@svn.freebsd.org> From: Warner Losh Date: Fri, 4 Feb 2011 04:00:24 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r218251 - projects/graid/head/sys/geom/raid X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 04 Feb 2011 04:00:25 -0000 Author: imp Date: Fri Feb 4 04:00:24 2011 New Revision: 218251 URL: http://svn.freebsd.org/changeset/base/218251 Log: Finish converting #defines to sysctl/tunables. Modified: projects/graid/head/sys/geom/raid/tr_raid1.c Modified: projects/graid/head/sys/geom/raid/tr_raid1.c ============================================================================== --- projects/graid/head/sys/geom/raid/tr_raid1.c Fri Feb 4 03:30:28 2011 (r218250) +++ projects/graid/head/sys/geom/raid/tr_raid1.c Fri Feb 4 04:00:24 2011 (r218251) @@ -35,21 +35,54 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include "geom/raid/g_raid.h" #include "g_raid_tr_if.h" -#define SD_READ_THRESHOLD 10 /* errors to cause a rebuild */ -static int sd_read_threshold = SD_READ_THRESHOLD; -#define SD_REBUILD_SLAB (1 << 20) /* One transation in a rebuild */ -static int sd_rebuild_slab = SD_REBUILD_SLAB; -#define SD_REBUILD_FAIR_IO 20 /* use 1/x of the available I/O */ -static int sd_rebuild_fair_io = SD_REBUILD_FAIR_IO; -#define SD_REBUILD_CLUSTER_IDLE 10 -static int sd_rebuild_cluster_idle = SD_REBUILD_CLUSTER_IDLE; -#define SD_REBUILD_META_UPDATE 500 /* update meta data every 5 GB or so */ -static int sd_rebuild_meta_update = SD_REBUILD_META_UPDATE; +SYSCTL_DECL(_kern_geom_raid); +SYSCTL_NODE(_kern_geom_raid, OID_AUTO, raid1, CTLFLAG_RW, 0, + "RAID1 parameters"); + +#define RAID1_READ_ERR_THRESH 10 /* errors to cause a rebuild */ +static int g_raid1_read_err_thresh = RAID1_READ_ERR_THRESH; +TUNABLE_INT("kern.geom.raid.raid1.read_err_thresh", &g_raid1_read_err_thresh); +SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, read_err_thresh, CTLFLAG_RW, + &g_raid1_read_err_thresh, RAID1_READ_ERR_THRESH, + "Number of read errors on a subdisk that trigger a rebuild"); + +#define RAID1_REBUILD_SLAB (1 << 20) /* One transation in a rebuild */ +static int g_raid1_rebuild_slab = RAID1_REBUILD_SLAB; +TUNABLE_INT("kern.geom.raid.raid1.rebuild_slab_size", + &g_raid1_rebuild_slab); +SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, rebuild_slab_size, CTLFLAG_RW, + &g_raid1_rebuild_slab, RAID1_REBUILD_SLAB, + "Amount of the disk to rebuild each read/write cycle of the rebuild."); + +#define RAID1_REBUILD_FAIR_IO 20 /* use 1/x of the available I/O */ +static int g_raid1_rebuild_fair_io = RAID1_REBUILD_FAIR_IO; +TUNABLE_INT("kern.geom.raid.raid1.rebuild_fair_io", + &g_raid1_rebuild_slab); +SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, rebuild_fair_io, CTLFLAG_RW, + &g_raid1_rebuild_fair_io, RAID1_REBUILD_FAIR_IO, + "Fraction of the I/O bandwidth to use when disk busy for rebuild."); + +#define RAID1_REBUILD_CLUSTER_IDLE 10 +static int g_raid1_rebuild_cluster_idle = RAID1_REBUILD_CLUSTER_IDLE; +TUNABLE_INT("kern.geom.raid.raid1.rebuild_cluster_idle", + &g_raid1_rebuild_slab); +SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, rebuild_cluster_idle, CTLFLAG_RW, + &g_raid1_rebuild_cluster_idle, RAID1_REBUILD_CLUSTER_IDLE, + "Number of slabs to do each time we trigger a rebuild cycle"); + +#define RAID1_REBUILD_META_UPDATE 500 /* update meta data every 5 GB or so */ +static int g_raid1_rebuild_meta_update = RAID1_REBUILD_META_UPDATE; +TUNABLE_INT("kern.geom.raid.raid1.rebuild_meta_update", + &g_raid1_rebuild_slab); +SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, rebuild_meta_update, CTLFLAG_RW, + &g_raid1_rebuild_meta_update, RAID1_REBUILD_META_UPDATE, + "When to update the meta data."); static MALLOC_DEFINE(M_TR_raid1, "tr_raid1_data", "GEOM_RAID raid1 data"); @@ -178,7 +211,7 @@ g_raid_tr_raid1_rebuild_some(struct g_ra bp = &trs->trso_bio; memset(bp, 0, sizeof(*bp)); bp->bio_offset = sd->sd_rebuild_pos; - bp->bio_length = MIN(sd_rebuild_slab, + bp->bio_length = MIN(g_raid1_rebuild_slab, sd->sd_volume->v_mediasize - sd->sd_rebuild_pos); bp->bio_data = trs->trso_buffer; bp->bio_cmd = BIO_READ; @@ -187,8 +220,8 @@ g_raid_tr_raid1_rebuild_some(struct g_ra return; bp2->bio_cflags = G_RAID_BIO_FLAG_SYNC; bp2->bio_caller1 = good_sd; - trs->trso_recover_slabs = sd_rebuild_cluster_idle; - trs->trso_fair_io = sd_rebuild_fair_io; + trs->trso_recover_slabs = g_raid1_rebuild_cluster_idle; + trs->trso_fair_io = g_raid1_rebuild_fair_io; trs->trso_flags |= TR_RAID1_F_DOING_SOME; g_raid_lock_range(sd->sd_volume, /* Lock callback starts I/O */ bp2->bio_offset, bp2->bio_length, bp2); @@ -226,7 +259,7 @@ g_raid_tr_raid1_rebuild_abort(struct g_r trs = (struct g_raid_tr_raid1_object *)tr; sd = trs->trso_failed_sd; // sd->sd_rebuild_pos = 0; /* We may need this here... */ - len = MIN(sd_rebuild_slab, vol->v_mediasize - sd->sd_rebuild_pos); + len = MIN(g_raid1_rebuild_slab, vol->v_mediasize - sd->sd_rebuild_pos); g_raid_unlock_range(tr->tro_volume, sd->sd_rebuild_pos, len); g_raid_write_metadata(vol->v_softc, vol, sd, sd->sd_disk); free(trs->trso_buffer, M_TR_raid1); @@ -282,8 +315,8 @@ g_raid_tr_raid1_rebuild_start(struct g_r G_RAID_DEBUG(2, "Kicking off a rebuild at %jd...", trs->trso_failed_sd->sd_rebuild_pos); trs->trso_type = TR_RAID1_REBUILD; - trs->trso_buffer = malloc(sd_rebuild_slab, M_TR_raid1, M_WAITOK); - trs->trso_meta_update = sd_rebuild_meta_update; + trs->trso_buffer = malloc(g_raid1_rebuild_slab, M_TR_raid1, M_WAITOK); + trs->trso_meta_update = g_raid1_rebuild_meta_update; g_raid_tr_raid1_rebuild_some(tr, trs->trso_failed_sd); } @@ -620,7 +653,7 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_ g_raid_write_metadata(vol->v_softc, vol, nsd, nsd->sd_disk); trs->trso_meta_update = - sd_rebuild_meta_update; + g_raid1_rebuild_meta_update; } trs->trso_flags &= ~TR_RAID1_F_DOING_SOME; return; @@ -646,7 +679,7 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_ cbp->bio_cmd = BIO_READ; cbp->bio_cflags = G_RAID_BIO_FLAG_SYNC; cbp->bio_offset = nsd->sd_rebuild_pos; - cbp->bio_length = MIN(sd_rebuild_slab, + cbp->bio_length = MIN(g_raid1_rebuild_slab, vol->v_mediasize - nsd->sd_rebuild_pos); cbp->bio_caller1 = good_sd; G_RAID_LOGREQ(4, bp, @@ -684,7 +717,7 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_ * everything to get it back in sync), or just degrade the * drive, which kicks off a resync? */ - if (sd->sd_read_errs > sd_read_threshold) + if (sd->sd_read_errs > g_raid1_read_err_thresh) g_raid_fail_disk(sd->sd_softc, sd, sd->sd_disk); /*