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 Andrey,
I have got some important updates for Android's Interactive Governor.
These are already sent to Todd Poyner for inclusion into AOSP and
we are awaiting a response.
These changes are important for ARM big LITTLE platforms which
want multiple instances of a governor to be available for a multi
package system.
Until then, we want these patches to land into linux-linaro release via
my tree.
Below is what I did to generate this branch:
- Checked out: https://git.linaro.org/gitweb?p=people/jstultz/android.git;a=shortlog;h=ref…
- Merged v3.10-rc2 into it (As I had some cpufreq core patches included here)
- Applied my patches (8) over it
I am not able to generate a formal PULL request using 'git request-pull'
as 3.10-rc2 is not yet there in your tree.
Please pull git://git.linaro.org/arm/big.LITTLE/mp.git
ll-interactive-gov-updates
into linux-linaro.
--
Viresh
With this patch set we make use of cpu_do_idle to enter WFI mode,
many platform are not clearing the data buffer before WFI or
directly using the address instead of opcode. For the rest its good
to have a common approach.
Sanjay Singh Rawat (8):
ARM: EXYNOS: use generic cpu idle function for wfi
ARM: RealView: use generic cpu idle function for wfi
ARM: SPEAr: use generic cpu idle function for wfi
ARM: vexpress: use generic cpu idle function for wfi
ARM: zynq: use generic cpu idle function for wfi
ARM: ux500: use generic cpu idle function for wfi
ARM: msm: use generic cpu idle function for wfi
ARM: PRIMA2: use generic cpu idle function for wfi
arch/arm/mach-exynos/hotplug.c | 9 ++-------
arch/arm/mach-msm/hotplug.c | 9 ++-------
arch/arm/mach-prima2/hotplug.c | 4 ++--
arch/arm/mach-realview/hotplug.c | 9 ++-------
arch/arm/mach-spear/hotplug.c | 3 ++-
arch/arm/mach-ux500/hotplug.c | 5 +++--
arch/arm/mach-vexpress/hotplug.c | 3 ++-
arch/arm/mach-zynq/hotplug.c | 4 ++--
8 files changed, 17 insertions(+), 29 deletions(-)
--
1.7.9.5
also cc linaro kernel
Hi,
This patch will forward target residency information from the arm_big_little
driver to mcpm.
If multiple powerdown states are used, the vendor specific code will need a way to distinguish the intended c-state information.
I do not have TC2 hardware to verify this. Would someone be able to help
verify this change on TC2?
Thanks!
Sebastian
Sebastian Capella (1):
cpuidle: arm_big_little: route target residency to mcpm
drivers/cpuidle/arm_big_little.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
--
1.7.9.5
Greetings,
This wiki page:
https://wiki.linaro.org/Platform/DevPlatform/LinuxLinaroKernelSchedule
- is now tracking the linux-linaro kernel rebuilds for 13.05.
v3.9 release based linux-linaro-core-tracking (llct) rebuild has been
published, the tag is llct-20130502.0 . The 13.05 linux-linaro release
will be v3.10-rc3 based, but let's do one more v3.9 based kernel not to
miss the v3.9 release.
The next step is:
May 06: ll rebuild based on llct-20130502.0.
The last llct update for this cycle is scheduled on May 21,
The last linux-linaro update for this cycle is scheduled on May 23.
May 23 is the linux-linaro code freeze for 13.05 (only bug fixes allowed
after this date).
Thanks,
Andrey
This series patch begins the process of splitting ohci-platform up
into independent driver modules and add a name for the platform-private field.
Patch 1/2 separate ohci-platform into independent driver modules.
Patch 2/2 adds an ohci->priv field for private use by OHCI platform drivers.
Manjunath Goudar (2):
USB: OHCI: make ohci-platform a separate driver
USB: OHCI: add a name for the platform-private field
drivers/usb/host/Kconfig | 2 +-
drivers/usb/host/Makefile | 1 +
drivers/usb/host/ohci-hcd.c | 6 +--
drivers/usb/host/ohci-platform.c | 88 ++++++++++++++++++--------------------
drivers/usb/host/ohci.h | 3 ++
5 files changed, 47 insertions(+), 53 deletions(-)
--
1.7.9.5
Linaro Virtualization Team's Weekly Report - Weeks 20-22 2013
=============================================================
Starting from 28 May 2013, Christoffer Dall, an effective co-maintainer
of KVM ARMv7, Joined Linaro and stepped in as a Technical Lead for
Virtualization and gradual knowledge transfer from Geoff Levand is
taking place.
During the last three weeks (9 - 29 May 2013) the team has been working
on the following areas. More detailed information can be found on the
meeting reports Wiki page:
[https://wiki.linaro.org/LEG/Engineering/Virtualization/TeamMeetingReports].
Ongoing work
------------
* BOOTLOADER HYP MODE SUPPORT FOR ARMv7
[http://cards.linaro.org/browse/CARD-361]
by Andre Przywara
* implement HYP command to let u-boot switch into HYP mode
[http://cards.linaro.org/browse/VIRT-71]
by Andre Przywara
Working on:
- preparing another release of patches.
* rebase existing Versatile Express patches against upstream u-boot
[http://cards.linaro.org/browse/VIRT-70]
Done:
- completed - patches are upstream.
* HYP mode support for Arndale board
[http://cards.linaro.org/browse/VIRT-81]
by Christoffer Dall
To be done:
- analysis of the outstanding not upstreamed patches for
Arndale that are needed to implement proper HYP mode
support.
* ARMv7 KVM GUEST MIGRATION
[http://cards.linaro.org/browse/CARD-363]
by Peter Maydell and Andre Przywara
* QEMU: implement full cp15 sync with kernel
[http://cards.linaro.org/browse/VIRT-49]
by Peter Maydell
Done:
- last bits of patch cleanup complete
- realized that KVM migration can be tested without any
timer or vgic patches; did so and sent first version of
patches out to qemu-devel
* QEMU: fix cp15 register reset
[http://cards.linaro.org/browse/VIRT-50]
by Peter Maydell
Done:
- VIRT-49 patches on their own break reset handling for the
KVM case, so we need to include VIRT-50 work in the same
patchset. Fortunately it turned out to be a small
extension; patch done and tested, and submitted as part of
the VIRT-49 patchset.
* QEMU: test migration
[http://cards.linaro.org/browse/VIRT-55]
by Peter Maydell
Working on:
- started to draft basic notes on what we want to test:
https://wiki.linaro.org/PeterMaydell/MigrationTesting
* kernel: agree on a data structure to describe timer state
[http://cards.linaro.org/browse/VIRT-42]
* kernel: implement save and restore of timer state in kernel
[http://cards.linaro.org/browse/VIRT-43]
by Andre Przywara
Done:
- got feedback from Marc Zyngier and Peter Maydell.
- produced new version, sent for review.
* kernel: agree on a data structure to hold GIC state
[http://cards.linaro.org/browse/VIRT-44]
by Christoffer Dall
Working on:
- Investigating, taking the task from Andre.
* add some basic unit testing bits to LAVA
[http://cards.linaro.org/browse/VIRT-79]
by Christoffer Dall
Working on:
- Investigating, taking the task from Andre.
* ARMv8 KVM QEMU prototype
[http://cards.linaro.org/browse/CARD-221]
by john Rigby -> Peter Maydell
* Add arm64 mach-virt system model skeleton
[http://cards.linaro.org/browse/VIRT-53]
* Add kvm guest creation and launching of armv8/mach-virt
[http://cards.linaro.org/browse/VIRT-56]
Done:
- ARMv8 guest boots on an ARMv8 host running on Foundation
Model.
Working on:
- Finishing the implementation work.
- Transferring the code and knowledge to Peter Maydell.
- Leaving Linaro/Canonical.
* KVM ARMV8 SMP HARDWARE BRING-UP
[http://cards.linaro.org/browse/CARD-555]
by Anup Patel and Pranavkumar Sawargaonkar
Done:
- ARM32 Guest (UP) working on v8 Foundation Model.
- ARM64 Guest (UP) works on APM Board (SMP). No issues seen so
far for ARM64 Guest (UP) on SMP host.
Working on:
- Submit remaining patches.
- Try ARM32 Guest (UP) on APM Board (UP).
- Prepare for KVM ARMv8 on HW demo at LCE13.
* XEN - MULTI-PLATFORM ARMV7 BINARIES
[http://cards.linaro.org/browse/CARD-560]
by Jullien Grall
Done:
- Completely upstream.
Working on:
- Card close out.
* CI Bring-up: Xen
[http://cards.linaro.org/browse/CARD-561]
by Jullien Grall
Working on:
- Starting.
* CI BRING UP: KVM ARMv7
[http://cards.linaro.org/browse/CARD-233]
by Riku Voipio
Working on:
- Card close out.
--
Best Regards,
Serge Broslavsky <serge.broslavsky(a)linaro.org>
Project Manager, Linaro
M: +37129426328 IRC: ototo Skype: serge.broslavsky
http://linaro.org | Open source software for ARM SoCs
This series of patches begins the process of splitting ohci-hcd up into
a core library module and independent pci driver modules.
Patch 1/3 prepares the way by exporting a few functions from ohci-hcd
and adding a new mechanism for platform-specific drivers to initialize
their hc_driver structures. This deserves to be done in the core
because almost all of the entries in these structures are pure
boilerplate -- practically none of the drivers need to override more
than three of the standard core values.
Change from V7 to V8
ohci_hcd_init() is called by ohci_setup() to make generic ohci
initialization in all ohci drivers.
Patch 2/3 is part of separating the ohci pci host controller
driver from ohci-hcd host code.
Moved sb800_prefetch() function from ohci-pci.c to pci-quirks.c file
and EXPORTed, this is part of the effort to move the ohci pci related
code to generic pci code.
Change from V7 to V8
no change.
Patch 3/3 separate out ohci-pci into independent driver modules.
Change from V7 to V8
USB_OHCI_HCD_PCI symbol no longer dependence on STB03xxx, PPC_MPC52xx and
USB_OHCI_HCD_PPC_OF that's what removed.
Manjunath Goudar (3):
USB: OHCI: prepare to make ohci-hcd a library module
USB: OHCI: Generic changes to make ohci-pci a separate driver
USB: OHCI: make ohci-pci a separate driver
drivers/usb/host/Kconfig | 6 +-
drivers/usb/host/Makefile | 3 +
drivers/usb/host/ohci-hcd.c | 134 ++++++++++++++++++++++++++----------
drivers/usb/host/ohci-hub.c | 1 -
drivers/usb/host/ohci-pci.c | 151 ++++++++++++-----------------------------
drivers/usb/host/ohci-q.c | 6 +-
drivers/usb/host/ohci.h | 17 +++++
drivers/usb/host/pci-quirks.c | 13 ++++
drivers/usb/host/pci-quirks.h | 2 +
9 files changed, 184 insertions(+), 149 deletions(-)
--
1.7.9.5