Hi All,
This is V2 Resend of my sched_select_cpu() work. Resend because didn't got much
attention on V2. Including more guys now in cc :)
In order to save power, it would be useful to schedule work onto non-IDLE cpus
instead of waking up an IDLE one.
To achieve this, we need scheduler to guide kernel frameworks (like: timers &
workqueues) on which is the most preferred CPU that must be used for these
tasks.
This patchset is about implementing this concept.
- The first patch adds sched_select_cpu() routine which returns the preferred
cpu which is non-idle.
- Second patch removes idle_cpu() calls from timer & hrtimer.
- Third patch is about adapting this change in workqueue framework.
- Fourth patch add migration capability in running timer
Earlier discussions over v1 can be found here:
http://www.mail-archive.com/linaro-dev@lists.linaro.org/msg13342.html
Earlier discussions over this concept were done at last LPC:
http://summit.linuxplumbersconf.org/lpc-2012/meeting/90/lpc2012-sched-timer…
Module created for testing this behavior is present here:
http://git.linaro.org/gitweb?p=people/vireshk/module.git;a=summary
Following are the steps followed in test module:
1. Run single work on each cpu
2. This work will start a timer after x (tested with 10) jiffies of delay
3. Timer routine queues a work... (This may be called from idle or non-idle cpu)
and starts the same timer again STEP 3 is done for n number of times (i.e.
queuing n works, one after other)
4. All works will call a single routine, which will count following per cpu:
- Total works processed by a CPU
- Total works processed by a CPU, which are queued from it
- Total works processed by a CPU, which aren't queued from it
Setup:
-----
- ARM Vexpress TC2 - big.LITTLE CPU
- Core 0-1: A15, 2-4: A7
- rootfs: linaro-ubuntu-nano
Results:
-------
Without Workqueue Modification, i.e. PATCH 3/3:
[ 2493.022335] Workqueue Analyser: works processsed by CPU0, Total: 1000, Own: 0, migrated: 0
[ 2493.047789] Workqueue Analyser: works processsed by CPU1, Total: 1000, Own: 0, migrated: 0
[ 2493.072918] Workqueue Analyser: works processsed by CPU2, Total: 1000, Own: 0, migrated: 0
[ 2493.098576] Workqueue Analyser: works processsed by CPU3, Total: 1000, Own: 0, migrated: 0
[ 2493.123702] Workqueue Analyser: works processsed by CPU4, Total: 1000, Own: 0, migrated: 0
With Workqueue Modification, i.e. PATCH 3/3:
[ 2493.022335] Workqueue Analyser: works processsed by CPU0, Total: 1002, Own: 999, migrated: 3
[ 2493.047789] Workqueue Analyser: works processsed by CPU1, Total: 998, Own: 997, migrated: 1
[ 2493.072918] Workqueue Analyser: works processsed by CPU2, Total: 1013, Own: 996, migrated: 17
[ 2493.098576] Workqueue Analyser: works processsed by CPU3, Total: 998, Own: 993, migrated: 5
[ 2493.123702] Workqueue Analyser: works processsed by CPU4, Total: 989, Own: 987, migrated: 2
V2->V2-Resend
-------------
- Included timer migration patch in the same thread.
V1->V2
-----
- New SD_* macros removed now and earlier ones used
- sched_select_cpu() rewritten and it includes the check on current cpu's
idleness.
- cpu_idle() calls from timer and hrtimer removed now.
- Patch 2/3 from V1, removed as it doesn't apply to latest workqueue branch from
tejun.
- CONFIG_MIGRATE_WQ removed and so is wq_select_cpu()
- sched_select_cpu() called only from __queue_work()
- got tejun/for-3.7 branch in my tree, before making workqueue changes.
Viresh Kumar (4):
sched: Create sched_select_cpu() to give preferred CPU for power
saving
timer: hrtimer: Don't check idle_cpu() before calling
get_nohz_timer_target()
workqueue: Schedule work on non-idle cpu instead of current one
timer: Migrate running timer
include/linux/sched.h | 16 ++++++++++--
include/linux/timer.h | 2 ++
kernel/hrtimer.c | 2 +-
kernel/sched/core.c | 69 +++++++++++++++++++++++++++++++--------------------
kernel/timer.c | 50 ++++++++++++++++++++++---------------
kernel/workqueue.c | 4 +--
6 files changed, 91 insertions(+), 52 deletions(-)
--
1.7.12.rc2.18.g61b472e
Hi Guys,
I really don't know whom to direct this mail to and hence the wide spread.
Problem: When we send a mail to kernel mailing lists with linaro-dev
or linaro-kernel
in cc, and we get replies to those mails, sometimes the mails from
outside people
doesn't reach us back on linaro mailing lists. And i hope the reason
behind that is
those people aren't subscribed to these lists.
For me it makes some sense to allow anyone to send mails to this list. Can that
request be considered?
I believe the idea behind blocking such use is for protecting against
spam mails, but
these mails/replies are really important and we certainly need them
delivered to us.
One solution (don't know if its possible) would be to monitor mails
from non-subscribers
and few people from Linaro can permit them on daily/hourly basis, so
that we don't get any
spam mails, but that would be a burden.
--
viresh
Hi Marcin,
I notice you've created a number of shell scripts to manage checking out
multiple git repositories, specific revisions of git repositories for a
release, etc. Repo [1] does this stuff pretty well that you might want to
consider as an eventual alternative.
1. https://gerrit.googlesource.com/git-repo/+/stable
Here's one example of a Repo manifest for an OpenEmbedded-based project,
albeit with extra packages thrown in. You can ignore the things with a path
outside of oe-core.
https://www.codeaurora.org/gitweb/quic/le/?p=mdm/manifest.git;a=blob;f=caf_…
Once you've got a git repository the with manifest file, the usage mechanics
are something along the lines of downloading repo itself if not already
available [2], passing the manifest repository's URL (can be local) to repo
init, and then running repo sync to clone all the repositories from the source
URLs to the destination paths at the revisions specified in the manifest file.
2. http://source.android.com/source/downloading.html
Regards,
Christopher
--
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by the Linux Foundation.
I am attaching a patch by Thomas Gleixner which adds a kernel
command line parameter to set the defauilt IRQ affinity mask. Could
you please integrate this in your tree for the next Linaro release?
I've been using this patch for sometime now and it doesn't introduce
any regressions. There is a possibility that this patch will make it
upstream via the RT patches in the near future but in the meanwhile,
we'd like to carry this patch as well.
Cheers,
Punit
>From 52a7d44f58a262e166575abc57aa0bd3bfc8cfbb Mon Sep 17 00:00:00 2001
From: Thomas Gleixner <tglx(a)linutronix.de>
Date: Fri, 25 May 2012 16:59:47 +0200
Subject: [PATCH] genirq: Add default affinity mask command line option
If we isolate CPUs, then we don't want random device interrupts on
them. Even w/o the user space irq balancer enabled we can end up with
irqs on non boot cpus.
Allow to restrict the default irq affinity mask.
Signed-off-by: Thomas Gleixner <tglx(a)linutronix.de>
---
Documentation/kernel-parameters.txt | 9 +++++++++
kernel/irq/irqdesc.c | 21 +++++++++++++++++++--
2 files changed, 28 insertions(+), 2 deletions(-)
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 7d82468..00fedab 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -1164,6 +1164,15 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
See comment before ip2_setup() in
drivers/char/ip2/ip2base.c.
+ irqaffinity= [SMP] Set the default irq affinity mask
+ Format:
+ <cpu number>,...,<cpu number>
+ or
+ <cpu number>-<cpu number>
+ (must be a positive range in ascending order)
+ or a mixture
+ <cpu number>,...,<cpu number>-<cpu number>
+
irqfixup [HW]
When an interrupt is not handled search all handlers
for it. Intended to get systems with badly broken
diff --git a/kernel/irq/irqdesc.c b/kernel/irq/irqdesc.c
index 192a302..473b2b6 100644
--- a/kernel/irq/irqdesc.c
+++ b/kernel/irq/irqdesc.c
@@ -23,10 +23,27 @@
static struct lock_class_key irq_desc_lock_class;
#if defined(CONFIG_SMP)
+static int __init irq_affinity_setup(char *str)
+{
+ zalloc_cpumask_var(&irq_default_affinity, GFP_NOWAIT);
+ cpulist_parse(str, irq_default_affinity);
+ /*
+ * Set at least the boot cpu. We don't want to end up with
+ * bugreports caused by random comandline masks
+ */
+ cpumask_set_cpu(smp_processor_id(), irq_default_affinity);
+ return 1;
+}
+__setup("irqaffinity=", irq_affinity_setup);
+
static void __init init_irq_default_affinity(void)
{
- alloc_cpumask_var(&irq_default_affinity, GFP_NOWAIT);
- cpumask_setall(irq_default_affinity);
+#ifdef CONFIG_CPUMASK_OFFSTACK
+ if (!irq_default_affinity)
+ zalloc_cpumask_var(&irq_default_affinity, GFP_NOWAIT);
+#endif
+ if (cpumask_empty(irq_default_affinity))
+ cpumask_setall(irq_default_affinity);
}
#else
static void __init init_irq_default_affinity(void)
--
1.7.9.5
Postmortem and lessons learned for Linaro's release 2013.04
https://wiki.linaro.org/Cycles/1304/Release/Review
Highlights and Key Successes
============================
http://www.linaro.org/downloads/1304http://wiki.linaro.org/Cycles/1304/Release#Release_Information
Blueprints
=========
The number of high or essential priority blueprints that missed the cycle:
Android 1 out of 5
Developer Platform 2 out of 4
Infrastructure 3 out of 5
Lava 4 out of 12
QA 2 out of 7
Total 12 out of 33
36% of high or essential priority blueprints scheduled for this cycle
were not delivered.
Total blueprints: 23 out of 52 missed the cycle.
High priority missed blueprints recap:
12.05: 19 out of 48, 39%
12.06: 13 out of 31, 42%
12.07: 14 out of 31, 45%
12.08: 6 out of 26, 23%
12.09: 9 out of 28, 32%
12.10: 15 out of 38, 39%
12.11: 7 out of 19, 37%
12.12: not available
13.01: 9 out of 28, 33%
13.02: 35 out of 69, 48%
13.03: 13 out of 29, 45%
* Not included is data from working groups and landing teams
Source:
https://docs.google.com/spreadsheet/ccc?key=0AjEaTwrvj1bidFVXb2RMYm9FOTNQTk…
--
David Zinman, Project Manager
Linaro.org | Open source software for ARM SoCs
Hi
OS: Ubuntu 12.04 4 bit
Board: Pandaboard Rev. B2
manifest download from https://releases.linaro.org/13.04/android/panda/
I have download the source using ./linaro_android_build_cmds.sh -t
source-manifest.xml
or
./linaro_android_build_cmds.sh -t Pinnded-mainfest
but i get these errors when i try to compile the source
target asm: libsimd <= external/jpeg/asm/armv7//jdcolor-armv7.S
external/jpeg/asm/armv7//jdcolor-armv7.S: Assembler messages:
external/jpeg/asm/armv7//jdcolor-armv7.S:160: Error: selected processor
does not support ARM mode `vdup.s16 Q4,D7[1]'
external/jpeg/asm/armv7//jdcolor-armv7.S:161: Error: selected processor
does not support ARM mode `vdup.s16 Q5,D7[2]'
external/jpeg/asm/armv7//jdcolor-armv7.S:166: Error: selected processor
does not support ARM mode `vdup.s32 Q0,D30[0]'
external/jpeg/asm/armv7//jdcolor-armv7.S:167: Error: selected processor
does not support ARM mode `vdup.s32 Q1,D30[1]'
external/jpeg/asm/armv7//jdcolor-armv7.S:168: Error: selected processor
does not support ARM mode `vdup.s32 Q2,D31[0]'
external/jpeg/asm/armv7//jdcolor-armv7.S:192: Error: selected processor
does not support ARM mode `vmovl.u8 Q9,D12'
external/jpeg/asm/armv7//jdcolor-armv7.S:193: Error: selected processor
does not support ARM mode `vmovl.u8 Q10,D14'
external/jpeg/asm/armv7//jdcolor-armv7.S:194: Error: selected processor
does not support ARM mode `vmovl.u8 Q11,D15'
external/jpeg/asm/armv7//jdcolor-armv7.S:199: Error: selected processor
does not support ARM mode `vmull.s16 Q12,D20,D6[0]'
[out/target/product/generic/obj/STATIC_LIBRARIES/libsimd_intermediates/asm/armv7//jdcolor-armv7.o]
Error 1
Dear linaro members
Now, i have accomplished running the model following the steps of Linaro Engineering: ARMv8 activity: http://www.linaro.org/engineering/armv8#tab1<http://www.linaro.org/engineering/armv8>.
So, i want to build arm64 kernel according to the steps of HowTo/BuildArm64Kernel.Then i use Foundatin_v8 with args such as linux-system-foundation.axf,vexpress64-openembedded_lam-armv8_20130320-274.img. But kernel cannot run correctly. The information is described as following.
[cid:image001.png@01CE41D7.50059400]
I also tried to create images and got sd.img. The result is also prompted above. The I tried to build kernel of linux-3.7rc1.Because some files of linux-3.6 don’t exist in linux-3.7rc1. So i copied the files of linux-3.6 to linux-3.7rc1 and completed the building. Then i use Foundation_v8 with
the new linux-system-foundation.axf. The result was that Foundation model(RTSM) cannot run. Meanwhile i cannot find the source code of Foundation model.
Now, i want to ask for help. For example: how to build arm64 kernel which can be downloaded from www.kernel.org(linux-3.8.tar.gz)<http://www.kernel.org(linux-3.8.tar.gz)/>, and let arm64 kernel can run on Foundation model. And where I can download the source code of Foundation model.
I hope linaro members who know how to solve the troubles above sincerely. Thanks!
Xiaoke Wu