All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Paul E. McKenney" <paulmck@linux.ibm.com>
To: Akira Yokosawa <akiyks@gmail.com>
Cc: perfbook@vger.kernel.org
Subject: Re: [PATCH 0/6] Simplify hash_resize.c
Date: Tue, 15 Jan 2019 09:43:04 -0800	[thread overview]
Message-ID: <20190115174304.GB1215@linux.ibm.com> (raw)
In-Reply-To: <fa8f579d-d14e-1be5-35f7-8f20a22021d6@gmail.com>

On Wed, Jan 16, 2019 at 12:32:52AM +0900, Akira Yokosawa wrote:
> On 2019/01/14 17:33:37 -0800, Paul E. McKenney wrote:
> > On Sun, Jan 13, 2019 at 06:10:24PM -0800, Paul E. McKenney wrote:
> >> On Mon, Jan 14, 2019 at 08:28:27AM +0900, Akira Yokosawa wrote:
> >>> >From 7b69a9b37ba9a73a50aad5cbb097235ddfe75870 Mon Sep 17 00:00:00 2001
> >>> From: Akira Yokosawa <akiyks@gmail.com>
> >>> Date: Mon, 14 Jan 2019 07:25:14 +0900
> >>> Subject: [PATCH 0/6] Simplify hash_resize.c
> >>>
> >>> Hi Paul,
> >>>
> >>> This patch set updates hash_resize.c, which you suggested for me to
> >>> take over, and the related text.
> >>>
> >>> I added a couple of Quick Quizzes as well, and in one of them,
> >>> I included your version of hash_resize.c.
> >>>
> >>> Patch #1 updates hash_resize.c in the way I suggested. Note that
> >>> in this update, "#ifndef FCV_SNIPPET" blocks are used to hide
> >>> code for debugging (hash value checks) in code snippets.
> >>> This code can actually be compiled with "-DFCV_SNIPPET" to see
> >>> the performance without hash value checks.
> >>>
> >>> Patch #2 adds a couple of Quick Quizzes. Your version of hash_resize.c
> >>> is added as hash_resize_s.c.
> >>>
> >>> Patch #3 removes unnecessary folding in a code snippet.
> >>>
> >>> Patch #4 adjusts a few sentence to the simpler approach.
> >>>
> >>> Patch #5 adds another Quick Quiz.
> >>>
> >>> Patch #6 adds an "#error" directive for the lack of rcu_barrier().
> >>>
> >>> All of the updates in text would need your native eyes to be polished.
> >>
> >> Nice!  Queued and pushed, thank you!  I will review and send any
> >> needed update by end of tomorrow, Pacific Time.
> > 
> > Here is a summary of changes:
> > 
> > o	Move the ht_lock_state structure definition to follow the ht
> > 	structure, matching the order of discussion in the text.
> > 	Everything seems to build and run OK with this change.
> > 	Also illustrates the advantages of line labels!  ;-)
> > 
> > o	I considered inlining ht_search_bucket() into its only caller
> > 	in hashtab_lookup(), but decided against it.  More flexibility
> > 	for change with it as is.
> > 
> > o	I added ht_search_bucket() to the in-text list of things
> > 	permitting lookups and modifications to run concurrently with
> > 	a resize operation.
> > 
> > o	I tweaked the description of hashtab_lock_mod(), hashtab_unlock_mod(),
> > 	hashtab_add(), and hashtab_del().
> > 
> > o	I tweaked the QQ asking about searches missing adds during resizes.
> > 
> > o	English is strange, so "Less Changes" must become "Fewer Changes".
> 
> Sigh, I thought I knew this rule... Thanks for the fix.
> 
> > 
> > o	I put the long labels on a single line out of paranoia.
> > 
> > I pushed these out on a working branch named paulmck.2019.01.14a.  Please
> > let me know whether I messed anything up, and once it looks good to you,
> > I will pull these two commits into the master branch.
> 
> There is an irrelevant clause added in an answer to a QQ.
> See below for my suggestion. It doesn't sound fluent enough, though.

Good catch!

