All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Verma, Vishal L" <vishal.l.verma@intel.com>
To: "Elliott@hp.com" <Elliott@hp.com>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"mingo@kernel.org" <mingo@kernel.org>,
	"neilb@suse.de" <neilb@suse.de>, "hch@lst.de" <hch@lst.de>,
	"Williams, Dan J" <dan.j.williams@intel.com>,
	"axboe@fb.com" <axboe@fb.com>, "hpa@zytor.com" <hpa@zytor.com>,
	"linux-nvdimm@lists.01.org" <linux-nvdimm@lists.01.org>,
	"gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>,
	"luto@amacapital.net" <luto@amacapital.net>,
	"david@fromorbit.com" <david@fromorbit.com>
Subject: Re: [Linux-nvdimm] [PATCH v2 19/20] nd_btt: atomic sector updates
Date: Mon, 18 May 2015 22:38:11 +0000	[thread overview]
Message-ID: <1431988690.15857.31.camel@intel.com> (raw)
In-Reply-To: <94D0CD8314A33A4D9D801C0FE68B40295A9097E5@G9W0745.americas.hpqcorp.net>

On Sun, 2015-05-17 at 01:19 +0000, Elliott, Robert (Server Storage)
wrote:
> > -----Original Message-----
> > From: Linux-nvdimm [mailto:linux-nvdimm-bounces@lists.01.org] On Behalf Of
> > Dan Williams
> > Sent: Tuesday, April 28, 2015 1:26 PM
> > To: linux-nvdimm@lists.01.org
> > Cc: Ingo Molnar; Neil Brown; Greg KH; Dave Chinner; linux-
> > kernel@vger.kernel.org; Andy Lutomirski; Jens Axboe; H. Peter Anvin;
> > Christoph Hellwig
> > Subject: [Linux-nvdimm] [PATCH v2 19/20] nd_btt: atomic sector updates
> > 
> > From: Vishal Verma <vishal.l.verma@linux.intel.com>
> > 
> > BTT stands for Block Translation Table, and is a way to provide power
> > fail sector atomicity semantics for block devices that have the ability
> > to perform byte granularity IO. It relies on the ->rw_bytes() capability
> > of provided nd namespace devices.
> > 
> > The BTT works as a stacked blocked device, and reserves a chunk of space
> > from the backing device for its accounting metadata.  BLK namespaces may
> > mandate use of a BTT and expect the bus to initialize a BTT if not
> > already present.  Otherwise if a BTT is desired for other namespaces (or
> > partitions of a namespace) a BTT may be manually configured.
> ...
> 
> Running btt above pmem with a variety of workloads, I see an awful lot 
> of time spent in two places:
> * _raw_spin_lock 
> * btt_make_request

I'm curious about why _raw_spin_lock might be taking up so much time -
does the test system have more than 256 CPUs? Even ignoring Dan's fix
for nr_cpus which will allow the lockless path optimization to kick in
(coming in v3), the lane spinlocks should be largely uncontested unless
you have more than 256 CPUs.

One explanation could be that this is being dominated by 'map_locks' -
I'd need to get my perf setup going again to find out. (The more I think
about it, the more I'm convinced this is the case. Fortunately it is
simple to reduce map_lock contention by increasing the number of locks).

> 
> This occurs for fio to raw /dev/ndN devices, ddpt over ext4 or xfs,
> cp -R of large directories, and running make on the linux kernel.
> 
> Some specific results:
> 
> fio 4 KiB random reads, WC cache type, memcpy:
> * 43175 MB/s,   8 M IOPS  pmem0 and pmem1
> * 18500 MB/s, 1.5 M IOPS  nd0 and nd1
> 
> fio 4 KiB random reads, WC cache type, memcpy with non-temporal
> loads (when everything is 64-byte aligned):
> * 33814 MB/s, 4.3 M IOPS  nd0 and nd1
> 
> Zeroing out 32 MiB with ddpt:
> * 19 s, 1800 MiB/s	pmem
> * 55 s,  625 MiB/s	btt
> 
> If btt_make_request needs to stall this much, maybe it'd be better
> to utilize the blk-mq request queues, keeping requests in per-CPU
> queues while they're waiting, and using IPIs for completion 
> interrupts when they're finally done.
> 
> 
> fio 4 KiB random reads without non-temporal memcpy
> ==================================================
> perf top shows memcpy_erms taking all the time, a function that
> uses 8-byte REP; MOVSB instructions:
>  85.78%  [kernel]             [k] memcpy_erms
>   1.21%  [kernel]             [k] _raw_spin_lock
>   0.72%  [nd_btt]             [k] btt_make_request
>   0.67%  [kernel]             [k] do_blockdev_direct_IO
>   0.47%  fio                  [.] get_io_u
> 
> fio 4 KiB random reads with non-temporal memcpy
> ===============================================
> perf top shows there are still quite a few unaligned accesses
> resulting in legacy memcpy, but about equal time is now spent
> in legacy vs NT memcpy:

