Planned SMP Improvements

Gedare Bloom gedare at rtems.org
Wed Feb 3 01:39:25 UTC 2016


8) Write up your experience as a new Tutorial on our Wiki. ;)

On Tue, Feb 2, 2016 at 4:53 AM, Sebastian Huber
<sebastian.huber at embedded-brains.de> wrote:
> On 01/02/16 14:39, Darshit Shah wrote:
>>>
>>> >Maybe we can implement
>>> >
>>> >Improve the SMP scheduler with arbitrary processor affinity support
>>> >https://devel.rtems.org/ticket/2510
>>> >
>>> >as part of this years GSoC.
>>> >
>>
>> I've already mentioned that I'd be interested in picking this up as a
>> potential project. However, the entire implementation may not be
>> possible in a single summer. It is rather complex, and while a naive
>> implementation may be possible to write, we would want something more
>> efficient. I'm hoping for some pointers on where I should start
>> looking for a better understanding of the codebase.
>
>
> In order to get familiar with the scheduler, do the following.
>
> 0. Use a Linux system for development (use a Linux VM on Windows)
>
> 1. Install the RTEMS 4.12 ARM tool chain via the RSB
>
> 2. Build the realview_pbx_a9_qemu_smp BSP with
>
> configure --target=arm-rtems4.12 --prefix=/opt/rtems-4.12
> --enable-rtemsbsp=realview_pbx_a9_qemu_smp --enable-maintainer-mode
> --enable-tests --enable-smp
>
> 3. Install a recent Qemu
>
> 4. Open two shell windows and go the the following subdirectory in the build
> tree
>
> arm-rtems4.12/c/realview_pbx_a9_qemu_smp/testsuites/smptests/smp01
>
> 5. In one start Qemu via
>
> qemu-system-arm -net none -nographic -M realview-pbx-a9 -m 256M -smp 2 -s -S
> -kernel *.exe
>
> 6. In the other start GDB via
>
> arm-rtems4.12-gdb *.exe
>
> 7. Example GDB session, interesting functions are _Thread_Set_state() and
> _Thread_Clear_state(). Just follow them in the debugger to figure out how
> the scheduler works.
>
> GNU gdb (GDB) 7.9
> Copyright (C) 2015 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later
> <http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
> and "show warranty" for details.
> This GDB was configured as "--host=x86_64-linux-gnu --target=arm-rtems4.12".
> Type "show configuration" for configuration details.
> For bug reporting instructions, please see:
> <http://www.gnu.org/software/gdb/bugs/>.
> Find the GDB manual and other documentation resources online at:
> <http://www.gnu.org/software/gdb/documentation/>.
> For help, type "help".
> Type "apropos word" to search for commands related to "word"...
> Reading symbols from smpload01.exe...done.
> (gdb) tar remote :1234
> Remote debugging using :1234
> bsp_start_vector_table_end () at
> rtems-4.12/c/src/lib/libbsp/arm/realview-pbx-a9/../shared/start/start.S:142
> 142             mrc     p15, 0, r0, c0, c0, 5
> (gdb) monitor system_reset
> (gdb) load
> Loading section .start, size 0x800 lma 0x100000
> Loading section .text, size 0x278e4 lma 0x100800
> Loading section .init, size 0xc lma 0x1280e4
> Loading section .fini, size 0xc lma 0x1280f0
> Loading section .rodata, size 0x1121 lma 0x1280fc
> Loading section .ARM.exidx, size 0x8 lma 0x129220
> Loading section .eh_frame, size 0x4 lma 0x129228
> Loading section .init_array, size 0x4 lma 0x12922c
> Loading section .fini_array, size 0x4 lma 0x129230
> Loading section .jcr, size 0x4 lma 0x129234
> Loading section .rtemsroset, size 0x20 lma 0x129238
> Loading section .data, size 0x97c lma 0x20a000
> Start address 0x100040, load size 170961
> Transfer rate: 18550 KB/sec, 1799 bytes/write.
> (gdb) b _Thread_Set_state
> Breakpoint 1 at 0x11bba6: file
> rtems-4.12/c/src/../../cpukit/score/src/threadsetstate.c, line 39.
> (gdb) b _Thread_Clear_state
> Breakpoint 2 at 0x118092: file
> rtems-4.12/c/src/../../cpukit/score/src/threadclearstate.c, line 35.
> (gdb) c
> Continuing.
>
> Breakpoint 2, _Thread_Clear_state (the_thread=0x21a3e0, state=4294967295) at
> rtems-4.12/c/src/../../cpukit/score/src/threadclearstate.c:35
> 35        _Scheduler_Acquire( the_thread, &lock_context );
> (gdb) bt
> #0  _Thread_Clear_state (the_thread=0x21a3e0, state=4294967295) at
> rtems-4.12/c/src/../../cpukit/score/src/threadclearstate.c:35
> #1  0x0011bde0 in _Thread_Ready (the_thread=0x21a3e0) at
> ../../cpukit/../../../realview_pbx_a9_qemu_smp/lib/include/rtems/score/threadimpl.h:277
> #2  0x0011be38 in _Thread_Start (the_thread=0x21a3e0, entry=0x200f64) at
> rtems-4.12/c/src/../../cpukit/score/src/threadstart.c:34
> #3  0x0010f9d6 in rtems_task_start (id=167837697, entry_point=0x10f63f
> <_RTEMS_Global_construction>, argument=2150284) at
> rtems-4.12/c/src/../../cpukit/rtems/src/taskstart.c:67
> #4  0x0010f782 in _RTEMS_tasks_Initialize_user_tasks_body () at
> rtems-4.12/c/src/../../cpukit/rtems/src/taskinitusers.c:110
> #5  0x00120252 in _RTEMS_tasks_Initialize_user_tasks () at
> rtems-4.12/c/src/../../cpukit/rtems/src/tasks.c:229
> #6  0x00110728 in _API_extensions_Run_postdriver () at
> rtems-4.12/c/src/../../cpukit/score/src/apiext.c:47
> #7  0x001104ee in rtems_initialize_device_drivers () at
> rtems-4.12/c/src/../../cpukit/sapi/src/exinit.c:246
> #8  0x00110514 in rtems_initialize_executive () at
> rtems-4.12/c/src/../../cpukit/sapi/src/exinit.c:276
> #9  0x00101cfa in boot_card (cmdline=0x0) at
> rtems-4.12/c/src/lib/libbsp/arm/realview-pbx-a9/../../shared/bootcard.c:90
> #10 0x00100112 in bsp_vector_table_copy_done () at
> rtems-4.12/c/src/lib/libbsp/arm/realview-pbx-a9/../shared/start/start.S:279
> Backtrace stopped: previous frame identical to this frame (corrupt stack?)
> (gdb) del 2
> (gdb) c
> Continuing.
> [Switching to Thread 2]
>
> Breakpoint 1, _Thread_Set_state (the_thread=0x21a3e0, state=262144) at
> rtems-4.12/c/src/../../cpukit/score/src/threadsetstate.c:39
> 39        _Scheduler_Acquire( the_thread, &lock_context );
> (gdb) bt
> #0  _Thread_Set_state (the_thread=0x21a3e0, state=262144) at
> rtems-4.12/c/src/../../cpukit/score/src/threadsetstate.c:39
> #1  0x0010c43e in _Event_Seize (event_in=2147483648, option_set=0, ticks=0,
> event_out=0x24f96c, executing=0x21a3e0, event=0x21a5f8, wait_class=512,
> block_state=262144, lock_context=0x24f944)
>     at rtems-4.12/c/src/../../cpukit/rtems/src/eventseize.c:101
> #2  0x0010f080 in rtems_event_system_receive (event_in=2147483648,
> option_set=0, ticks=0, event_out=0x24f96c) at
> rtems-4.12/c/src/../../cpukit/rtems/src/systemeventreceive.c:52
> #3  0x00100b58 in rtems_event_transient_receive (option_set=0, ticks=0) at
> ../../../../../realview_pbx_a9_qemu_smp/lib/include/rtems/rtems/event.h:484
> #4  0x00101568 in test () at
> rtems-4.12/c/src/../../testsuites/smptests/smpload01/init.c:333
> #5  0x0010177a in Init (arg=2150284) at
> rtems-4.12/c/src/../../testsuites/smptests/smpload01/init.c:384
> #6  0x00118efa in _Thread_Entry_adaptor_numeric (executing=0x21a3e0) at
> rtems-4.12/c/src/../../cpukit/score/src/threadentryadaptornumeric.c:25
> #7  0x00121524 in _Thread_Handler () at
> rtems-4.12/c/src/../../cpukit/score/src/threadhandler.c:93
> #8  0x001214ce in _User_extensions_Thread_exitted (executing=0x1214cf
> <_Thread_Handler>) at
> ../../cpukit/../../../realview_pbx_a9_qemu_smp/lib/include/rtems/score/userextimpl.h:244
> #9  0x00001008 in ?? ()
> Backtrace stopped: previous frame identical to this frame (corrupt stack?)
> (gdb)
>
> If you are not familiar with the command line GDB, then I recommend to do a
> GDB tutorial first.
>
> --
> Sebastian Huber, embedded brains GmbH
>
> Address : Dornierstr. 4, D-82178 Puchheim, Germany
> Phone   : +49 89 189 47 41-16
> Fax     : +49 89 189 47 41-09
> E-Mail  : sebastian.huber at embedded-brains.de
> PGP     : Public key available on request.
>
> Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel



More information about the devel mailing list