From: Sergey Fedorov <serge.fdrv@gmail.com>
To: Peter Maydell <peter.maydell@linaro.org>,
Paolo Bonzini <pbonzini@redhat.com>
Cc: "Emilio G. Cota" <cota@braap.org>,
"Richard Henderson" <rth@twiddle.net>,
"QEMU Developers" <qemu-devel@nongnu.org>,
"MTTCG Devel" <mttcg@greensocs.com>,
"Alex Bennée" <alex.bennee@linaro.org>,
"Peter Crosthwaite" <crosthwaite.peter@gmail.com>
Subject: Re: [Qemu-devel] [PATCH v5 07/18] qemu-thread: add simple test-and-set spinlock
Date: Wed, 18 May 2016 18:59:34 +0300 [thread overview]
Message-ID: <573C9166.3030500@gmail.com> (raw)
In-Reply-To: <CAFEAcA9+_sNwCM=zx01eqkhtMksyPnvKPHPkiFzjLMKi4+Mg1Q@mail.gmail.com>
On 18/05/16 18:44, Peter Maydell wrote:
> On 18 May 2016 at 16:36, Paolo Bonzini <pbonzini@redhat.com> wrote:
>> On 18/05/2016 17:35, Peter Maydell wrote:
>>>>> $ arm-linux-gnueabi-gcc -march=armv6 -O2 -c a.c
>>> I don't think armv6 is a sufficiently common host for us to
>>> worry too much about how its atomic primitives come out.
>>> ARMv7 and 64-bit ARMv8 are more relevant, I think.
>>> (v7 probably gets compiled the same way as v6 here, though.)
>> Well, v6 is raspberry pi isn't it?
> Yes, but v6 is also pretty slow anyhow, and if it wasn't
> for the outlier raspi case then v6 would be definitely
> irrelevant to everybody. Running QEMU on a slow ARM
> board is unlikely to be a great experience regardless.
> I'm not saying we should happily break v6, but I think
> we're better off making optimisation decisions looking
> forwards at v7 and v8 boards, rather than backwards at a
> single legacy v6 board.
Well, ARMv7 code looks like exactly the same except we have "dmb sy"
instead of "mcr 15, 0, r0, cr7, cr10, {5}".
Here is ARMv8 code for reference:
a.o: file format elf64-littleaarch64
Disassembly of section .text:
0000000000000000 <atomic_exchange>:
0: 885ffc02 ldaxr w2, [x0]
4: 88037c01 stxr w3, w1, [x0]
8: 35ffffc3 cbnz w3, 0 <atomic_exchange>
c: 2a0203e0 mov w0, w2
10: d65f03c0 ret
0000000000000014 <atomic_compare_exchange>:
14: d10043ff sub sp, sp, #0x10
18: b9000fe1 str w1, [sp,#12]
1c: 885ffc03 ldaxr w3, [x0]
20: 6b01007f cmp w3, w1
24: 54000061 b.ne 30 <atomic_compare_exchange+0x1c>
28: 88047c02 stxr w4, w2, [x0]
2c: 6b1f009f cmp w4, wzr
30: 1a9f17e0 cset w0, eq
34: 910043ff add sp, sp, #0x10
38: d65f03c0 ret
000000000000003c <sync_val_compare_and_swap>:
3c: 885ffc01 ldaxr w1, [x0]
40: 6b1f003f cmp w1, wzr
44: 54000061 b.ne 50 <sync_val_compare_and_swap+0x14>
48: 8803fc02 stlxr w3, w2, [x0]
4c: 35ffff83 cbnz w3, 3c <sync_val_compare_and_swap>
50: 6b1f003f cmp w1, wzr
54: 1a9f07e0 cset w0, ne
58: d65f03c0 ret
000000000000005c <sync_lock_test_and_set>:
5c: 885ffc02 ldaxr w2, [x0]
60: 88037c01 stxr w3, w1, [x0]
64: 35ffffc3 cbnz w3, 5c <sync_lock_test_and_set>
68: d65f03c0 ret
and x86-64 as well (but I'm not good at reading x86 code):
a.o: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <atomic_exchange>:
0: 89 f0 mov %esi,%eax
2: 87 07 xchg %eax,(%rdi)
4: c3 retq
5: 66 66 2e 0f 1f 84 00 data32 nopw %cs:0x0(%rax,%rax,1)
c: 00 00 00 00
0000000000000010 <atomic_compare_exchange>:
10: 89 f0 mov %esi,%eax
12: 89 74 24 fc mov %esi,-0x4(%rsp)
16: f0 0f b1 17 lock cmpxchg %edx,(%rdi)
1a: 0f 94 c0 sete %al
1d: c3 retq
1e: 66 90 xchg %ax,%ax
0000000000000020 <sync_val_compare_and_swap>:
20: 31 c0 xor %eax,%eax
22: f0 0f b1 17 lock cmpxchg %edx,(%rdi)
26: 85 c0 test %eax,%eax
28: 0f 95 c0 setne %al
2b: c3 retq
2c: 0f 1f 40 00 nopl 0x0(%rax)
0000000000000030 <sync_lock_test_and_set>:
30: 87 37 xchg %esi,(%rdi)
32: c3 retq
Kind regards,
Sergey
next prev parent reply other threads:[~2016-05-18 15:59 UTC|newest]
Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-14 3:34 [Qemu-devel] [PATCH v5 00/18] tb hash improvements Emilio G. Cota
2016-05-14 3:34 ` [Qemu-devel] [PATCH v5 01/18] compiler.h: add QEMU_ALIGNED() to enforce struct alignment Emilio G. Cota
2016-05-14 3:34 ` [Qemu-devel] [PATCH v5 02/18] seqlock: remove optional mutex Emilio G. Cota
2016-05-14 3:34 ` [Qemu-devel] [PATCH v5 03/18] seqlock: rename write_lock/unlock to write_begin/end Emilio G. Cota
2016-05-14 3:34 ` [Qemu-devel] [PATCH v5 04/18] include/processor.h: define cpu_relax() Emilio G. Cota
2016-05-18 17:47 ` Sergey Fedorov
2016-05-18 18:29 ` Emilio G. Cota
2016-05-18 18:37 ` Sergey Fedorov
2016-05-14 3:34 ` [Qemu-devel] [PATCH v5 05/18] atomics: add atomic_test_and_set_acquire Emilio G. Cota
2016-05-16 10:05 ` Paolo Bonzini
2016-05-17 16:15 ` Sergey Fedorov
2016-05-17 16:23 ` Paolo Bonzini
2016-05-17 16:47 ` Sergey Fedorov
2016-05-17 17:08 ` Paolo Bonzini
2016-05-14 3:34 ` [Qemu-devel] [PATCH v5 06/18] atomics: add atomic_read_acquire and atomic_set_release Emilio G. Cota
2016-05-15 10:22 ` Pranith Kumar
2016-05-16 18:27 ` Emilio G. Cota
2016-05-17 16:53 ` Sergey Fedorov
2016-05-17 17:08 ` Paolo Bonzini
2016-05-14 3:34 ` [Qemu-devel] [PATCH v5 07/18] qemu-thread: add simple test-and-set spinlock Emilio G. Cota
[not found] ` <573B5134.8060104@gmail.com>
2016-05-17 19:19 ` Richard Henderson
2016-05-17 19:57 ` Sergey Fedorov
2016-05-17 20:01 ` Sergey Fedorov
2016-05-17 22:12 ` Richard Henderson
2016-05-17 22:22 ` Richard Henderson
2016-05-17 20:04 ` Emilio G. Cota
2016-05-17 20:20 ` Sergey Fedorov
2016-05-18 0:28 ` Emilio G. Cota
2016-05-18 14:18 ` Sergey Fedorov
2016-05-18 14:47 ` Sergey Fedorov
2016-05-18 14:59 ` Paolo Bonzini
2016-05-18 15:05 ` Sergey Fedorov
2016-05-18 15:09 ` Paolo Bonzini
2016-05-18 16:59 ` Emilio G. Cota
2016-05-18 17:00 ` Paolo Bonzini
2016-05-18 15:35 ` Peter Maydell
2016-05-18 15:36 ` Paolo Bonzini
2016-05-18 15:44 ` Peter Maydell
2016-05-18 15:59 ` Sergey Fedorov [this message]
2016-05-18 16:02 ` Richard Henderson
2016-05-17 19:38 ` Emilio G. Cota
2016-05-17 20:35 ` Sergey Fedorov
2016-05-17 23:18 ` Emilio G. Cota
2016-05-18 13:59 ` Sergey Fedorov
2016-05-18 14:05 ` Paolo Bonzini
2016-05-18 14:10 ` Sergey Fedorov
2016-05-18 14:40 ` Paolo Bonzini
2016-05-18 18:21 ` Sergey Fedorov
2016-05-18 19:04 ` Emilio G. Cota
2016-05-18 19:51 ` Sergey Fedorov
2016-05-18 20:52 ` Emilio G. Cota
2016-05-18 20:57 ` Sergey Fedorov
2016-05-14 3:34 ` [Qemu-devel] [PATCH v5 08/18] exec: add tb_hash_func5, derived from xxhash Emilio G. Cota
2016-05-17 17:22 ` Sergey Fedorov
2016-05-17 19:48 ` Emilio G. Cota
2016-05-14 3:34 ` [Qemu-devel] [PATCH v5 09/18] tb hash: hash phys_pc, pc, and flags with xxhash Emilio G. Cota
2016-05-17 17:47 ` Sergey Fedorov
2016-05-17 19:09 ` Emilio G. Cota
2016-05-14 3:34 ` [Qemu-devel] [PATCH v5 10/18] qdist: add module to represent frequency distributions of data Emilio G. Cota
2016-05-14 3:34 ` [Qemu-devel] [PATCH v5 11/18] qdist: add test program Emilio G. Cota
2016-05-14 3:34 ` [Qemu-devel] [PATCH v5 12/18] qht: QEMU's fast, resizable and scalable Hash Table Emilio G. Cota
2016-05-20 22:13 ` Sergey Fedorov
2016-05-21 2:48 ` Emilio G. Cota
2016-05-21 17:41 ` Emilio G. Cota
2016-05-22 8:01 ` Alex Bennée
2016-05-23 5:35 ` Emilio G. Cota
2016-05-21 20:07 ` Sergey Fedorov
2016-05-23 19:29 ` Sergey Fedorov
2016-05-14 3:34 ` [Qemu-devel] [PATCH v5 13/18] qht: support parallel writes Emilio G. Cota
2016-05-23 20:28 ` Sergey Fedorov
2016-05-24 22:07 ` Emilio G. Cota
2016-05-24 22:17 ` Sergey Fedorov
2016-05-25 0:10 ` Emilio G. Cota
2016-05-14 3:34 ` [Qemu-devel] [PATCH v5 14/18] qht: add test program Emilio G. Cota
2016-05-14 3:34 ` [Qemu-devel] [PATCH v5 15/18] qht: add qht-bench, a performance benchmark Emilio G. Cota
2016-05-14 3:34 ` [Qemu-devel] [PATCH v5 16/18] qht: add test-qht-par to invoke qht-bench from 'check' target Emilio G. Cota
2016-05-14 3:34 ` [Qemu-devel] [PATCH v5 17/18] tb hash: track translated blocks with qht Emilio G. Cota
2016-05-14 3:34 ` [Qemu-devel] [PATCH v5 18/18] translate-all: add tb hash bucket info to 'info jit' dump Emilio G. Cota
2016-05-23 22:26 ` [Qemu-devel] [PATCH v5 00/18] tb hash improvements Sergey Fedorov
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=573C9166.3030500@gmail.com \
--to=serge.fdrv@gmail.com \
--cc=alex.bennee@linaro.org \
--cc=cota@braap.org \
--cc=crosthwaite.peter@gmail.com \
--cc=mttcg@greensocs.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=rth@twiddle.net \
/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.