From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 25169 invoked by alias); 13 Feb 2008 15:06:17 -0000 Received: (qmail 25154 invoked by uid 9478); 13 Feb 2008 15:06:17 -0000 Date: Wed, 13 Feb 2008 15:06:00 -0000 Message-ID: <20080213150617.25153.qmail@sourceware.org> From: jbrassow@sourceware.org To: cluster-cvs@sources.redhat.com Subject: cluster/cmirror/src functions.c Mailing-List: contact cluster-cvs-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: cluster-cvs-owner@sourceware.org X-SW-Source: 2008-q1/txt/msg00219.txt.bz2 CVSROOT: /cvs/cluster Module name: cluster Branch: RHEL5 Changes by: jbrassow@sourceware.org 2008-02-13 15:06:17 Modified files: cmirror/src : functions.c Log message: - change the way 'is_remote_recovering' works to improve overall performance. Before a mirror issues a write, it must call 'is_remote_recovering' to ensure that another machine will not be recovering the region during the write. This function can dramatically slow things down. One way to increase performance is to note when the mirror is in-sync - then is_remote_recovering can return 0 without having to send the request around the cluster. (This has already been done.) This greatly speeds up I/O during nominal mirror operation. However, I/O during mirror resyncing is still greatly reduced. The problem is that the cluster network is consumed with handling 'is_remote_recovering' calls that it becomes hard to actually do the recovery. The fix is to only allow one is_remote_recovering call to go to the cluster every 1/4 sec. When the call goes up to userspace, it also retrieves info about how far along the resync is. If a request is determined to already be in sync by that info, then the region is not recovering and can safely be answered without having to send the request on to the cluster. This approach has greatly improved both the recovery and nominal throughput. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cmirror/src/functions.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.1.2.14&r2=1.1.2.15