mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Linus Torvalds <torvalds@linux-foundation.org>
To: Ingo Molnar <mingo@elte.hu>
Cc: Eric Dumazet <eric.dumazet@gmail.com>,
	mingo@redhat.com, linux-kernel@vger.kernel.org
Subject: Re: [PATCH -tip] x86: atomic64: inline atomic64_read()
Date: Fri, 3 Jul 2009 12:38:03 -0700 (PDT)	[thread overview]
Message-ID: <alpine.LFD.2.01.0907031221340.3210@localhost.localdomain> (raw)
In-Reply-To: <20090703191709.GA17057@elte.hu>



Btw, it's entirely possible that we could have a faster "atomic64_read()" 
if we have some guarantees about the behavior of the counter.

For example, let's assume that the counter is known to be monotonic: in 
that case, we could do a 64-bit read with something like

  u64 atomic64_read_monotonic(atomic64_t *p)
  {
	unsigned int last = read_high_word(p);
	do {
		lfence;
		low = read_low_word(p);
		high = last;
		lfence;
		last = read_high_word;
	} while (last != high)
	return ((u64)high << 32) | low;
  }

which is not necessarily all that much faster than the cmpxchg8b (the two 
lfence's aren't going to be cheap), but keeping the cacheline in a shared 
state might be a win.

Here, the "monotonic" part is only important because the above would not 
work in case the counter switches back and forth, ie if the value ever 
does an atomic increment and then an atomic decrement like this:

	0x0ffffffff -> 0x100000000 -> 0x0ffffffff

then the above read logic might see a "stable" high word of 0 (before and 
after), and a low word of 0 (in the middle), and think that the counter 
really was 0 at one point.

But if it's a strictly monotonic counter, or has some other stability 
guarantees (the way we have certain stability guarantees on PTE's, for 
example: we know that the high bits can only change if the low bits 
changed the present bit), you can sometimes do tricks like the above.

Do we actually _have_ any performance-critical 64-bit counters that have 
monotonicity guarantees? I have no idea. I'm just throwing out the notion.

			Linus

  reply	other threads:[~2009-07-03 19:38 UTC|newest]

