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
I have tried this:
$ make CROSS_COMPILE=arm-linux-gnueabihf- distclean
$ make CROSS_COMPILE=arm-linux-gnueabihf- zynq_zed_config
$ make CROSS_COMPILE=arm-linux-gnueabihf-
and that failed with:
arm-linux-gnueabihf-ld.bfd: error:
/opt/gcc-linaro-arm-linux-gnueabihf-4.8-2013.09_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/libgcc.a(_udivdi3.o)
uses VFP register arguments, u-boot does not
arm-linux-gnueabihf-ld.bfd: failed to merge target specific data of file
/opt/gcc-linaro-arm-linux-gnueabihf-4.8-2013.09_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/libgcc.a(_udivdi3.o)
So I tried this:
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zynq_zed_config
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
and that failed differently:
arm-linux-gnueabihf-ld.bfd: error:
/opt/gcc-linaro-arm-linux-gnueabihf-4.8-2013.09_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/libgcc.a(_udivdi3.o)
uses VFP register arguments, u-boot does not
arm-linux-gnueabihf-ld.bfd: failed to merge target specific data of file
/opt/gcc-linaro-arm-linux-gnueabihf-4.8-2013.09_linux/bin/../lib/gcc/arm-linux-gnueabihf/4.8.2/libgcc.a(_udivdi3.o)
The README.txt file that came with the toolchain said:
"In addition to the default configuration, a basic ARMv4T runtime is
included for use when building baremetal projects such as Linux and
u-boot for earlier architectures. To use it, pass the following flags
to GCC:
-marm -march=armv4t -mfloat-abi=soft"
So I tried this:
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- "CFLAGS=-marm
-march=armv4t -mfloat-abi=soft" distclean
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- "CFLAGS=-marm
-march=armv4t -mfloat-abi=soft" zynq_zed_config
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- "CFLAGS=-marm
-march=armv4t -mfloat-abi=soft"
and that failed in autoconf.
Looking more carefully at the Makefile, I think maybe I should set
OBJCFLAGS instead of CFLAGS. That gave me the same error as my first
attempt. Not surprising, since OBJCFLAGS doesn't seem to be used.
FWIW. I'm using the u-boot I cloned from commit
f12f87e205d5cd1c75a0d93770de54ffb8b14343 from git://
git.xilinx.com/u-boot-xlnx.git.
Any tips where I should start looking for clues?
Thanks.
--wpd
Hello,
Does anyone have some good instructions on how to run our kernel(s) on the
Samsung Chromebook? I'm especially interested in the tools needed to
prepare the kernel image and write it to the SD card.
Thanks,
/Cip
Hello,
This series adds Aarch64 support and makes some minor tweaks.
The first two patches of this series add Aarch64 support to
libhugetlbfs. (Starting from 3.11-rc1, the Linux Kernel supports
HugeTLB and THP for ARM64).
Some general changes are also made:
PROT_NONE is added to the mprotect unit test, and the
linkhuge_rw test is enabled for 64 bit where there aren't any
custom ldscripts.
The final patch clears up the superfluous ARM ld.hugetlbfs
HTLB_LINK logic.
Any comments would be appreciated.
Cheers,
--
Steve
Steve Capper (5):
Aarch64 support.
Aarch64 unit test fixes.
Add PROT_NONE to the mprotect test.
Add linkhuge_rw test to 64 bit && !CUSTOM_LDSCIPTS
Cleanup ARM ld.hugetlbfs HTLB_LINK logic
Makefile | 7 +++++++
ld.hugetlbfs | 7 +------
sys-aarch64elf.S | 34 ++++++++++++++++++++++++++++++++++
tests/Makefile | 2 +-
tests/icache-hygiene.c | 7 ++++---
tests/mprotect.c | 6 ++++++
tests/mremap-expand-slice-collision.c | 2 +-
7 files changed, 54 insertions(+), 11 deletions(-)
create mode 100644 sys-aarch64elf.S
--
1.8.1.4
Is anybody working on (or has already worked on) using Linaro tools &
builds on the Zynq SoC from Xilinx?
More specifically, is anybody working on using the tools & builds on the
microZed board?
If so, may I collaborate with you? If not, would folks on this list mind
giving me some "getting started" pointers...
What toolchain would you recommend? Does it matter that the processor is a
Cortex-A9 with NEON™ & Single / Double Precision Floating Point?
In the absence of any other guidance, I'm going to proceed down a path of
trying the linaro-toolchain-binaries-4.8 on my Ubuntu box to compile the
latest U-Boot & Kernel from the Xilinx git repos, attempt to construct a
Hardware Pack for the microZed board, and see what happens when I run the
Ubuntu Nano build on that.
Thanks for any tips or advice you may offer.
--wpd
Hi,
I have downloaded the image for Pandaboard, from
http://releases.linaro.org/13.09/ubuntu/panda/panda-raring_developer_201309…
I unpack it and copy it to a SD card using Windows Image writer.
When the Pandaboard boots, the boot hangs temporarily (circa one minute)
after having printed
[ 6.891754] init: ureadahead main process (1106) terminated with status 5
[ 7.596893] EXT4-fs (mmcblk0p2): re-mounted. Opts: errors=remount-ro
After the minute or so has passed, the printout resumes, and one sees
* Setting sensors limits [
OK ]
* Loading cpufreq kernel modules...
and then the login proceeds with success.
When I look in the dmesg printout I see
[ 6.143127] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data
mode. Opts: (null)
[ 6.891754] init: ureadahead main process (1106) terminated with status 5
[ 7.596893] EXT4-fs (mmcblk0p2): re-mounted. Opts: errors=remount-ro
[ 8.069091] udevd[1193]: starting version 175
ing ok
[ 10.653472] usb 1-1.1: link qh8-0001/eca3e3c0 start 2 [1/0 us]
[ 10.653472] smsc95xx 1-1.1:1.0 eth0: hardware isn't capable of remote
wakeup
[ 10.655517] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
[ 10.904968] init: udev-fallback-graphics main process (1398) terminated
with status 1
[ 11.121673] init: plymouth main process (1107) killed by ABRT signal
[ 11.128204] init: plymouth-splash main process (1436) terminated with
status 2
[ 131.484619] init: alsa-restore main process (1490) terminated with
status 99
[ 132.043243] init: plymouth-stop pre-start process (1601) terminated with
status 1
[ 132.072296] init: tty1 main process (1602) killed by TERM signal
Could it be that some service is started that takes a lot of time?
Have you seen this before?
Any hints are appreciated!
Best regards,
Ola
Trusty is now open for development, with syncs from unstable currently running.
The development version starts with a new port and with minor updates to the
toolchain and some transitions.
- GCC 4.8 was updated to the GCC 4.8.2 release and the GCC Linaro
4.8-2013-10 release. Binutils is built from the 2.24 release branch.
- An glibc update will follow later during this cycle.
- Perl was updated from v5.14 to to v5.18.
- Berkeley DB was updated from v5.1 to v5.3.
- boost was updated from v1.53 to v1.54.
Please check your uploads in a trusty chroot, don't just test in a saucy
environment. See [1] how to setup such a development chroot.
Trusty is the first development version that sees the AArch64 (arm64) port from
the start of the cycle. Buildd resources are still somewhat limited compared to
the other architectures, so please ask first on #ubuntu-devel before giving back
a build for this port (e.g. compiler complaining about an unreproducible ICE).
[1] https://wiki.ubuntu.com/DebootstrapChroot
Hi,
We are working on userspace aarch64 and aarch32 apps and we are trying
to run 32/64 mode app simultaneously.
Is there any multi-arch support for mixed rootfs (has linkers/libs of
both arm and arm64)?
--
Thanks,
-Zhou
Hi,
Where can I find the git repo that contains the kernel sources for the
Pandaboard 13.09 Ubuntu image?
The Linaro wiki mentions the kernel/linux-linaro-3.1.git repo:
https://wiki.linaro.org/Resources/HowTo/KernelDeploy
I didn't see a kernel/linux-linaro-3.11.git repo, so I'm
guessing kernel/linux-linaro-stable.git is the repo I want?
To reconstruct the .config that was used to build the kernel, I suppose I
should 'cat debug.conf linaro-base.conf omap4.conf panda.conf
ubuntu-minimal.conf'?
Thanks for your help.
Best,
Arun