From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 23574 invoked by alias); 19 Nov 2013 11:39:03 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 23562 invoked by uid 89); 19 Nov 2013 11:39:03 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.1 required=5.0 tests=AWL,BAYES_50,RDNS_NONE,SPF_HELO_PASS,SPF_PASS autolearn=no version=3.3.2 X-HELO: mx1.redhat.com Received: from Unknown (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 19 Nov 2013 11:39:01 +0000 Received: from int-mx12.intmail.prod.int.phx2.redhat.com (int-mx12.intmail.prod.int.phx2.redhat.com [10.5.11.25]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id rAJBcqZK021245 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 19 Nov 2013 06:38:52 -0500 Received: from [127.0.0.1] (ovpn01.gateway.prod.ext.ams2.redhat.com [10.39.146.11]) by int-mx12.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id rAJBcoNV004361; Tue, 19 Nov 2013 06:38:51 -0500 Message-ID: <528B4DCA.8090404@redhat.com> Date: Tue, 19 Nov 2013 11:52:00 -0000 From: Pedro Alves User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130625 Thunderbird/17.0.7 MIME-Version: 1.0 To: Yao Qi CC: gdb-patches@sourceware.org Subject: Re: [PATCH 05/10] Invalidate or shrink dcache when setting is changed. References: <1383458049-20893-1-git-send-email-yao@codesourcery.com> <1383458049-20893-6-git-send-email-yao@codesourcery.com> <528A38B5.6020906@redhat.com> <528AFE6E.9000009@codesourcery.com> In-Reply-To: <528AFE6E.9000009@codesourcery.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-SW-Source: 2013-11/txt/msg00527.txt.bz2 On 11/19/2013 06:00 AM, Yao Qi wrote: > On 11/18/2013 11:56 PM, Pedro Alves wrote: >> On 11/03/2013 05:54 AM, Yao Qi wrote: >>> Nowadays, when cache size or line size is changed by command, >>> 'target_dcache' is invalidated. It is too conservative. We can >>> optimize in the following ways, >>> >>> - Don't have to invalidate dcache immediately after cache size or >>> line size is changed. We can postpone the invalidation to the moment >>> using 'target_dcache'. >>> - Don't have to invalidate dcache if the cache size is changed. If >>> cache size is changed to the value which is still greater than >>> dcache's size, nothing should be done. If change to the value >>> which is less than dcache's size, just evict cache lines. >>> >>> This is what this patch does. >> >> Actually, my "My thoughts exactly." comment in the other patch was >> originally directed at this patch. Do we really need this extra >> complication? What's the use case that needs this? >> > > Here are three use cases, > > 1) target dcache has 16 cache lines, and dcache size is 4096. User > types command "set dcache size 32" or "set dcache size 4160". > 2) target dcache has 16 cache lines. User types command "set dcache > size 8". > 3) line size of target dcache is 32. User types commands > > "set dcache line-size 16" // change line-size to 16. > // change it back. > "set dcache line-size 32" Sure, OK, I guess I did the wrong question then. I really mean, why should we care about preserving the cache when the user changes cache size? What makes this a use case users actually care about? I don't think users going to be doing this sort of thing in a loop? At most a couple times to check which size might be better for then, and then stick it in .gdbinit, forever after forgotten. Actually, if I was probing for the ideal size, I think I'd be annoyed that GDB didn't flush the cache, as I'd try disassembling/backtracing with different cache sizes, and always want to start from a cold cache. > This "extra complication" looks natural or reasonable to a software > cache. It's always a complication/necessity/usefulness balance. It doesn't look so reasonable if the complication it adds isn't useful in practice, because more code usually means more chances of getting things wrong. The question is then what is the real use case that makes this necessary, as opposed to keeping it simple. > We are using cache, and we'd like to do as few invalidations as > possible. -- Pedro Alves