From owner-freebsd-current@FreeBSD.ORG Mon Aug 7 22:00:34 2006 Return-Path: X-Original-To: freebsd-current@freebsd.org Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 748EF16A4F2; Mon, 7 Aug 2006 22:00:34 +0000 (UTC) (envelope-from ssouhlal@FreeBSD.org) Received: from elvis.mu.org (elvis.mu.org [192.203.228.196]) by mx1.FreeBSD.org (Postfix) with ESMTP id 12DC443D8F; Mon, 7 Aug 2006 22:00:30 +0000 (GMT) (envelope-from ssouhlal@FreeBSD.org) Received: from [192.168.250.2] (80-219-8-155.dclient.hispeed.ch [80.219.8.155]) by elvis.mu.org (Postfix) with ESMTP id E163A1A3C27; Mon, 7 Aug 2006 15:00:29 -0700 (PDT) Message-ID: <44D7B7ED.5070302@FreeBSD.org> Date: Tue, 08 Aug 2006 00:00:13 +0200 From: Suleiman Souhlal User-Agent: Mozilla Thunderbird 1.0.7 (X11/20051204) X-Accept-Language: en-us, en MIME-Version: 1.0 To: Attilio Rao References: <3bbf2fe10608071227j17c4cfa6qd84e1d8e53668fda@mail.gmail.com> In-Reply-To: <3bbf2fe10608071227j17c4cfa6qd84e1d8e53668fda@mail.gmail.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: freebsd-current@freebsd.org, freebsd-arch@freebsd.org Subject: Re: [PATCH] Adding Solaris-style "owner of records" to rwlocks X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 07 Aug 2006 22:00:34 -0000 Attilio Rao wrote: > This is a first implementation of the owner of records concept in rwlocks. > It allows to avoid the priority inversion problem in the current > rwlocks implementation (for readers). > > The main idea (that John and I discussed) is to have as owner of > records the first rlock'er for a "class contention". > The implementation consists in adding two flags (RW_LOCK_OWNED and > RW_LOCK_EXEMPTED) which are used in order to not penalyze the easy > case, and syncronizing the operation of acquiring and dropping the > owner of records with the turnstile spin-lock. > The main scheme might work in this way: > > thread1::rlock() -> sets the owner of records > thread2::rlock() -> checks for RW_LOCK_OWNED bit and, if it is set, go > in the easy case > thread3::rlock() -> checks for RW_LOCK_OWNED... > thread4::wlock() -> blocks and land its priority to thread1 > thread1::runlock() -> disable the owner of records (disowning the > associated turnstile) and sets the RW_LOCK_EXEMPTED flag. In this way > other threads will treact as an easy case. > ... Aren't you missing the hard part: transferring ownership from one reader to another? If you don't, you'll still have priority inversions as soon as the initial reader unlocks.. -- Suleiman