Thread overview: 79+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-30 21:24 [PATCH] FRV: Wire up new syscalls David Howells
2009-06-30 21:34 ` Ingo Molnar
2009-06-30 21:41   ` Arnd Bergmann
2009-06-30 21:54     ` Ingo Molnar
2009-07-01 11:28     ` David Howells
2009-07-01 11:54       ` Ingo Molnar
2009-07-01 12:19       ` David Howells
2009-07-01 12:36         ` Paul Mackerras
2009-07-01 12:41         ` David Howells
2009-07-01 13:13           ` Ingo Molnar
2009-07-01 14:10           ` David Howells
2009-07-01 14:49             ` Ingo Molnar
2009-07-01 16:47               ` [PATCH 1/2] FRV: Implement atomic64_t David Howells
2009-07-01 17:20                 ` Linus Torvalds
2009-07-01 21:11                   ` Ingo Molnar
2009-07-01 22:57                   ` [PATCH] x86: Code atomic(64)_read and atomic(64)_set in C not CPP [was Re: FRV: Implement atomic64_t] Paul Mackerras
2009-07-02  7:21                     ` [tip:x86/urgent] x86: Code atomic(64)_read and atomic(64)_set in C not CPP tip-bot for Paul Mackerras
2009-07-02  7:21                     ` [PATCH] x86: Code atomic(64)_read and atomic(64)_set in C not CPP [was Re: FRV: Implement atomic64_t] Ingo Molnar
2009-07-01 23:46                   ` [PATCH 1/2] FRV: Implement atomic64_t [ver #2] David Howells
2009-07-01 23:46                   ` [PATCH 2/2] FRV: Add basic performance counter support " David Howells
2009-07-02 21:10                   ` [PATCH 1/2] FRV: Implement atomic64_t Eric Dumazet
2009-07-02 21:28                     ` Linus Torvalds
2009-07-02 22:08                       ` [PATCH] x86: atomic64_t should be 8 bytes aligned Eric Dumazet
2009-07-02 23:53                         ` Linus Torvalds
2009-07-03  6:14                           ` Ingo Molnar
2009-07-03 12:42                           ` [tip:perfcounters/urgent] x86: atomic64: The atomic64_t data type should be 8 bytes aligned on 32-bit too tip-bot for Eric Dumazet
2009-07-03 16:58                             ` Linus Torvalds
2009-07-03 17:49                               ` H. Peter Anvin
2009-07-03 12:42                           ` [tip:perfcounters/urgent] x86: atomic64: Move the 32-bit atomic64_t implementation to a .c file tip-bot for Ingo Molnar
2009-07-03 16:47                             ` Linus Torvalds
2009-07-03 18:31                               ` [tip:perfcounters/urgent] x86: atomic64: Clean up atomic64_sub_and_test() and atomic64_add_negative() tip-bot for Ingo Molnar
2009-07-03 19:18                               ` tip-bot for Ingo Molnar
2009-07-04  0:05                             ` [tip:perfcounters/urgent] x86: atomic64: Move the 32-bit atomic64_t implementation to a .c file Paul Mackerras
2009-07-05 11:25                               ` Ingo Molnar
2009-07-03 12:43                           ` [tip:perfcounters/urgent] x86: atomic64: Improve atomic64_read() tip-bot for Eric Dumazet
2009-07-03 12:43                           ` [tip:perfcounters/urgent] x86: atomic64: Improve cmpxchg8b() tip-bot for Eric Dumazet
2009-07-03 12:43                           ` [tip:perfcounters/urgent] x86: atomic64: Improve atomic64_add_return() tip-bot for Ingo Molnar
2009-07-03 12:43                           ` [tip:perfcounters/urgent] x86: atomic64: Reduce size of functions tip-bot for Ingo Molnar
2009-07-03 12:44                           ` [tip:perfcounters/urgent] x86: atomic64: Fix unclean type use in atomic64_xchg() tip-bot for Ingo Molnar
2009-07-03 17:02                             ` Linus Torvalds
2009-07-03 18:00                               ` Ingo Molnar
2009-07-03 12:44                           ` [tip:perfcounters/urgent] x86: atomic64: Improve atomic64_read() tip-bot for Eric Dumazet
2009-07-03 14:50                             ` [PATCH -tip] x86: atomic64: inline atomic64_read() Eric Dumazet
2009-07-03 18:04                               ` Ingo Molnar
2009-07-03 18:10                                 ` Arjan van de Ven
2009-07-03 18:18                                   ` Ingo Molnar
2009-07-03 18:25                                     ` Andi Kleen
2009-07-03 18:30                                     ` Arjan van de Ven
2009-07-03 18:43                                       ` Ingo Molnar
2009-07-03 18:24                                   ` Andi Kleen
2009-07-03 18:31                                   ` [tip:perfcounters/urgent] x86: atomic64: Optimize CMPXCHG8B sequences to not use the LOCK prefix tip-bot for Ingo Molnar
2009-07-03 18:45                                     ` Ingo Molnar
2009-07-03 19:10                                 ` [PATCH -tip] x86: atomic64: inline atomic64_read() Linus Torvalds
2009-07-03 19:17                                   ` Ingo Molnar
2009-07-03 19:38                                     ` Linus Torvalds [this message]
2009-07-03 21:40                                       ` Ingo Molnar
2009-07-03 18:31                               ` [tip:perfcounters/urgent] x86: atomic64: Inline atomic64_read() again tip-bot for Eric Dumazet
2009-07-03 19:18                               ` tip-bot for Eric Dumazet
2009-07-04  9:49                               ` tip-bot for Eric Dumazet
2009-07-03 12:44                           ` [tip:perfcounters/urgent] x86: atomic64: Code atomic(64)_read and atomic(64)_set in C not CPP tip-bot for Paul Mackerras
2009-07-03 12:48                           ` tip-bot for Paul Mackerras
2009-07-03 12:48                           ` [tip:perfcounters/urgent] x86: atomic64: Improve atomic64_read() tip-bot for Eric Dumazet
2009-07-03 15:33                           ` [tip:perfcounters/urgent] x86: atomic64: Export APIs to modules tip-bot for Ingo Molnar
2009-07-03 18:30                             ` tip-bot for Ingo Molnar
2009-07-03 18:30                             ` [tip:perfcounters/urgent] x86: atomic64: Improve atomic64_xchg() tip-bot for Ingo Molnar
2009-07-03 12:01                       ` [patch] x86: atomic64_t: Improve atomic64_add_return() Ingo Molnar
2009-07-03 12:26                         ` [PATCH] x86: atomic64_t: _cmpxchg() & _read() optimizations Eric Dumazet
2009-07-03 12:40                           ` Ingo Molnar
2009-07-03 17:38                         ` [patch] x86: atomic64_t: Improve atomic64_add_return() Linus Torvalds
2009-07-03  6:05                     ` [PATCH 1/2] FRV: Implement atomic64_t Eric Dumazet
2009-07-03 12:27                       ` Ingo Molnar
2009-07-03 12:39                         ` Eric Dumazet
2009-07-03 11:17                     ` Ingo Molnar
2009-07-03 11:26                       ` Ingo Molnar
2009-07-01 17:33                 ` David Howells
2009-07-01 23:48                 ` David Howells
2009-07-01 16:47               ` [PATCH 2/2] FRV: Add basic performance counter support David Howells
2009-07-01 21:10                 ` Ingo Molnar
2009-07-01 15:19             ` [PATCH] FRV: Wire up new syscalls David Howells

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=alpine.LFD.2.01.0907031221340.3210@localhost.localdomain \
    --to=torvalds@linux-foundation.org \
    --cc=eric.dumazet@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=mingo@redhat.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®