Date: Thu, 05 Mar 2009 10:29:16 +0100 From: Jordi Espasa Clofent <jespasac@minibofh.org> To: freebsd-geom@freebsd.org Subject: gmirror(8): round-robin vs. load algorithm Message-ID: <49AF9B6C.8090908@minibofh.org>
next in thread | raw e-mail | index | archive | help
Hi all, It's supposed that 'round-robin' algorithm has the best performance in gmirror(8). However, looking directly at code (1) I see that the only difference between 'round-robin' and 'load' algorithm is: [...] binuptime(&curtime); /* * Find a disk which the smallest load. */ disk = NULL; LIST_FOREACH(dp, &sc->sc_disks, d_next) { if (dp->d_state != G_MIRROR_DISK_STATE_ACTIVE) continue; /* If disk wasn't used for more than 2 sec, use it. */ if (curtime.sec - dp->d_last_used.sec >= 2) { disk = dp; break; } if (disk == NULL || bintime_cmp(&dp->d_delay, &disk->d_delay) < 0) { disk = dp; } } [...] The key is in "/* If disk wasn't used for more than 2 sec, use it. */", but, for the rest, 'load' algorithm implementation seems the same as round-robin. If I'm right, my question is ¿where is the use of 'load' recommended? I understand that 'load' will be good in servers with a lot of disk activity (large disk I/O could provoque that gmirror expulses a mirror member or even reboot or panics the system) because it try always the low-loaded disk. (1) http://www.freebsd.org/cgi/cvsweb.cgi/~checkout~/src/sys/geom/mirror/g_mirror.c?rev=1.93.6.1;content-type=text%2Fplain -- Thanks, Jordi Espasa Clofent
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?49AF9B6C.8090908>