I take it memcpy_lnt_st_64 expects 64B aligned accesses? The BTT will
always have some unaligned accesses - the map updates are 4B long. Flog
updates are 16B long, but about half of them will not start at a 64B
alignment due to how it is laid out. I'm open to hearing ideas about how
this could be improved. One way, as Dan already said is reducing the
number of metadata updates by configuring a larger (4K) sector size.

>  30.47%  [kernel]            [k] memcpy_erms
>  26.27%  [kernel]            [k] memcpy_lnt_st_64
>   5.37%  [kernel]            [k] _raw_spin_lock
>   2.20%  [kernel]            [k] btt_make_request
>   2.03%  [kernel]            [k] do_blockdev_direct_IO
>   1.41%  fio                 [.] get_io_u
>   1.22%  [kernel]            [k] btt_map_read
>   1.15%  [kernel]            [k] pmem_rw_bytes
>   1.01%  [kernel]            [k] nd_btt_rw_bytes
>   0.98%  [kernel]            [k] nd_region_acquire_lane
>   0.89%  fio                 [.] get_next_rand_block
>   0.88%  fio                 [.] thread_main
>   0.79%  fio                 [.] ios_completed
>   0.76%  fio                 [.] td_io_queue
>   0.75%  [kernel]            [k] _raw_spin_lock_irqsave
>   0.68%  [kernel]            [k] kmem_cache_free
>   0.66%  [kernel]            [k] kmem_cache_alloc
>   0.59%  [kernel]            [k] __audit_syscall_exit
>   0.57%  [kernel]            [k] aio_complete
>   0.54%  [kernel]            [k] do_io_submit
>   0.52%  [kernel]            [k] _raw_spin_unlock_irqrestore
> 
> fio randrw workload
> ===================
> perf top shows that adding writes to the mix brings btt_make_request
> its cpu_relax() loop to the forefront:

This is good data - we've thought about benchmarking an alternate
strategy for the 'Read Tracking Table' - instead of a linear array, use
a hash table (hash new_postmap into an RTT slot) . It will add false
waiting due to hash collisions, but the writers won't have to walk the
array - they can just hash into the right spot.

Another option that Dan suggested could be instead of waiting in the
cpu_relax() loop, we drop the lane, and start over with _acquire_lane.
This way, we are waiting in the spin_lock stage, thus giving a chance to
other threads/CPUs that resolve to the same spinlock to run.

