From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39567) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bF3nB-0007Ob-5c for qemu-devel@nongnu.org; Mon, 20 Jun 2016 14:19:26 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bF3n9-0004aI-1F for qemu-devel@nongnu.org; Mon, 20 Jun 2016 14:19:24 -0400 Received: from mail-lf0-x241.google.com ([2a00:1450:4010:c07::241]:35701) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bF3n8-0004aC-PX for qemu-devel@nongnu.org; Mon, 20 Jun 2016 14:19:22 -0400 Received: by mail-lf0-x241.google.com with SMTP id w130so6209353lfd.2 for ; Mon, 20 Jun 2016 11:19:22 -0700 (PDT) References: <1466181227-14934-1-git-send-email-alex.bennee@linaro.org> <57681080.20200@gmail.com> <702806117.314024.1466438917254.JavaMail.zimbra@redhat.com> From: Sergey Fedorov Message-ID: <576833A8.9040304@gmail.com> Date: Mon, 20 Jun 2016 21:19:20 +0300 MIME-Version: 1.0 In-Reply-To: <702806117.314024.1466438917254.JavaMail.zimbra@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [RFC 0/7] Safe watch and breakpoint manipulation List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Paolo Bonzini Cc: =?UTF-8?Q?Alex_Benn=c3=a9e?= , mttcg@greensocs.com, qemu-devel@nongnu.org, fred konrad , a rigo , cota@braap.org, bobby prani , mark burton , jan kiszka , rth@twiddle.net, peter maydell , claudio fontana On 20/06/16 19:08, Paolo Bonzini wrote: >>> The patch series changes things in stages. >>> >>> First we move the break/watchpoints into an array which is more >>> amenable to RCU control that the QLIST. We then control the life time >>> of references to break/watchpoint data by removing long held >>> references in the target code and getting information when needed from >>> the core. Then we stop dynamically allocation the watch/breakpoint >>> data and store it directly in the array which makes iteration across >>> the list a bit more cache friendly than referenced pointers. Finally >>> addition and removal of elements of the array is put under RCU >>> control. This ensures there is always a safe array of data to check >>> in the run-loop. >> I a little bit unsure if we really want to complicate things with RCU. >> Why don't we simply protect the lists with a mutex given that there's no >> contention expected? BTW, as it comes to debugging, I suppose we don't >> expect great performance anyway. > Mutexes do introduce some overhead. The breakpoints list are mostly touched > during translation, but watchpoints aren't so we could use tb_lock for > breakpoints and a separate per-CPU mutex for watchpoints. That could > indeed work. It's a good idea to use tb_lock for breakpoints. Actually, we could use spinlocks for watchpoints, if we're careful. But I don't this it can be so critical in performance. Kind regards, Sergey