How does the following amended patch look?

							Thanx, Paul

------------------------------------------------------------------------

commit 731c855ab11b9601a40324c6ef6b5ced6d7833e9
Author: Akira Yokosawa <akiyks@gmail.com>
Date:   Tue Jan 15 23:52:27 2019 +0900

    datastruct/hash: Fix irrelevant clause in answer to quick quiz
    
    hashtab_lookup() is not affected by the reordering of ->hbp[] and
    ->hls_idx[]. Instead, mention the increase of cost at the earlier
    explanation of hashtab_lookup().
    
    Signed-off-by: Akira Yokosawa <akiyks@gmail.com>
    [ paulmck: Wordsmithing. ]
    Signed-off-by: Paul E. McKenney <paulmck@linux.ibm.com>

diff --git a/datastruct/datastruct.tex b/datastruct/datastruct.tex
index d1fde2c7535e..985021e927a8 100644
--- a/datastruct/datastruct.tex
+++ b/datastruct/datastruct.tex
@@ -1189,13 +1189,15 @@ a concurrent resize operation.
 	either the old bucket if it is not resized yet, or to the new
 	bucket if it has been resized, and \co{hashtab_del()} removes
 	the specified element from any buckets into which it has been inserted.
-	\co{hashtab_lookup()} searches the new bucket if the search
-	of the old bucket fails.
+	The \co{hashtab_lookup()} function searches the new bucket
+	if the search of the old bucket fails, which has the disadvantage
+	of adding overhead to the lookup fastpath.
 	The alternative \co{hashtab_lock_mod()} returns the locking
 	state of the new bucket in \co{->hbp[0]} and \co{->hls_idx[0]}
-	if resize operation is in progress.
-	This reordering simplifies \co{hashtab_add()}, but at the expense
-	of an extra check in \co{hashtab_lookup()}.
+	if resize operation is in progress, instead of the perhaps
+	more natural choice of \co{->hbp[1]} and \co{->hls_idx[1]}.
+	However, this less-natural choice has the advantage of simplifying
+	\co{hashtab_add()}.
 
 	Further analysis of the code is left as an exercise for the reader.
 } \QuickQuizEnd


  reply	other threads:[~2019-01-15 17:43 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-13 23:28 [PATCH 0/6] Simplify hash_resize.c Akira Yokosawa
2019-01-13 23:31 ` [PATCH 1/6] datastruct/hash: " Akira Yokosawa
2019-01-14 10:31   ` Junchang Wang
2019-01-14 13:22     ` Akira Yokosawa
2019-01-14 14:16       ` Junchang Wang
2019-01-13 23:32 ` [PATCH 2/6] datastruct/hash: Add a couple of Quick Quizzes regarding hash_resize.c Akira Yokosawa
2019-01-13 23:33 ` [PATCH 3/6] datastruct/hash: Fix unnecessary folding in code snippet Akira Yokosawa
2019-01-13 23:35 ` [PATCH 4/6] datastruct/hash: Adjust context to updated code in hash_resize.c Akira Yokosawa
2019-01-13 23:36 ` [PATCH 5/6] datastruct/hash: Add Quick Quiz on READ_ONCE/WRITE_ONCE " Akira Yokosawa
2019-01-13 23:38 ` [PATCH 6/6] datastruct/hash: Display error msg if rcu_barrier() is not available Akira Yokosawa
2019-01-14  2:10 ` [PATCH 0/6] Simplify hash_resize.c Paul E. McKenney
2019-01-15  1:33   ` Paul E. McKenney
2019-01-15 15:32     ` Akira Yokosawa
2019-01-15 17:43       ` Paul E. McKenney [this message]
2019-01-15 22:15         ` Akira Yokosawa
2019-01-16  0:06           ` Paul E. McKenney
2019-01-15 22:29   ` Akira Yokosawa
2019-01-16  0:07     ` Paul E. McKenney

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190115174304.GB1215@linux.ibm.com \
    --to=paulmck@linux.ibm.com \
    --cc=akiyks@gmail.com \
    --cc=perfbook@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.