rtems_bsd_initialize() in POSIX_Init and qemu-system-i386

Karel Gardas karel.gardas at centrum.cz
Mon Sep 28 19:53:52 UTC 2020


Could you be so kind and test attached patch? It basically reverses
priority of PCI accessors and helps a lot my Thinkpad T400/T500 where
BIOS accessors are slow and I/O are fast. I've been hit by the issue not
on network, but while BSP tries to initialize its console -- it tries to
find all the possible PCI UARTs and this hurt time-wise a lot.

Please report if this helps or not. I've not submitted the patch as all
my other machines do not provide PCI BIOS in RTEMS friendly way and
RTEMS is using PCI I/O accessors by default on them -- so speed access.

I've neither tested on qemu with nic so your report will be appreciated
here.

Thanks,
Karel

On 9/28/20 9:43 PM, junkes wrote:
> I have a problem with rtems_bsd_initialize() in POSIX_Init() and qemu.
> 
> call of
>     sc = rtems_bsd_initialize();
>     assert(sc == RTEMS_SUCCESSFUL);
> always takes about 45 seconds until it is finished.
> 
> The output of
> 
> nexus0: <RTEMS Nexus device>
> pcib0 pcibus 0 on motherboard
> pci0: <PCI bus> on pcib0
> pci0: <bridge, HOST-PCI> at device 0.0 (no driver attached)
> pci0: <bridge, PCI-ISA> at device 1.0 (no driver attached)
> pci0: <mass storage, ATA> at device 1.1 (no driver attached)
> pci0: <bridge> at device 1.3 (no driver attached)
> pci0: <display, VGA> at device 2.0 (no driver attached)
> em0: <Intel(R) PRO/1000 Network Connection> port 0xc000-0xc03f mem
> 0xfebc0000-0xfebdffff irq 11 at device 3.0 on pci0
> 
> comes very fast, but then the system is "frozen" for about 45 seconds.
> Then this output appears:
> 
> info: em0: Ethernet address: 0e:b0:ba:5e:ba:11
> cpu0 on motherboard
> 
> The setting of
>     default_network_set_self_prio(RTEMS_MAXIMUM_PRIORITY - 1U);
> seems to have no influence. I also did not understand the setting of
> priorities.
> 
> -------------------------------------------------------------------------------
> 
>                               CPU USAGE BY THREAD
> ------------+----------------------------------------+---------------+---------
> 
>  ID         | NAME                                   | SECONDS       |
> PERCENT
> ------------+----------------------------------------+---------------+---------
> 
>  0x09010001 | IDLE                                   |     46.042360 | 
> 98.800
>  0x0a010001 | TIME                                   |      0.000067 |  
> 0.000
>  0x0a010002 | IRQS                                   |      0.000969 |  
> 0.002
>  0x0a010003 | swi6: task queu                        |      0.000000 |  
> 0.000
>  0x0a010004 | config_0                               |      0.000000 |  
> 0.000
>  0x0a010005 | swi5: fast task                        |      0.000000 |  
> 0.000
>  0x0a010006 | kqueue_ctx task                        |      0.000000 |  
> 0.000
>  0x0a010007 | thread taskq                           |      0.000000 |  
> 0.000
>  0x0a010008 | swi6: Giant tas                        |      0.000000 |  
> 0.000
>  0x0a010009 | swi1: netisr 0                         |      0.000000 |  
> 0.000
>  0x0a01000a | if_io_tqg_0                            |      0.000000 |  
> 0.000
>  0x0a01000b | if_config_tqg_0                        |      0.000000 |  
> 0.000
>  0x0a01000c | softirq_0                              |      0.000000 |  
> 0.000
>  0x0b010001 |                                        |      0.561695 |  
> 1.205
>  0x0b010003 |                                        |      0.001552 |  
> 0.003
> ------------+----------------------------------------+---------------+---------
> 
>  TIME SINCE LAST CPU USAGE RESET IN SECONDS:                        
> 46.608912
> -------------------------------------------------------------------------------
> 
> Task control block(Nr.: 1)
> task control block at 0x006b33c0
> task ID: 0x09010001
> name_32: -- ELDI --
> ID=0x09010001 name=IDLE
> 
> --Info (hpj)-- task Nr: 1
>  id=151060481, name=IDLE, prio = 255
> -----
> Task control block(Nr.: 2)
> task control block at 0x006ab8a0
> task ID: 0x0a010001
> name_32: -- EMIT --
> ID=0x0a010001 name=TIME
> 
> --Info (hpj)-- task Nr: 2
>  id=167837697, name=TIME, prio = 98
> -----
> Task control block(Nr.: 3)
> task control block at 0x006abc38
> task ID: 0x0a010002
> name_32: -- SQRI --
> ID=0x0a010002 name=IRQS
> 
> --Info (hpj)-- task Nr: 3
>  id=167837698, name=IRQS, prio = 96
> -----
> Task control block(Nr.: 4)
> task control block at 0x006abfd0
> task ID: 0x0a010003
> name_32: -- DSB_ --
> ID=0x0a010003 name=_BSD
> 
> --Info (hpj)-- task Nr: 4
>  id=167837699, name=swi6: task queu, prio = 100
> -----
> Task control block(Nr.: 5)
> task control block at 0x006ac368
> task ID: 0x0a010004
> name_32: -- DSB_ --
> ID=0x0a010004 name=_BSD
> 
> --Info (hpj)-- task Nr: 5
>  id=167837700, name=config_0, prio = 100
> -----
> Task control block(Nr.: 6)
> task control block at 0x006ac700
> task ID: 0x0a010005
> name_32: -- DSB_ --
> ID=0x0a010005 name=_BSD
> 
> --Info (hpj)-- task Nr: 6
>  id=167837701, name=swi5: fast task, prio = 100
> -----
> Task control block(Nr.: 7)
> task control block at 0x006aca98
> task ID: 0x0a010006
> name_32: -- DSB_ --
> ID=0x0a010006 name=_BSD
> 
> --Info (hpj)-- task Nr: 7
>  id=167837702, name=kqueue_ctx task, prio = 100
> -----
> Task control block(Nr.: 8)
> task control block at 0x006ace30
> task ID: 0x0a010007
> name_32: -- DSB_ --
> ID=0x0a010007 name=_BSD
> 
> --Info (hpj)-- task Nr: 8
>  id=167837703, name=thread taskq, prio = 100
> -----
> Task control block(Nr.: 9)
> task control block at 0x006ad1c8
> task ID: 0x0a010008
> name_32: -- DSB_ --
> ID=0x0a010008 name=_BSD
> 
> --Info (hpj)-- task Nr: 9
>  id=167837704, name=swi6: Giant tas, prio = 100
> -----
> Task control block(Nr.: 10)
> task control block at 0x006ad560
> task ID: 0x0a010009
> name_32: -- DSB_ --
> ID=0x0a010009 name=_BSD
> 
> --Info (hpj)-- task Nr: 10
>  id=167837705, name=swi1: netisr 0, prio = 100
> -----
> Task control block(Nr.: 11)
> task control block at 0x006ad8f8
> task ID: 0x0a01000a
> name_32: -- DSB_ --
> ID=0x0a01000a name=_BSD
> 
> --Info (hpj)-- task Nr: 11
>  id=167837706, name=if_io_tqg_0, prio = 100
> -----
> Task control block(Nr.: 12)
> task control block at 0x006adc90
> task ID: 0x0a01000b
> name_32: -- DSB_ --
> ID=0x0a01000b name=_BSD
> 
> --Info (hpj)-- task Nr: 12
>  id=167837707, name=if_config_tqg_0, prio = 100
> -----
> Task control block(Nr.: 13)
> task control block at 0x006ae028
> task ID: 0x0a01000c
> name_32: -- DSB_ --
> ID=0x0a01000c name=_BSD
> 
> --Info (hpj)-- task Nr: 13
>  id=167837708, name=softirq_0, prio = 100
> -----
> Task control block(Nr.: 14)
> task control block at 0x006a3d20
> task ID: 0x0b010001
> name_32: --  --
> ID=0x0b010001 name=
> 
> --Info (hpj)-- task Nr: 14
>  id=184614913, name=, prio = 30
> -----
> Task control block(Nr.: 15)
> task control block at 0x006a4450
> task ID: 0x0b010003
> name_32: --  --
> ID=0x0b010003 name=
> 
> --Info (hpj)-- task Nr: 15
>  id=184614915, name=, prio = 229
> -----
> :
> qemu is called with:
> 
> qemu-system-i386 -m 64 -no-reboot -serial stdio -display none -net
> nic,model=e1000,macaddr=0e:b0:ba:5e:ba:11 -net user,restrict=yes -append
> "--video=off --console=/dev/com1" -kernel libComTestHarness
> 
> Heinz
> 
> _______________________________________________
> users mailing list
> users at rtems.org
> http://lists.rtems.org/mailman/listinfo/users

-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-pc386-BSP-try-first-PCI-I-O-interface-instead-of-PCI.patch
Type: text/x-patch
Size: 1738 bytes
Desc: not available
URL: <http://lists.rtems.org/pipermail/users/attachments/20200928/2559ea73/attachment.bin>


More information about the users mailing list