Hello community, here is the log from the commit of package irqd for openSUSE:Factory checked in at 2014-08-06 11:42:38 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/irqd (Old) and /work/SRC/openSUSE:Factory/.irqd.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "irqd" Changes: -------- --- /work/SRC/openSUSE:Factory/irqd/irqd.changes 2014-02-11 11:58:48.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.irqd.new/irqd.changes 2014-08-06 11:42:41.000000000 +0200 @@ -1,0 +2,7 @@ +Wed Aug 6 04:50:04 UTC 2014 - [email protected] + +- Update to new upstream release 0.7.2 +* Improve distribution of the "evenly" scheduler +* cpu: fix handling of busy CPUs if not part of cpuset + +------------------------------------------------------------------- Old: ---- irqd-0.7.0.g41.tar.xz irqd.init New: ---- irqd-0.7.2.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ irqd.spec ++++++ --- /var/tmp/diff_new_pack.HSTyOU/_old 2014-08-06 11:42:42.000000000 +0200 +++ /var/tmp/diff_new_pack.HSTyOU/_new 2014-08-06 11:42:42.000000000 +0200 @@ -17,15 +17,15 @@ Name: irqd -Version: 0.7.0.g41 +Version: 0.7.2 Release: 0 Summary: Multiqueue and RPS-aware IRQ affinity balancer License: GPL-2.0 Group: System/Daemons +Url: http://github.com/vaesoo/irqd #Git-Clone: git://github.com/vaesoo/irqd Source: %name-%version.tar.xz -Source2: irqd.init Source3: irqd.service BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildRequires: autoconf @@ -33,9 +33,7 @@ BuildRequires: bison BuildRequires: flex BuildRequires: libtool -%if 0%{?suse_version} >= 1210 -BuildRequires: systemd -%endif +BuildRequires: systemd-rpm-macros BuildRequires: xz BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(libnl-route-3.0) >= 3.2 @@ -49,12 +47,7 @@ RPS is not available. %prep -%if 0%{?__xz:1} %setup -qn %name -%else -tar -xf "%{S:0}" --use=xz; -%setup -DTqn %name -%endif %build if [ ! -e configure ]; then @@ -66,45 +59,27 @@ %install b="%buildroot"; make install DESTDIR="$b"; -%if 0%{?rhel_version} -mkdir -p "$b/%_initrddir"; -install -pm0755 "%{S:2}" "$b/%_initrddir/irqd"; -%endif -%if 0%{?_unitdir:1} -mkdir -p "$b/%_unitdir"; +mkdir -p "$b/%_unitdir" "$b/%_sbindir" install -pm0644 "%{S:3}" "$b/%_unitdir/irqd.service"; -%endif +ln -s service "$b/%_sbindir/rcirqd" -%if 0%{?_unitdir:1} %pre %service_add_pre irqd.service -%endif %post -%if 0%{?_unitdir:1} %service_add_post irqd.service -%endif -%restart_on_update irqd -%if 0%{?_unitdir:1} %preun %service_del_preun irqd.service -%endif -%if 0%{?_unitdir:1} %postun %service_del_postun irqd.service -%endif %files %defattr(-,root,root) -%if 0%{?rhel_version} -%_initrddir/irqd -%endif -%if 0%{?_unitdir:1} -%_unitdir -%endif +%_unitdir/* %_sbindir/irqd +%_sbindir/rcirqd %doc DESIGN README %changelog ++++++ irqd-0.7.0.g41.tar.xz -> irqd-0.7.2.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/irqd/configure.ac new/irqd/configure.ac --- old/irqd/configure.ac 2012-11-29 17:20:16.000000000 +0100 +++ new/irqd/configure.ac 2014-08-06 06:49:56.000000000 +0200 @@ -1,4 +1,4 @@ -AC_INIT([irqd], [0.7.0]) +AC_INIT([irqd], [0.7.2]) AC_PROG_INSTALL AM_INIT_AUTOMAKE([-Wall foreign]) AC_PROG_CC diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/irqd/cpu.c new/irqd/cpu.c --- old/irqd/cpu.c 2014-01-30 15:42:14.000000000 +0100 +++ new/irqd/cpu.c 2014-08-06 06:49:56.000000000 +0200 @@ -42,8 +42,8 @@ const struct cpu_info *a = __a, *b = __b; if (b->ci_num_queues != a->ci_num_queues) - return b->ci_num_queues - a->ci_num_queues; - return b->ci_num - a->ci_num; + return a->ci_num_queues - b->ci_num_queues; + return a->ci_num - b->ci_num; } void @@ -83,20 +83,21 @@ log("%s", buf); } -static struct cpu_info * +static int add_queue(struct cpu_info *ci, struct if_queue_info *qi) { struct cpuset *set = ci->ci_cpuset; + ci->ci_num_queues++; + set->cs_cpu_lru_list = g_slist_remove_link(set->cs_cpu_lru_list, set->cs_cpu_lru_list); set->cs_cpu_lru_list = g_slist_insert_sorted(set->cs_cpu_lru_list, ci, cpu_cmp); ci->ci_queues = g_slist_append(ci->ci_queues, qi); - ci->ci_num_queues++; - return ci; + return 0; } struct cpu_info * @@ -105,7 +106,9 @@ struct cpu_info *ci = cpu_nth(cpu); struct if_queue_info *qi = if_queue(iface, queue); - return add_queue(ci, qi); + if (add_queue(ci, qi) < 0) + return NULL; + return ci; } /* assign queue to CPU, select most idle CPU from a cpuset */ @@ -116,8 +119,9 @@ struct cpu_info *ci = set->cs_cpu_lru_list->data; struct if_queue_info *qi = if_queue(iface, queue); - BUG_ON(!ci); - return add_queue(ci, qi); + if (add_queue(ci, qi) < 0) + return NULL; + return ci; } int @@ -129,10 +133,7 @@ BUG_ON(!ci || ci->ci_num_queues == 0); ci->ci_queues = g_slist_remove(ci->ci_queues, qi); ci->ci_num_queues--; - - set->cs_cpu_lru_list = g_slist_remove(set->cs_cpu_lru_list, ci); - set->cs_cpu_lru_list = g_slist_insert_sorted(set->cs_cpu_lru_list, ci, - cpu_cmp); + set->cs_cpu_lru_list = g_slist_sort(set->cs_cpu_lru_list, cpu_cmp); return -1; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/irqd/evenly.c new/irqd/evenly.c --- old/irqd/evenly.c 2014-01-30 15:42:14.000000000 +0100 +++ new/irqd/evenly.c 2014-08-06 06:49:56.000000000 +0200 @@ -73,7 +73,6 @@ const struct cpuset *cset = iface->if_cpuset; const struct if_queue_info *qi_first = if_queue(iface, 0); int cpu, first_used = cpu_bitmask_ffs(qi_first->qi_cpu_bitmask); - struct cpu_info *ci; BUG_ON(first_used < 0); cpu = cpuset_first_cpu(cset) + (first_used + queue) % cpuset_len(cset); @@ -81,6 +80,25 @@ return cpu_add_queue(cpu, iface, queue); } +static void +check_cpuset_lru(const struct cpuset *set) +{ + GSList *node; + int min = INT_MAX, max = 0; + + for (node = set->cs_cpu_lru_list; node; node = node->next) { + const struct cpu_info *ci = node->data; + + if (min > ci->ci_num_queues) + min = ci->ci_num_queues; + if (max < ci->ci_num_queues) + max = ci->ci_num_queues; + } + + if (max - min > 1) + err("uneven distribution detected for '%s'", set->cs_name); +} + static int evenly_balance_queue(struct interface *iface, int queue) { @@ -114,6 +132,8 @@ } } + check_cpuset_lru(ci->ci_cpuset); + return 0; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/irqd/interface.c new/irqd/interface.c --- old/irqd/interface.c 2014-01-30 15:42:14.000000000 +0100 +++ new/irqd/interface.c 2014-08-06 06:49:56.000000000 +0200 @@ -811,10 +811,9 @@ ci->ci_ss[OLD].time_squeeze, ci->ci_ss[NEW].time_squeeze); #endif /* 0 */ - /* FIXME there may be CPUs not being part of a cpuset, they - are unbalanced */ - if (ci->ci_si_load > REBALANCE_SI_THRESH - || CPU_SS_DIFF(ci, dropped) > 0) + /* Not all CPUs are part of a cpuset */ + if ((ci->ci_si_load > REBALANCE_SI_THRESH + || CPU_SS_DIFF(ci, dropped) > 0) && set != NULL) cpuset_cpu_busy(set, ci); } -- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
