From: Martin Wilck <mwilck@suse.com>
To: tang.junhui@zte.com.cn, christophe.varoqui@opensvc.com,
hare@suse.de, bmarzins@redhat.com, bart.vanassche@sandisk.com
Cc: zhang.kai16@zte.com.cn, dm-devel@redhat.com, tang.wenjun3@zte.com.cn
Subject: Re: [PATCH 08/12] libmultipath: wait one seconds for more uevents in uevent_listen() in uevents burst situations
Date: Wed, 28 Dec 2016 21:25:42 +0100 [thread overview]
Message-ID: <1482956742.23348.3.camel@suse.com> (raw)
In-Reply-To: <1482825809-9528-9-git-send-email-tang.junhui@zte.com.cn>
On Tue, 2016-12-27 at 16:03 +0800, tang.junhui@zte.com.cn wrote:
> From: tang.junhui <tang.junhui@zte.com.cn>
>
> The more uevents are merged, the higher efficiency program will
> performs.
> So, do not process uevents after receiving immediately in uevents
> burst
> situations, but continue wait 1 seconds for more uevents except that
> too
> much uevents (2048) have already been received or too much time
> eclipse
> (60 seconds).
Hi Tang,
thanks for this impressive patch set. While I haven't had time to read
through the more complex parts yet, one small nitpick on this patch:
please use named constants rather than explicit numbers in the code.
Regards,
Martin
>
> Change-Id: I763d491540e8114a81d12d603281540a81502742
> Signed-off-by: tang.junhui <tang.junhui@zte.com.cn>
> ---
> libmultipath/uevent.c | 35 +++++++++++++++++++++++++++++++++--
> 1 file changed, 33 insertions(+), 2 deletions(-)
>
> diff --git a/libmultipath/uevent.c b/libmultipath/uevent.c
> index cc10d65..b0b05e9 100644
> --- a/libmultipath/uevent.c
> +++ b/libmultipath/uevent.c
> @@ -39,6 +39,7 @@
> #include <linux/netlink.h>
> #include <pthread.h>
> #include <sys/mman.h>
> +#include <sys/time.h>
> #include <libudev.h>
> #include <errno.h>
>
> @@ -490,11 +491,37 @@ struct uevent *uevent_from_udev_device(struct
> udev_device *dev)
> return uev;
> }
>
> +bool uevent_burst(struct timeval *start_time, int events)
> +{
> + struct timeval diff_time, end_time;
> + unsigned long speed;
> + unsigned long eclipse_ms;
> +
> + gettimeofday(&end_time, NULL);
> + timersub(&end_time, start_time, &diff_time);
> +
> + eclipse_ms = diff_time.tv_sec * 1000 + diff_time.tv_usec /
> 1000;
> + if (eclipse_ms == 0)
> + return true;
> + /* max wait 60s */
> + if (eclipse_ms > 60*1000) {
> + condlog(1, "burst continued =%lu ms, stoped",
> eclipse_ms);
> + return false;
> + }
> +
> + speed = (events * 1000) / eclipse_ms;
> + if (speed > 10)
> + return true;
> +
> + return false;
> +}
> +
> int uevent_listen(struct udev *udev)
> {
> int err = 2;
> struct udev_monitor *monitor = NULL;
> int fd, socket_flags, events;
> + struct timeval start_time;
> int need_failback = 1;
> int timeout = 30;
> LIST_HEAD(uevlisten_tmp);
> @@ -548,6 +575,7 @@ int uevent_listen(struct udev *udev)
> }
>
> events = 0;
> + gettimeofday(&start_time, NULL);
> while (1) {
> struct uevent *uev;
> struct udev_device *dev;
> @@ -562,7 +590,8 @@ int uevent_listen(struct udev *udev)
> errno = 0;
> fdcount = poll(&ev_poll, 1, poll_timeout);
> if (fdcount && ev_poll.revents & POLLIN) {
> - timeout = 0;
> + timeout = uevent_burst(&start_time, events +
> 1) ? 1:0;
> +
> dev = udev_monitor_receive_device(monitor);
> if (!dev) {
> condlog(0, "failed getting udev
> device");
> @@ -578,7 +607,8 @@ int uevent_listen(struct udev *udev)
> }
> list_add_tail(&uev->node, &uevlisten_tmp);
> events++;
> - continue;
> + if(events < 2048)
> + continue;
> }
> if (fdcount < 0) {
> if (errno == EINTR)
> @@ -600,6 +630,7 @@ int uevent_listen(struct udev *udev)
> pthread_mutex_unlock(uevq_lockp);
> events = 0;
> }
> + gettimeofday(&start_time, NULL);
> timeout = 30;
> }
> need_failback = 0;
--
Dr. Martin Wilck <mwilck@suse.com>, Tel. +49 (0)911 74053 2107
SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard, Graham Norton
HRB 21284 (AG Nürnberg)
--
dm-devel mailing list
dm-devel@redhat.com
https://www.redhat.com/mailman/listinfo/dm-devel
next prev parent reply other threads:[~2016-12-28 20:25 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-12-27 8:03 [PATCH 00/12] multipath-tools: improve processing efficiency for addition and deletion of multipath devices tang.junhui
2016-12-27 8:03 ` [PATCH 01/12] libmultipath: add wwid for "struct uevent" to record wwid of uevent tang.junhui
2017-01-03 22:02 ` Benjamin Marzinski
2017-01-04 6:56 ` tang.junhui
2017-01-04 18:14 ` Benjamin Marzinski
2017-01-04 20:33 ` Martin Wilck
2017-01-05 3:00 ` Benjamin Marzinski
2017-01-05 3:10 ` tang.junhui
2017-01-05 17:36 ` Benjamin Marzinski
2017-01-06 0:59 ` tang.junhui
2017-01-06 16:02 ` Benjamin Marzinski
2017-01-09 7:22 ` tang.junhui
2016-12-27 8:03 ` [PATCH 02/12] libmultipath: add merge_node for "struct uevent" to record nodes of merged uevents tang.junhui
2016-12-27 8:03 ` [PATCH 03/12] libmultipath: add two list iteration macros tang.junhui
2016-12-27 8:03 ` [PATCH 04/12] multipathd: add need_do_map to indicate whether need calling domap() in ev_add_path() tang.junhui
2016-12-27 8:03 ` [PATCH 05/12] multipathd: add need_do_map to indicate whether need calling domap() in ev_remove_path() tang.junhui
2016-12-27 8:03 ` [PATCH 06/12] multipathd: move uev_discard() to uevent.c and change its name to uevent_can_discard() tang.junhui
2016-12-27 8:03 ` [PATCH 07/12] multipathd: move calling filter_devnode() from uev_trigger() " tang.junhui
2016-12-27 8:03 ` [PATCH 08/12] libmultipath: wait one seconds for more uevents in uevent_listen() in uevents burst situations tang.junhui
2016-12-28 20:25 ` Martin Wilck [this message]
2016-12-29 0:48 ` tang.junhui
2017-01-03 22:31 ` Benjamin Marzinski
2017-01-04 7:32 ` tang.junhui
2016-12-27 8:03 ` [PATCH 09/12] multipathd: merge uevents before proccessing tang.junhui
2017-01-04 0:30 ` Benjamin Marzinski
2017-01-04 3:29 ` tang.junhui
2016-12-27 8:03 ` [PATCH 10/12] libmultipath: filter " tang.junhui
2017-01-04 1:21 ` Benjamin Marzinski
2017-01-04 2:03 ` tang.junhui
2016-12-27 8:03 ` [PATCH 11/12] multipathd: proccess merged uevents tang.junhui
2017-01-04 1:03 ` Benjamin Marzinski
2017-01-04 1:54 ` tang.junhui
2016-12-27 8:03 ` [PATCH 12/12] libmultipath: use existing wwid when wwid has already been existed in uevent tang.junhui
-- strict thread matches above, loose matches on Subject: below --
2016-12-29 1:54 [PATCH 08/12] libmultipath: wait one seconds for more uevents in uevent_listen() in uevents burst situations tang.junhui
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=1482956742.23348.3.camel@suse.com \
--to=mwilck@suse.com \
--cc=bart.vanassche@sandisk.com \
--cc=bmarzins@redhat.com \
--cc=christophe.varoqui@opensvc.com \
--cc=dm-devel@redhat.com \
--cc=hare@suse.de \
--cc=tang.junhui@zte.com.cn \
--cc=tang.wenjun3@zte.com.cn \
--cc=zhang.kai16@zte.com.cn \
/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.