All of lore.kernel.org
 help / color / mirror / Atom feed
* [RFC] disk doesn't spin down with thin pool + dmeventd
@ 2016-01-07 19:31 Alan Jenkins
  2016-01-08  8:17 ` Zdenek Kabelac
  2016-01-09 10:07 ` Alan Jenkins
  0 siblings, 2 replies; 5+ messages in thread
From: Alan Jenkins @ 2016-01-07 19:31 UTC (permalink / raw)
  To: dm-devel

[-- Attachment #1: Type: text/plain, Size: 1388 bytes --]

Hi

I tried using Docker on my Fedora NAS box.  It created a thin pool LV, 
which caused hard drive activity every ~10 seconds.

dmeventd queries the thin pool every 10 seconds, and it causes a 
transaction commit in order to make sure the statistics are up to date. 
But transactions are already supposed to be committed after 1 second.  
(See Documentation/device-mapper/thin-provisioning.txt, "Updating 
on-disk metadata").

It seems like a simple case of "don't do that".  The kernel already lets 
us avoid the commit.  How about it (patch below)?  If it seems 
reasonable, I can whip up a commit message for it.

Thanks
Alan

diff --git a/daemons/dmeventd/dmeventd.c b/daemons/dmeventd/dmeventd.c
index c093d91..5948f15 100644
--- a/daemons/dmeventd/dmeventd.c
+++ b/daemons/dmeventd/dmeventd.c
@@ -412,6 +412,15 @@ static struct thread_status *_alloc_thread_status(const struct message_data *dat
  	if (!(thread->device.name = dm_strdup(data->device_uuid)))
  		goto_out;
  
+	/*
+	 * Avoid repeatedly forcing a flush.
+	 * Allow the disks to sleep, and accept "out-of-date" statistics.
+	 * E.g. affects thin pools.  Commits will occur every second already,
+	 * if the pool state is changing.
+	 */
+	if (!dm_task_no_flush(thread->wait_task))
+		goto_out;
+
  	/* runs ioctl and may register lvm2 pluging */
  	thread->processing = 1;
  	thread->status = DM_THREAD_REGISTERING;



[-- Attachment #2: dmevent-noflush.patch --]
[-- Type: text/x-patch, Size: 749 bytes --]

diff --git a/daemons/dmeventd/dmeventd.c b/daemons/dmeventd/dmeventd.c
index c093d91..5948f15 100644
--- a/daemons/dmeventd/dmeventd.c
+++ b/daemons/dmeventd/dmeventd.c
@@ -412,6 +412,15 @@ static struct thread_status *_alloc_thread_status(const struct message_data *dat
 	if (!(thread->device.name = dm_strdup(data->device_uuid)))
 		goto_out;
 
+	/*
+	 * Avoid repeatedly forcing a flush.
+	 * Allow the disks to sleep, and accept "out-of-date" statistics.
+	 * E.g. affects thin pools.  Commits will occur every second already,
+	 * if the pool state is changing.
+	 */
+	if (!dm_task_no_flush(thread->wait_task))
+		goto_out;
+
 	/* runs ioctl and may register lvm2 pluging */
 	thread->processing = 1;
 	thread->status = DM_THREAD_REGISTERING;

[-- Attachment #3: Type: text/plain, Size: 0 bytes --]



^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2016-01-11  9:21 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-01-07 19:31 [RFC] disk doesn't spin down with thin pool + dmeventd Alan Jenkins
2016-01-08  8:17 ` Zdenek Kabelac
2016-01-09 10:07 ` Alan Jenkins
2016-01-09 11:51   ` Alan Jenkins
2016-01-11  9:21     ` Zdenek Kabelac

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.