lkml.org 
[lkml]   [2006]   [May]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 004 of 11] md: Increase the delay before marking metadata clean, and make it configurable.
    NeilBrown <neilb@suse.de> wrote:
    >
    >
    > When a md array has been idle (no writes) for 20msecs it is marked as
    > 'clean'. This delay turns out to be too short for some real
    > workloads. So increase it to 200msec (the time to update the metadata
    > should be a tiny fraction of that) and make it sysfs-configurable.
    >
    >
    > ...
    >
    > + safe_mode_delay
    > + When an md array has seen no write requests for a certain period
    > + of time, it will be marked as 'clean'. When another write
    > + request arrive, the array is marked as 'dirty' before the write
    > + commenses. This is known as 'safe_mode'.
    > + The 'certain period' is controlled by this file which stores the
    > + period as a number of seconds. The default is 200msec (0.200).
    > + Writing a value of 0 disables safemode.
    > +

    Why not make the units milliseconds? Rename this to safe_mode_delay_msecs
    to remove any doubt.

    > +static ssize_t
    > +safe_delay_store(mddev_t *mddev, const char *cbuf, size_t len)
    > +{
    > + int scale=1;
    > + int dot=0;
    > + int i;
    > + unsigned long msec;
    > + char buf[30];
    > + char *e;
    > + /* remove a period, and count digits after it */
    > + if (len >= sizeof(buf))
    > + return -EINVAL;
    > + strlcpy(buf, cbuf, len);
    > + buf[len] = 0;
    > + for (i=0; i<len; i++) {
    > + if (dot) {
    > + if (isdigit(buf[i])) {
    > + buf[i-1] = buf[i];
    > + scale *= 10;
    > + }
    > + buf[i] = 0;
    > + } else if (buf[i] == '.') {
    > + dot=1;
    > + buf[i] = 0;
    > + }
    > + }
    > + msec = simple_strtoul(buf, &e, 10);
    > + if (e == buf || (*e && *e != '\n'))
    > + return -EINVAL;
    > + msec = (msec * 1000) / scale;
    > + if (msec == 0)
    > + mddev->safemode_delay = 0;
    > + else {
    > + mddev->safemode_delay = (msec*HZ)/1000;
    > + if (mddev->safemode_delay == 0)
    > + mddev->safemode_delay = 1;
    > + }
    > + return len;

    And most of that goes away.


    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-05-01 07:48    [W:0.029 / U:301.304 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site