>   21.09%  [nd_btt]                              [k] btt_make_request 
>   19.06%  [kernel]                              [k] memcpy_erms  
>   14.35%  [kernel]                              [k] _raw_spin_lock   
>   10.38%  [nd_pmem]                             [k] memcpy_lnt_st_64    
>    1.57%  [kernel]                              [k] do_blockdev_direct_IO   
>    1.51%  [nd_pmem]                             [k] memcpy_lt_snt_64      
>    1.43%  [nd_btt]                              [k] nd_btt_rw_bytes       
>    1.39%  [kernel]                              [k] radix_tree_next_chunk  
>    1.33%  [kernel]                              [k] put_page             
>    1.21%  [nd_pmem]                             [k] pmem_rw_bytes      
>    1.11%  fio                                   [.] get_io_u          
>    0.90%  fio                                   [.] io_u_queued_complete  
>    0.74%  [kernel]                              [k] system_call         
>    0.72%  [libnd]                               [k] nd_region_acquire_lane   
>    0.71%  [nd_btt]                              [k] btt_map_read            
>    0.62%  fio                                   [.] thread_main           
> 
> inside btt_make_request:
> 
>        ¦                     /* Wait if the new block is being read from */
>        ¦                     for (i = 0; i < arena->nfree; i++)
>   2.98 ¦     ? je     2b4
>   0.05 ¦       mov    0x60(%r14),%rax
>   0.00 ¦       mov    %ebx,%edx
>        ¦       xor    %esi,%esi
>   0.03 ¦       or     $0x80000000,%edx
>   0.05 ¦       nop
>        ¦                             while (arena->rtt[i] == (RTT_VALID | new_postmap))
>  22.98 ¦290:   mov    %esi,%edi
>   0.01 ¦       cmp    %edx,(%rax,%rdi,4)
>  30.97 ¦       lea    0x0(,%rdi,4),%rcx
>  21.05 ¦     ? jne    2ab
>        ¦       nop
>        ¦     }
>        ¦
>        ¦     /* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
>        ¦     static inline void rep_nop(void)
>        ¦     {
>        ¦             asm volatile("rep; nop" ::: "memory");
>        ¦2a0:   pause
>        ¦       mov    0x60(%r14),%rax
>        ¦       cmp    (%rax,%rcx,1),%edx
>        ¦     ? je     2a0
>        ¦                     }
> 
> 
> ddpt zeroing out
> ================
> perf top shows 27% in spinlocks, and 14% in btt_make_request (all in 
> the "wait if the new block is being read from" loop).
> 
>   26.48%  [kernel]                      [k] _raw_spin_lock   
>   14.46%  [nd_btt]                      [k] btt_make_request  
>   13.14%  [kernel]                      [k] memcpy_erms    
>   10.34%  [kernel]                      [k] copy_user_enhanced_fast_string 
>    3.12%  [nd_pmem]                     [k] memcpy_lt_snt_64  
>    1.15%  [kernel]                      [k] __block_commit_write.isra.21 
>    0.96%  [nd_pmem]                     [k] pmem_rw_bytes 
>    0.96%  [nd_btt]                      [k] nd_btt_rw_bytes 
>    0.86%  [kernel]                      [k] unlock_page     
>    0.65%  [kernel]                      [k] _raw_spin_lock_irqsave 
>    0.58%  [kernel]                      [k] bdev_read_only 
>    0.56%  [kernel]                      [k] release_pages  
>    0.54%  [nd_pmem]                     [k] memcpy_lnt_st_64  
>    0.53%  [ext4]                        [k] ext4_mark_iloc_dirty   
>    0.52%  [kernel]                      [k] __wake_up_bit   
>    0.52%  [kernel]                      [k] __clear_user   
> 
> ---
> Robert Elliott, HP Server Storage

Thanks, this is great analysis - I'd be quite interested in how these
numbers look like with the two changes Dan mentioned.

	-Vishal

WARNING: multiple messages have this Message-ID (diff)
From: "Verma, Vishal L" <vishal.l.verma@intel.com>
To: "Elliott@hp.com" <Elliott@hp.com>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"mingo@kernel.org" <mingo@kernel.org>,
	"neilb@suse.de" <neilb@suse.de>, "hch@lst.de" <hch@lst.de>,
	"Williams, Dan J" <dan.j.williams@intel.com>,
	"axboe@fb.com" <axboe@fb.com>, "hpa@zytor.com" <hpa@zytor.com>,
	"linux-nvdimm@lists.01.org" <linux-nvdimm@ml01.01.org>,
	"gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>,
	"luto@amacapital.net" <luto@amacapital.net>,
	"david@fromorbit.com" <david@fromorbit.com>
Subject: Re: [Linux-nvdimm] [PATCH v2 19/20] nd_btt: atomic sector updates
Date: Mon, 18 May 2015 22:38:11 +0000	[thread overview]
Message-ID: <1431988690.15857.31.camel@intel.com> (raw)
In-Reply-To: <94D0CD8314A33A4D9D801C0FE68B40295A9097E5@G9W0745.americas.hpqcorp.net>

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset="utf-8", Size: 9597 bytes --]

On Sun, 2015-05-17 at 01:19 +0000, Elliott, Robert (Server Storage)
wrote:
> > -----Original Message-----
> > From: Linux-nvdimm [mailto:linux-nvdimm-bounces@lists.01.org] On Behalf Of
> > Dan Williams
> > Sent: Tuesday, April 28, 2015 1:26 PM
> > To: linux-nvdimm@lists.01.org
> > Cc: Ingo Molnar; Neil Brown; Greg KH; Dave Chinner; linux-
> > kernel@vger.kernel.org; Andy Lutomirski; Jens Axboe; H. Peter Anvin;
> > Christoph Hellwig
> > Subject: [Linux-nvdimm] [PATCH v2 19/20] nd_btt: atomic sector updates
> > 
> > From: Vishal Verma <vishal.l.verma@linux.intel.com>
> > 
> > BTT stands for Block Translation Table, and is a way to provide power
> > fail sector atomicity semantics for block devices that have the ability
> > to perform byte granularity IO. It relies on the ->rw_bytes() capability
> > of provided nd namespace devices.
> > 
> > The BTT works as a stacked blocked device, and reserves a chunk of space
> > from the backing device for its accounting metadata.  BLK namespaces may
> > mandate use of a BTT and expect the bus to initialize a BTT if not
> > already present.  Otherwise if a BTT is desired for other namespaces (or
> > partitions of a namespace) a BTT may be manually configured.
> ...
> 
> Running btt above pmem with a variety of workloads, I see an awful lot 
> of time spent in two places:
> * _raw_spin_lock 
> * btt_make_request

I'm curious about why _raw_spin_lock might be taking up so much time -
does the test system have more than 256 CPUs? Even ignoring Dan's fix
for nr_cpus which will allow the lockless path optimization to kick in
(coming in v3), the lane spinlocks should be largely uncontested unless
you have more than 256 CPUs.

One explanation could be that this is being dominated by 'map_locks' -
I'd need to get my perf setup going again to find out. (The more I think
about it, the more I'm convinced this is the case. Fortunately it is
simple to reduce map_lock contention by increasing the number of locks).

> 
> This occurs for fio to raw /dev/ndN devices, ddpt over ext4 or xfs,
> cp -R of large directories, and running make on the linux kernel.
> 
> Some specific results:
> 
> fio 4 KiB random reads, WC cache type, memcpy:
> * 43175 MB/s,   8 M IOPS  pmem0 and pmem1
> * 18500 MB/s, 1.5 M IOPS  nd0 and nd1
> 
> fio 4 KiB random reads, WC cache type, memcpy with non-temporal
> loads (when everything is 64-byte aligned):
> * 33814 MB/s, 4.3 M IOPS  nd0 and nd1
> 
> Zeroing out 32 MiB with ddpt:
> * 19 s, 1800 MiB/s	pmem
> * 55 s,  625 MiB/s	btt
> 
> If btt_make_request needs to stall this much, maybe it'd be better
> to utilize the blk-mq request queues, keeping requests in per-CPU
> queues while they're waiting, and using IPIs for completion 
> interrupts when they're finally done.
> 
> 
> fio 4 KiB random reads without non-temporal memcpy
> ==================================================
> perf top shows memcpy_erms taking all the time, a function that
> uses 8-byte REP; MOVSB instructions:
>  85.78%  [kernel]             [k] memcpy_erms
>   1.21%  [kernel]             [k] _raw_spin_lock
>   0.72%  [nd_btt]             [k] btt_make_request
>   0.67%  [kernel]             [k] do_blockdev_direct_IO
>   0.47%  fio                  [.] get_io_u
> 
> fio 4 KiB random reads with non-temporal memcpy
> ===============================================
> perf top shows there are still quite a few unaligned accesses
> resulting in legacy memcpy, but about equal time is now spent
> in legacy vs NT memcpy:

I take it memcpy_lnt_st_64 expects 64B aligned accesses? The BTT will
always have some unaligned accesses - the map updates are 4B long. Flog
updates are 16B long, but about half of them will not start at a 64B
alignment due to how it is laid out. I'm open to hearing ideas about how
this could be improved. One way, as Dan already said is reducing the
number of metadata updates by configuring a larger (4K) sector size.

>  30.47%  [kernel]            [k] memcpy_erms
>  26.27%  [kernel]            [k] memcpy_lnt_st_64
>   5.37%  [kernel]            [k] _raw_spin_lock
>   2.20%  [kernel]            [k] btt_make_request
>   2.03%  [kernel]            [k] do_blockdev_direct_IO
>   1.41%  fio                 [.] get_io_u
>   1.22%  [kernel]            [k] btt_map_read
>   1.15%  [kernel]            [k] pmem_rw_bytes
>   1.01%  [kernel]            [k] nd_btt_rw_bytes
>   0.98%  [kernel]            [k] nd_region_acquire_lane
>   0.89%  fio                 [.] get_next_rand_block
>   0.88%  fio                 [.] thread_main
>   0.79%  fio                 [.] ios_completed
>   0.76%  fio                 [.] td_io_queue
>   0.75%  [kernel]            [k] _raw_spin_lock_irqsave
>   0.68%  [kernel]            [k] kmem_cache_free
>   0.66%  [kernel]            [k] kmem_cache_alloc
>   0.59%  [kernel]            [k] __audit_syscall_exit
>   0.57%  [kernel]            [k] aio_complete
>   0.54%  [kernel]            [k] do_io_submit
>   0.52%  [kernel]            [k] _raw_spin_unlock_irqrestore
> 
> fio randrw workload
> ===================
> perf top shows that adding writes to the mix brings btt_make_request
> its cpu_relax() loop to the forefront:

This is good data - we've thought about benchmarking an alternate
strategy for the 'Read Tracking Table' - instead of a linear array, use
a hash table (hash new_postmap into an RTT slot) . It will add false
waiting due to hash collisions, but the writers won't have to walk the
array - they can just hash into the right spot.

Another option that Dan suggested could be instead of waiting in the
cpu_relax() loop, we drop the lane, and start over with _acquire_lane.
This way, we are waiting in the spin_lock stage, thus giving a chance to
other threads/CPUs that resolve to the same spinlock to run.

>   21.09%  [nd_btt]                              [k] btt_make_request 
>   19.06%  [kernel]                              [k] memcpy_erms  
>   14.35%  [kernel]                              [k] _raw_spin_lock   
>   10.38%  [nd_pmem]                             [k] memcpy_lnt_st_64    
>    1.57%  [kernel]                              [k] do_blockdev_direct_IO   
>    1.51%  [nd_pmem]                             [k] memcpy_lt_snt_64      
>    1.43%  [nd_btt]                              [k] nd_btt_rw_bytes       
>    1.39%  [kernel]                              [k] radix_tree_next_chunk  
>    1.33%  [kernel]                              [k] put_page             
>    1.21%  [nd_pmem]                             [k] pmem_rw_bytes      
>    1.11%  fio                                   [.] get_io_u          
>    0.90%  fio                                   [.] io_u_queued_complete  
>    0.74%  [kernel]                              [k] system_call         
>    0.72%  [libnd]                               [k] nd_region_acquire_lane   
>    0.71%  [nd_btt]                              [k] btt_map_read            
>    0.62%  fio                                   [.] thread_main           
> 
> inside btt_make_request:
> 
>        ¦                     /* Wait if the new block is being read from */
>        ¦                     for (i = 0; i < arena->nfree; i++)
>   2.98 ¦     ? je     2b4
>   0.05 ¦       mov    0x60(%r14),%rax
>   0.00 ¦       mov    %ebx,%edx
>        ¦       xor    %esi,%esi
>   0.03 ¦       or     $0x80000000,%edx
>   0.05 ¦       nop
>        ¦                             while (arena->rtt[i] == (RTT_VALID | new_postmap))
>  22.98 ¦290:   mov    %esi,%edi
>   0.01 ¦       cmp    %edx,(%rax,%rdi,4)
>  30.97 ¦       lea    0x0(,%rdi,4),%rcx
>  21.05 ¦     ? jne    2ab
>        ¦       nop
>        ¦     }
>        ¦
>        ¦     /* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
>        ¦     static inline void rep_nop(void)
>        ¦     {
>        ¦             asm volatile("rep; nop" ::: "memory");
>        ¦2a0:   pause
>        ¦       mov    0x60(%r14),%rax
>        ¦       cmp    (%rax,%rcx,1),%edx
>        ¦     ? je     2a0
>        ¦                     }
> 
> 
> ddpt zeroing out
> ================
> perf top shows 27% in spinlocks, and 14% in btt_make_request (all in 
> the "wait if the new block is being read from" loop).
> 
>   26.48%  [kernel]                      [k] _raw_spin_lock   
>   14.46%  [nd_btt]                      [k] btt_make_request  
>   13.14%  [kernel]                      [k] memcpy_erms    
>   10.34%  [kernel]                      [k] copy_user_enhanced_fast_string 
>    3.12%  [nd_pmem]                     [k] memcpy_lt_snt_64  
>    1.15%  [kernel]                      [k] __block_commit_write.isra.21 
>    0.96%  [nd_pmem]                     [k] pmem_rw_bytes 
>    0.96%  [nd_btt]                      [k] nd_btt_rw_bytes 
>    0.86%  [kernel]                      [k] unlock_page     
>    0.65%  [kernel]                      [k] _raw_spin_lock_irqsave 
>    0.58%  [kernel]                      [k] bdev_read_only 
>    0.56%  [kernel]                      [k] release_pages  
>    0.54%  [nd_pmem]                     [k] memcpy_lnt_st_64  
>    0.53%  [ext4]                        [k] ext4_mark_iloc_dirty   
>    0.52%  [kernel]                      [k] __wake_up_bit   
>    0.52%  [kernel]                      [k] __clear_user   
> 
> ---
> Robert Elliott, HP Server Storage

Thanks, this is great analysis - I'd be quite interested in how these
numbers look like with the two changes Dan mentioned.

	-Vishal
ÿôèº{.nÇ+‰·Ÿ®‰­†+%ŠËÿ±éݶ\x17¥Šwÿº{.nÇ+‰·¥Š{±þG«éÿŠ{ayº\x1dʇڙë,j\a­¢f£¢·hšïêÿ‘êçz_è®\x03(­éšŽŠÝ¢j"ú\x1a¶^[m§ÿÿ¾\a«þG«éÿ¢¸?™¨è­Ú&£ø§~á¶iO•æ¬z·švØ^\x14\x04\x1a¶^[m§ÿÿÃ\fÿ¶ìÿ¢¸?–I¥

  parent reply	other threads:[~2015-05-18 22:38 UTC|newest]

Thread overview: 179+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-04-28 18:24 [PATCH v2 00/20] libnd: non-volatile memory device support Dan Williams
2015-04-28 18:24 ` Dan Williams
2015-04-28 18:24 ` [PATCH v2 01/20] e820, efi: add ACPI 6.0 persistent memory types Dan Williams
2015-04-28 18:24   ` Dan Williams
2015-04-28 20:49   ` Andy Lutomirski
2015-04-28 20:49     ` Andy Lutomirski
2015-04-28 20:57     ` Dan Williams
2015-04-28 20:57       ` Dan Williams
2015-04-28 21:05       ` Andy Lutomirski
2015-04-28 21:05         ` Andy Lutomirski
2015-05-15 15:43   ` [Linux-nvdimm] " Jeff Moyer
2015-05-15 15:48     ` Dan Williams
2015-05-18 19:28       ` Andy Lutomirski
2015-04-28 18:24 ` [PATCH v2 02/20] libnd, nd_acpi: initial libnd infrastructure and NFIT support Dan Williams
2015-04-28 18:24   ` Dan Williams
2015-04-30 23:23   ` Rafael J. Wysocki
2015-04-30 23:23     ` Rafael J. Wysocki
2015-05-01  0:39     ` Dan Williams
2015-05-01  0:39       ` Dan Williams
2015-05-01  1:21       ` Rafael J. Wysocki
2015-05-01  1:21         ` Rafael J. Wysocki
2015-05-01 16:23         ` Dan Williams
2015-05-01 16:23           ` Dan Williams
2015-05-04 23:58           ` Rafael J. Wysocki
2015-05-04 23:58             ` Rafael J. Wysocki
2015-05-04 23:46             ` Dan Williams
2015-05-04 23:46               ` Dan Williams
2015-05-15 19:44   ` [Linux-nvdimm] " Jeff Moyer
2015-05-15 20:41     ` Dan Williams
2015-04-28 18:24 ` [PATCH v2 03/20] nd_acpi, nfit-test: manufactured NFITs for interface development Dan Williams
2015-04-28 18:24   ` Dan Williams
2015-05-15 20:25   ` [Linux-nvdimm] " Jeff Moyer
2015-05-15 20:50     ` Dan Williams
2015-04-28 18:24 ` [PATCH v2 04/20] libnd: ndctl class device, and nd bus attributes Dan Williams
2015-04-28 18:24   ` Dan Williams
2015-05-15 21:00   ` [Linux-nvdimm] " Jeff Moyer
2015-04-28 18:24 ` [PATCH v2 05/20] libnd, nd_acpi: dimm/memory-devices Dan Williams
2015-04-28 18:24   ` Dan Williams
2015-05-01 17:48   ` [Linux-nvdimm] " Toshi Kani
2015-05-01 17:48     ` Toshi Kani
2015-05-01 18:22     ` Dan Williams
2015-05-01 18:22       ` Dan Williams
2015-05-01 18:19       ` Toshi Kani
2015-05-01 18:19         ` Toshi Kani
2015-05-01 18:43         ` Dan Williams
2015-05-01 18:43           ` Dan Williams
2015-05-01 19:15           ` Toshi Kani
2015-05-01 19:15             ` Toshi Kani
2015-05-01 19:38             ` Dan Williams
2015-05-01 19:38               ` Dan Williams
2015-05-01 20:08               ` Toshi Kani
2015-05-01 20:08                 ` Toshi Kani
2015-04-28 18:24 ` [PATCH v2 06/20] libnd: ndctl.h, the nd ioctl abi Dan Williams
2015-04-28 18:24   ` Dan Williams
2015-04-28 18:24 ` [PATCH v2 07/20] libnd, nd_dimm: dimm driver and base libnd device-driver infrastructure Dan Williams
2015-04-28 18:24   ` Dan Williams
2015-05-20 16:59   ` [Linux-nvdimm] " Elliott, Robert (Server Storage)
2015-05-20 16:59     ` Elliott, Robert (Server Storage)
2015-05-20 17:02     ` Dan Williams
2015-05-20 17:02       ` Dan Williams
2015-04-28 18:24 ` [PATCH v2 08/20] libnd, nd_acpi: regions (block-data-window, persistent memory, volatile memory) Dan Williams
2015-04-28 18:24   ` Dan Williams
2015-04-29 15:53   ` [Linux-nvdimm] " Elliott, Robert (Server Storage)
2015-04-29 15:53     ` Elliott, Robert (Server Storage)
2015-04-29 15:59     ` Dan Williams
2015-04-29 15:59       ` Dan Williams
2015-05-04 20:26   ` Toshi Kani
2015-05-04 20:26     ` Toshi Kani
2015-05-09 23:55     ` Dan Williams
2015-05-09 23:55       ` Dan Williams
2015-05-28 18:36       ` Toshi Kani
2015-05-28 18:36         ` Toshi Kani
2015-05-28 19:59         ` Dan Williams
2015-05-28 19:59           ` Dan Williams
2015-05-28 20:51           ` Linda Knippers
2015-05-28 20:51             ` Linda Knippers
2015-05-28 20:58             ` Dan Williams
2015-05-28 20:58               ` Dan Williams
2015-04-28 18:25 ` [PATCH v2 09/20] libnd: support for legacy (non-aliasing) nvdimms Dan Williams
2015-04-28 18:25   ` Dan Williams
2015-04-28 18:25 ` [PATCH v2 10/20] pmem: use ida Dan Williams
2015-04-28 18:25   ` Dan Williams
2015-04-29 18:25   ` [Linux-nvdimm] " Toshi Kani
2015-04-29 18:25     ` Toshi Kani
2015-04-29 18:59     ` Dan Williams
2015-04-29 18:59       ` Dan Williams
2015-04-29 18:53       ` Toshi Kani
2015-04-29 18:53         ` Toshi Kani
2015-04-29 20:49         ` Linda Knippers
2015-04-29 20:49           ` Linda Knippers
2015-04-29 21:36           ` Dan Williams
2015-04-29 21:36             ` Dan Williams
2015-04-28 18:25 ` [PATCH v2 11/20] libnd, nd_pmem: add libnd support to the pmem driver Dan Williams
2015-04-28 18:25   ` Dan Williams
2015-04-28 21:04   ` Andy Lutomirski
2015-04-28 21:04     ` Andy Lutomirski
2015-04-28 22:21     ` [Linux-nvdimm] " Phil Pokorny
2015-04-28 22:21       ` Phil Pokorny
2015-04-28 22:58       ` Andy Lutomirski
2015-04-28 22:58         ` Andy Lutomirski
2015-04-29  0:17         ` Phil Pokorny
2015-04-29  0:17           ` Phil Pokorny
2015-04-29  0:28           ` Andy Lutomirski
2015-04-29  0:28             ` Andy Lutomirski
2015-04-29 15:55         ` Dan Williams
2015-04-29 15:55           ` Dan Williams
2015-04-29 18:36           ` Andy Lutomirski
2015-04-29 18:36             ` Andy Lutomirski
2015-04-28 18:25 ` [PATCH v2 12/20] libnd, nd_acpi: add interleave-set state-tracking infrastructure Dan Williams
2015-04-28 18:25   ` Dan Williams
2015-04-28 18:25 ` [PATCH v2 13/20] libnd: namespace indices: read and validate Dan Williams
2015-04-28 18:25   ` Dan Williams
2015-04-28 18:25 ` [PATCH v2 14/20] libnd: pmem label sets and namespace instantiation Dan Williams
2015-04-28 18:25   ` Dan Williams
2015-04-28 18:25 ` [PATCH v2 15/20] libnd: blk labels " Dan Williams
2015-04-28 18:25   ` Dan Williams
2015-04-28 18:25 ` [PATCH v2 16/20] libnd: write pmem label set Dan Williams
2015-04-28 18:25   ` Dan Williams
2015-04-28 18:25 ` [PATCH v2 17/20] libnd: write blk " Dan Williams
2015-04-28 18:25   ` Dan Williams
2015-04-28 18:25 ` [PATCH v2 18/20] libnd: infrastructure for btt devices Dan Williams
2015-04-28 18:25   ` Dan Williams
2015-05-12 16:33   ` [Linux-nvdimm] " Toshi Kani
2015-05-12 16:33     ` Toshi Kani
2015-05-15  0:41     ` Dan Williams
2015-05-15  0:41       ` Dan Williams
2015-05-15  4:25       ` Elliott, Robert (Server Storage)
2015-05-15  4:25         ` Elliott, Robert (Server Storage)
2015-04-28 18:25 ` [PATCH v2 19/20] nd_btt: atomic sector updates Dan Williams
2015-04-28 18:25   ` Dan Williams
2015-05-17  1:19   ` [Linux-nvdimm] " Elliott, Robert (Server Storage)
2015-05-17  1:19     ` Elliott, Robert (Server Storage)
2015-05-17  3:22     ` Dan Williams
2015-05-17  3:22       ` Dan Williams
2015-05-20 17:20       ` Elliott, Robert (Server Storage)
2015-05-20 17:20         ` Elliott, Robert (Server Storage)
2015-05-18 22:38     ` Verma, Vishal L [this message]
2015-05-18 22:38       ` Verma, Vishal L
2015-04-28 18:26 ` [PATCH v2 20/20] libnd, nd_acpi, nd_blk: driver for BLK-mode access persistent memory Dan Williams
2015-04-28 18:26   ` Dan Williams
2015-04-28 21:10   ` Andy Lutomirski
2015-04-28 21:10     ` Andy Lutomirski
2015-04-28 22:30     ` Dan Williams
2015-04-28 22:30       ` Dan Williams
2015-04-28 23:06       ` Andy Lutomirski
2015-04-28 23:06         ` Andy Lutomirski
2015-04-29 17:10         ` Dan Williams
2015-04-29 17:10           ` Dan Williams
2015-04-29 19:28           ` Andy Lutomirski
2015-04-29 19:28             ` Andy Lutomirski
2015-04-28 20:52 ` [PATCH v2 00/20] libnd: non-volatile memory device support Andy Lutomirski
2015-04-28 20:52   ` Andy Lutomirski
2015-04-28 20:59   ` Dan Williams
2015-04-28 20:59     ` Dan Williams
2015-04-28 21:06     ` Andy Lutomirski
2015-04-28 21:06       ` Andy Lutomirski
2015-04-28 22:28       ` Dan Williams
2015-04-28 22:28         ` Dan Williams
2015-04-28 23:05         ` Andy Lutomirski
2015-04-28 23:05           ` Andy Lutomirski
2015-04-30 20:56           ` Ross Zwisler
2015-04-30 20:56             ` Ross Zwisler
2015-04-28 21:24 ` [Linux-nvdimm] " Elliott, Robert (Server Storage)
2015-04-28 21:24   ` Elliott, Robert (Server Storage)
2015-04-28 22:15   ` Dan Williams
2015-04-28 22:15     ` Dan Williams
2015-05-07  7:29     ` Christoph Hellwig
2015-05-07  7:29       ` Christoph Hellwig
2015-04-29  0:25 ` Rafael J. Wysocki
2015-04-29  0:25   ` Rafael J. Wysocki
2015-04-29  1:22   ` Dan Williams
2015-04-29  1:22     ` Dan Williams
2015-04-29  1:22     ` Dan Williams
2015-05-05  0:06     ` Rafael J. Wysocki
2015-05-05  0:06       ` Rafael J. Wysocki
2015-05-05  0:06       ` Rafael J. Wysocki
2015-05-08  6:31       ` Williams, Dan J
2015-05-08  6:31         ` Williams, Dan J
2015-05-08  6:31         ` Williams, Dan J

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=1431988690.15857.31.camel@intel.com \
    --to=vishal.l.verma@intel.com \
    --cc=Elliott@hp.com \
    --cc=axboe@fb.com \
    --cc=dan.j.williams@intel.com \
    --cc=david@fromorbit.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=hch@lst.de \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nvdimm@lists.01.org \
    --cc=luto@amacapital.net \
    --cc=mingo@kernel.org \
    --cc=neilb@suse.de \
    /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.