Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

vc4-fkms-v3d slows down Xorg startup #149

Open
BigMuscle85 opened this issue Apr 18, 2019 · 2 comments
Open

vc4-fkms-v3d slows down Xorg startup #149

BigMuscle85 opened this issue Apr 18, 2019 · 2 comments

Comments

@BigMuscle85
Copy link

I reported in raspberry/firmware, but this is probably more related place. After enabling KMS fake driver (dtoverlay=vc4-fkms-v3d), the Xorg startup is much slower.

We are able to boot RPi3B+ (with 7" Pi Touch screen) into our GTK+2 application (from .xinitrc) in 4.5 secs with legacy driver, but after enabling fake KMS driver, the boot takes threetimes more time. The issue is not related to our application. It happens even where starting e.g. lxterminal. I can notice two delays in Xorg.0.log.

One short 800 ms delay directly when glamor driver loads:

[ 8.509] ABI class: X.Org ANSI C Emulation, version 0.4
[ 8.509] (II) glamor: OpenGL accelerated X.org driver based.
[ 9.394] (II) glamor: EGL version 1.4 (DRI2):
[ 9.443] (II) modeset(0): glamor initialized

One long delay at the end of the log:

[ 9.992] (II) This device may have been added with another device file.
[ 15.775] (II) modeset(0): Disabling kernel dirty updates, not required.

This second delay is random, sometimes is shorter, sometimes very long. I noticed that application started via .xinitrc is already running at this time ("ps aux" shows it) but its window is not visible on the screen until this "Disabling kernel updates" log message appears.

I also noticed that disabling HDMI output ("tvservice -o") increases this Xorg delay rapidly and it also takes a minutes to device restart (long time of black screen before device actually reboots after "sudo reboot"). No problem with legacy driver.

[ 5.333] (II) glamor: OpenGL accelerated X.org driver based.
[ 6.217] (II) glamor: EGL version 1.4 (DRI2):
[ 6.267] (II) modeset(0): glamor initialized
[ 13.910] (II) modeset(0): Output HDMI-1 has no monitor section
[ 13.910] (II) modeset(0): EDID for output HDMI-1
[ 13.910] (II) modeset(0): Printing probed modes for output HDMI-1
...
[ 13.916] (==) Depth 24 pixmap format is 32 bpp
[ 14.165] (==) modeset(0): Backing store enabled
[ 14.165] (==) modeset(0): Silken mouse enabled
[ 14.168] (II) modeset(0): RandR 1.2 enabled, ignore the following RandR disabled message.
[ 45.270] (II) modeset(0): [DRI2] Setup complete
[ 45.270] (II) modeset(0): [DRI2] DRI driver: vc4
[ 45.270] (II) modeset(0): [DRI2] VDPAU driver: vc4
[ 45.270] (--) RandR disabled
[ 45.295] (II) SELinux: Disabled on system
[ 45.312] (II) AIGLX: enabled GLX_MESA_copy_sub_buffer
[ 45.312] (II) AIGLX: enabled GLX_ARB_create_context
[ 45.312] (II) AIGLX: enabled GLX_ARB_create_context_profile
[ 45.312] (II) AIGLX: enabled GLX_EXT_create_context_es{,2}_profile
...
[ 45.556] (II) config/udev: Adding input device FT5406 memory based driver (/dev/input/mouse0)
[ 45.556] (II) No input driver specified, ignoring this device.
[ 45.556] (II) This device may have been added with another device file.
[ 76.630] (II) SYN_DROPPED event from "FT5406 memory based driver" - some input events have been lost.
[ 125.513] (II) modeset(0): Disabling kernel dirty updates, not required.

Application appears after 125 seconds since boot!

@anholt
Copy link
Owner

anholt commented Apr 19, 2019

fkms is a disgusting awful hack in the downstream tree. Does kms have the same issues?

(probably, I'm just not going to even pretend to support fkms if it's an issue there)

If the CPU is busy during the delays, you should probably try to use sysprof or perf to look into it.

@BigMuscle85
Copy link
Author

I tested VC4-KMS-V3D driver today and it seems to have the same issue. Xorg loads much slower than with generic driver.

[ 6.946] (II) Loading /usr/lib/xorg/modules/libglamoregl.so
[ 6.993] (II) Module glamoregl: vendor="X.Org Foundation"
[ 6.993] compiled for 1.19.2, module version = 1.0.0
[ 6.993] ABI class: X.Org ANSI C Emulation, version 0.4
[ 6.993] (II) glamor: OpenGL accelerated X.org driver based.
[ 7.926] (II) glamor: EGL version 1.4 (DRI2):
[ 7.978] (II) modeset(0): glamor initialized
[ 8.004] (II) modeset(0): Output HDMI-1 has no monitor section
[ 8.004] (II) modeset(0): Output Composite-1 has no monitor section
[ 8.029] (II) modeset(0): EDID for output HDMI-1
[ 8.029] (II) modeset(0): Manufacturer: DEL Model: f016 Serial#: 826486860
[ 8.029] (II) modeset(0): Year: 2010 Week: 31
[ 8.029] (II) modeset(0): EDID Version: 1.3
...
[ 8.038] (II) UnloadModule: "fbdev"
[ 8.038] (II) Unloading fbdev
[ 8.039] (II) UnloadSubModule: "fbdevhw"
[ 8.039] (II) Unloading fbdevhw
[ 8.039] (==) Depth 24 pixmap format is 32 bpp
[ 8.292] (==) modeset(0): Backing store enabled
[ 10.863] (==) modeset(0): Silken mouse enabled
[ 10.886] (II) modeset(0): RandR 1.2 enabled, ignore the following RandR disabled message.
[ 12.243] (II) modeset(0): [DRI2] Setup complete
[ 12.243] (II) modeset(0): [DRI2] DRI driver: vc4
[ 12.243] (II) modeset(0): [DRI2] VDPAU driver: vc4
[ 12.243] (--) RandR disabled
[ 12.267] (II) SELinux: Disabled on system
...
[ 12.678] (II) This device may have been added with another device file.
[ 13.717] (II) modeset(0): Disabling kernel dirty updates, not required.

But I cannot test how it behaves after disabling HDMI output ("tvservice -o"), because RPi touch display does not work with this driver so HDMI monitor needs to be connected.

lategoodbye pushed a commit that referenced this issue Oct 10, 2019
We do check for a bad block during namespace init and that use
region bad block list. We need to initialize the bad block
for volatile regions for this to work. We also observe a lockdep
warning as below because the lock is not initialized correctly
since we skip bad block init for volatile regions.

 INFO: trying to register non-static key.
 the code is fine but needs lockdep annotation.
 turning off the locking correctness validator.
 CPU: 2 PID: 1 Comm: swapper/0 Not tainted 5.3.0-rc1-15699-g3dee241c937e #149
 Call Trace:
 [c0000000f95cb250] [c00000000147dd84] dump_stack+0xe8/0x164 (unreliable)
 [c0000000f95cb2a0] [c00000000022ccd8] register_lock_class+0x308/0xa60
 [c0000000f95cb3a0] [c000000000229cc0] __lock_acquire+0x170/0x1ff0
 [c0000000f95cb4c0] [c00000000022c740] lock_acquire+0x220/0x270
 [c0000000f95cb580] [c000000000a93230] badblocks_check+0xc0/0x290
 [c0000000f95cb5f0] [c000000000d97540] nd_pfn_validate+0x5c0/0x7f0
 [c0000000f95cb6d0] [c000000000d98300] nd_dax_probe+0xd0/0x1f0
 [c0000000f95cb760] [c000000000d9b66c] nd_pmem_probe+0x10c/0x160
 [c0000000f95cb790] [c000000000d7f5ec] nvdimm_bus_probe+0x10c/0x240
 [c0000000f95cb820] [c000000000d0f844] really_probe+0x254/0x4e0
 [c0000000f95cb8b0] [c000000000d0fdfc] driver_probe_device+0x16c/0x1e0
 [c0000000f95cb930] [c000000000d10238] device_driver_attach+0x68/0xa0
 [c0000000f95cb970] [c000000000d1040c] __driver_attach+0x19c/0x1c0
 [c0000000f95cb9f0] [c000000000d0c4c4] bus_for_each_dev+0x94/0x130
 [c0000000f95cba50] [c000000000d0f014] driver_attach+0x34/0x50
 [c0000000f95cba70] [c000000000d0e208] bus_add_driver+0x178/0x2f0
 [c0000000f95cbb00] [c000000000d117c8] driver_register+0x108/0x170
 [c0000000f95cbb70] [c000000000d7edb0] __nd_driver_register+0xe0/0x100
 [c0000000f95cbbd0] [c000000001a6baa4] nd_pmem_driver_init+0x34/0x48
 [c0000000f95cbbf0] [c0000000000106f4] do_one_initcall+0x1d4/0x4b0
 [c0000000f95cbcd0] [c0000000019f499c] kernel_init_freeable+0x544/0x65c
 [c0000000f95cbdb0] [c000000000010d6c] kernel_init+0x2c/0x180
 [c0000000f95cbe20] [c00000000000b954] ret_from_kernel_thread+0x5c/0x68

Signed-off-by: Aneesh Kumar K.V <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Dan Williams <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants