Bug 107183

Summary: Enabling Glamor takes half a second
Product: xorg Reporter: Paul Menzel <pmenzel+bugs.freedesktop.org>
Component: Server/GeneralAssignee: Xorg Project Team <xorg-team>
Status: RESOLVED MOVED QA Contact: Xorg Project Team <xorg-team>
Severity: normal    
Priority: medium CC: pmenzel+bugs.freedesktop.org
Version: git   
Hardware: Other   
OS: All   
Whiteboard:
i915 platform: i915 features:
Attachments:
Description Flags
X.Org X Server 1.20.0 log
none
Output of `strace -tt -f startx`
none
X.Org X Server 1.20.0 log run under strace none

Description Paul Menzel 2018-07-10 22:24:30 UTC
Created attachment 140548 [details]
X.Org X Server 1.20.0 log

The X.Org X Server start up takes well over a second on an ASRock E350M1.

Debian Sid/unstable with Linux 4.18-rc4+ is used.

Looking at the log, there is half a second delay right below.

```
[    78.639] 
X.Org X Server 1.20.0
X Protocol Version 11, Revision 0
[…]
[    78.796] (II) Module glamoregl: vendor="X.Org Foundation"
[    78.796] 	compiled for 1.20.0, module version = 1.0.1
[    78.796] 	ABI class: X.Org ANSI C Emulation, version 0.4
[    79.294] (II) RADEON(0): glamor X acceleration enabled on AMD PALM (DRM 2.50.0 / 4.18.0-rc4-00832-g217000c98815, LLVM 6.0.1)
[…]
```
Comment 1 Michel Dänzer 2018-07-11 07:27:32 UTC
FWIW, this only takes a few milliseconds on my systems. You'd have to profile where the time is spent on your system, but it's more likely somewhere between glamor and Mesa / LLVM than in the kernel.
Comment 2 Paul Menzel 2018-07-11 09:45:06 UTC
(In reply to Michel Dänzer from comment #1)
> FWIW, this only takes a few milliseconds on my systems.

Thank you for testing that. Could you please list the details for one of these systems (hardware, Linux version, X server versions, …)?

> You'd have to profile where the time is spent on your system, but it's more
> likely somewhere between glamor and Mesa / LLVM than in the kernel.

Interesting. Is there a debug switch for the module glamoregl or do I need to use something like `perf` or `oprofile`?
Comment 3 Chris Wilson 2018-07-11 10:05:34 UTC
Fwiw, a few years ago, dlopen("libGL.so") took on the order of a second on a laptop HDD, which could be eliminated by prelinking. It might worth checking the exported symbol tables (objdump -T ?) to see if they are unnecessarily cumbersome.
Comment 4 Paul Menzel 2018-07-11 11:39:37 UTC
I tested this with an older Intel based Dell OptiPlex 7010, also with Debian Sid/unstable (Linux 4.17.3-1, and xserver-xorg-core 2:1.20.0-3) and an HDD – the other system has an SSD, the delay is with 1.8 seconds even bigger.

```
[    26.041] (II) modeset(0): Creating default Display subsection in Screen section
        "Default Screen Section" for depth/fbbpp 24/32
[    26.041] (==) modeset(0): Depth 24, (==) framebuffer bpp 32
[    26.041] (==) modeset(0): RGB weight 888
[    26.041] (==) modeset(0): Default visual is TrueColor
[    26.041] (II) Loading sub module "glamoregl"
[    26.041] (II) LoadModule: "glamoregl"
[    26.068] (II) Loading /usr/lib/xorg/modules/libglamoregl.so
[    26.253] (II) Module glamoregl: vendor="X.Org Foundation"
[    26.253]    compiled for 1.20.0, module version = 1.0.1
[    26.253]    ABI class: X.Org ANSI C Emulation, version 0.4
[    28.009] (II) modeset(0): glamor X acceleration enabled on Mesa DRI Intel(R) Ivybridge Desktop 
[    28.009] (II) modeset(0): glamor initialized
```

Looking at the messages though, *loalding* the module takes 200 ms. “Running it” takes long. 

Do you want me to change the component to *xorg*?

```
$ objdump -T /usr/lib/xorg/modules/libglamoregl.so

/usr/lib/xorg/modules/libglamoregl.so:     file format elf64-x86-64

DYNAMIC SYMBOL TABLE:
0000000000000000      D  *UND*	0000000000000000              miPolyArc
0000000000000000      D  *UND*	0000000000000000              XNFstrdup
0000000000000000      D  *UND*	0000000000000000              CreateSolidPicture
0000000000000000      DO *UND*	0000000000000000              epoxy_glBlendFunc
0000000000000000      DO *UND*	0000000000000000              epoxy_glXMakeCurrent
0000000000000000      D  *UND*	0000000000000000              drmPrimeHandleToFD
0000000000000000      DO *UND*	0000000000000000              epoxy_glGetIntegerv
0000000000000000      DO *UND*	0000000000000000              epoxy_glUniform1fv
0000000000000000      DO *UND*	0000000000000000              epoxy_glGenTextures
0000000000000000      D  *UND*	0000000000000000              miFillPolygon
0000000000000000      DO *UND*	0000000000000000              epoxy_glBufferStorage
0000000000000000      D  *UND*	0000000000000000              fbPutImage
0000000000000000      D  *UND*	0000000000000000              pixman_image_create_bits
0000000000000000      DO *UND*	0000000000000000              epoxy_eglTerminate
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.2.5 close
0000000000000000      D  *UND*	0000000000000000              lastGLContext
0000000000000000      DO *UND*	0000000000000000              epoxy_glDebugMessageCallback
0000000000000000      D  *UND*	0000000000000000              miImageText16
0000000000000000      D  *UND*	0000000000000000              miRenderColorToPixel
0000000000000000      DO *UND*	0000000000000000              epoxy_glDisableVertexAttribArray
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.2.5 roundf
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.2.5 ioctl
0000000000000000      D  *UND*	0000000000000000              fbGetImage
0000000000000000      D  *UND*	0000000000000000              GetGlyphs
0000000000000000      DF *UND*	0000000000000000              gbm_bo_get_offset
0000000000000000      DO *UND*	0000000000000000              epoxy_glDeleteFramebuffers
0000000000000000      DO *UND*	0000000000000000              epoxy_glReadPixels
0000000000000000      D  *UND*	0000000000000000              serverClient
0000000000000000      DF *UND*	0000000000000000              epoxy_is_desktop_gl
0000000000000000      D  *UND*	0000000000000000              drmGetMagic
0000000000000000      D  *UND*	0000000000000000              CompositePicture
0000000000000000      D  *UND*	0000000000000000              miChangeGC
0000000000000000      D  *UND*	0000000000000000              fbCreateGC
0000000000000000  w   D  *UND*	0000000000000000              __gmon_start__
0000000000000000      DF *UND*	0000000000000000              gbm_bo_import
0000000000000000      D  *UND*	0000000000000000              pixman_image_get_stride
0000000000000000      DO *UND*	0000000000000000              epoxy_glXGetCurrentContext
0000000000000000      DO *UND*	0000000000000000              epoxy_glXGetCurrentDisplay
0000000000000000      DF *UND*	0000000000000000              epoxy_has_gl_extension
0000000000000000      D  *UND*	0000000000000000              fbPolySegment
0000000000000000      D  *UND*	0000000000000000              miCopyClip
0000000000000000      D  *UND*	0000000000000000              DamageRegionAppend
0000000000000000      DO *UND*	0000000000000000              epoxy_glTexParameteri
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.7   __isoc99_sscanf
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.2.5 exit
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.2.5 __assert_fail
0000000000000000      DO *UND*	0000000000000000              epoxy_glGetString
0000000000000000      D  *UND*	0000000000000000              ErrorF
0000000000000000      D  *UND*	0000000000000000              PictureMatchFormat
0000000000000000      DO *UND*	0000000000000000              epoxy_glTexImage2D
0000000000000000      DO *UND*	0000000000000000              epoxy_glUnmapBuffer
0000000000000000      D  *UND*	0000000000000000              miHandleExposures
0000000000000000      DF *UND*	0000000000000000              gbm_bo_get_stride
0000000000000000      DF *UND*	0000000000000000              epoxy_has_egl_extension
0000000000000000      D  *UND*	0000000000000000              LogMessageVerb
0000000000000000      D  *UND*	0000000000000000              fbValidateGC
0000000000000000      DO *UND*	0000000000000000              epoxy_glGetError
0000000000000000      D  *UND*	0000000000000000              RegionCreate
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.2.5 malloc
0000000000000000      DO *UND*	0000000000000000              epoxy_glGetUniformLocation
0000000000000000      DO *UND*	0000000000000000              epoxy_glBindTexture
0000000000000000      D  *UND*	0000000000000000              GetScratchGC
0000000000000000      DO *UND*	0000000000000000              epoxy_glTextureBarrierNV
0000000000000000      D  *UND*	0000000000000000              fbDestroyPixmap
0000000000000000      D  *UND*	0000000000000000              miDestroyClip
0000000000000000      DO *UND*	0000000000000000              epoxy_glUniform1i
0000000000000000      DO *UND*	0000000000000000              epoxy_glUniform2f
0000000000000000      D  *UND*	0000000000000000              LogMessage
0000000000000000      D  *UND*	0000000000000000              fbCopy1toN
0000000000000000      D  *UND*	0000000000000000              fbFillSpans
0000000000000000      D  *UND*	0000000000000000              fbTriangles
0000000000000000      DO *UND*	0000000000000000              epoxy_eglGetProcAddress
0000000000000000      D  *UND*	0000000000000000              miPolyText8
0000000000000000      DO *UND*	0000000000000000              epoxy_glVertexAttribDivisor
0000000000000000      D  *UND*	0000000000000000              RegionEmptyData
0000000000000000      D  *UND*	0000000000000000              pixman_image_get_data
0000000000000000      DO *UND*	0000000000000000              epoxy_glDeleteProgram
0000000000000000      D  *UND*	0000000000000000              XNFasprintf
0000000000000000      DO *UND*	0000000000000000              epoxy_glBindVertexArray
0000000000000000      DO *UND*	0000000000000000              epoxy_glMapBufferRange
0000000000000000      D  *UND*	0000000000000000              miDestroyGC
0000000000000000      D  *UND*	0000000000000000              xf86DrvMsg
0000000000000000      D  *UND*	0000000000000000              miComputeCompositeRegion
0000000000000000      D  *UND*	0000000000000000              miPushPixels
0000000000000000      D  *UND*	0000000000000000              Xasprintf
0000000000000000      D  *UND*	0000000000000000              dixRegisterPrivateKey
0000000000000000      DO *UND*	0000000000000000              epoxy_glDrawArraysInstanced
0000000000000000      D  *UND*	0000000000000000              xf86ScreenToScrn
0000000000000000  w   D  *UND*	0000000000000000              _ITM_deregisterTMCloneTable
0000000000000000      D  *UND*	0000000000000000              xf86Info
0000000000000000      DO *UND*	0000000000000000              epoxy_glLinkProgram
0000000000000000      D  *UND*	0000000000000000              miPolyPoint
0000000000000000      DO *UND*	0000000000000000              epoxy_eglCreateImageKHR
0000000000000000      D  *UND*	0000000000000000              fbReplicatePixel
0000000000000000      D  *UND*	0000000000000000              miPolyText16
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.2.5 free
0000000000000000      D  *UND*	0000000000000000              RegionValidate
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.2.5 strlen
0000000000000000  w   D  *UND*	0000000000000000              _ITM_registerTMCloneTable
0000000000000000      DO *UND*	0000000000000000              epoxy_glGetProgramiv
0000000000000000      D  *UND*	0000000000000000              pixman_region_intersect
0000000000000000      DF *UND*	0000000000000000              epoxy_gl_version
0000000000000000      D  *UND*	0000000000000000              RegionAppend
0000000000000000      D  *UND*	0000000000000000              fbCopyNtoN
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.8   __asprintf_chk
0000000000000000      D  *UND*	0000000000000000              pixman_region_init_rects
0000000000000000      D  *UND*	0000000000000000              fbPadPixmap
0000000000000000      DO *UND*	0000000000000000              epoxy_glGetShaderInfoLog
0000000000000000      DF *UND*	0000000000000000              gbm_bo_get_plane_count
0000000000000000      DO *UND*	0000000000000000              epoxy_glDebugMessageControl
0000000000000000      D  *UND*	0000000000000000              fbPixmapToRegion
0000000000000000  w   DF *UND*	0000000000000000  GLIBC_2.2.5 __cxa_finalize
0000000000000000      D  *UND*	0000000000000000              miPolyGlyphBlt
0000000000000000      D  *UND*	0000000000000000              miPolyFillArc
0000000000000000      D  *UND*	0000000000000000              RegionEmptyBox
0000000000000000      DO *UND*	0000000000000000              epoxy_glCreateProgram
0000000000000000      DF *UND*	0000000000000000              gbm_bo_get_modifier
0000000000000000      D  *UND*	0000000000000000              DamageDestroy
0000000000000000      D  *UND*	0000000000000000              CreatePicture
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.2.5 floorf
0000000000000000      D  *UND*	0000000000000000              ValidatePicture
0000000000000000      D  *UND*	0000000000000000              pixman_region_fini
0000000000000000      DO *UND*	0000000000000000              epoxy_glBindAttribLocation
0000000000000000      DO *UND*	0000000000000000              epoxy_glTexSubImage2D
0000000000000000      DO *UND*	0000000000000000              epoxy_glCompileShader
0000000000000000      D  *UND*	0000000000000000              miImageGlyphBlt
0000000000000000      DO *UND*	0000000000000000              epoxy_glBufferData
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.2.5 strstr
0000000000000000      D  *UND*	0000000000000000              pixman_image_unref
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.2.5 strcat
0000000000000000      DO *UND*	0000000000000000              epoxy_glShaderSource
0000000000000000      D  *UND*	0000000000000000              FreePicture
0000000000000000      D  *UND*	0000000000000000              pixman_image_composite
0000000000000000      D  *UND*	0000000000000000              miTrapezoidBounds
0000000000000000      D  *UND*	0000000000000000              miCompositeRects
0000000000000000      DO *UND*	0000000000000000              epoxy_glUniform4f
0000000000000000      D  *UND*	0000000000000000              fbGetSpans
0000000000000000      D  *UND*	0000000000000000              XNFvasprintf
0000000000000000      D  *UND*	0000000000000000              pixman_rasterize_trapezoid
0000000000000000      DO *UND*	0000000000000000              epoxy_glGenFramebuffers
0000000000000000      DO *UND*	0000000000000000              epoxy_glCheckFramebufferStatus
0000000000000000      DO *UND*	0000000000000000              epoxy_eglInitialize
0000000000000000      DF *UND*	0000000000000000              gbm_bo_create_with_modifiers
0000000000000000      D  *UND*	0000000000000000              miDoCopy
0000000000000000      D  *UND*	0000000000000000              fbCreatePixmap
0000000000000000      DF *UND*	0000000000000000              drmGetDeviceNameFromFd2
0000000000000000      DO *UND*	0000000000000000              epoxy_glBindFragDataLocationIndexed
0000000000000000      DO *UND*	0000000000000000              epoxy_eglDestroyImageKHR
0000000000000000      D  *UND*	0000000000000000              DamageDamageRegion
0000000000000000      DO *UND*	0000000000000000              epoxy_eglCreateContext
0000000000000000      D  *UND*	0000000000000000              fbCopyNto1
0000000000000000      DO *UND*	0000000000000000              epoxy_glUniform4ui
0000000000000000      D  *UND*	0000000000000000              dri3_screen_init
0000000000000000      DO *UND*	0000000000000000              epoxy_glUniform4fv
0000000000000000      D  *UND*	0000000000000000              pixman_region_translate
0000000000000000      D  *UND*	0000000000000000              xfont2_allocate_font_private_index
0000000000000000      D  *UND*	0000000000000000              pixman_region_contains_point
0000000000000000      DO *UND*	0000000000000000              epoxy_glDeleteVertexArrays
0000000000000000      DO *UND*	0000000000000000              epoxy_glDeleteBuffers
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.2.5 getenv
0000000000000000      DO *UND*	0000000000000000              epoxy_glUniform2fv
0000000000000000      DO *UND*	0000000000000000              epoxy_glEGLImageTargetTexture2DOES
0000000000000000      DO *UND*	0000000000000000              epoxy_glGenBuffers
0000000000000000      DO *UND*	0000000000000000              epoxy_glFinish
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.2.5 __errno_location
0000000000000000      DO *UND*	0000000000000000              epoxy_glViewport
0000000000000000      D  *UND*	0000000000000000              pixman_f_transform_from_pixman_transform
0000000000000000      DO *UND*	0000000000000000              epoxy_glFramebufferTexture2D
0000000000000000      D  *UND*	0000000000000000              serverGeneration
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.2.5 strdup
0000000000000000      DO *UND*	0000000000000000              epoxy_glFlush
0000000000000000      D  *UND*	0000000000000000              miSyncShmScreenInit
0000000000000000      D  *UND*	0000000000000000              miPolyRectangle
0000000000000000      D  *UND*	0000000000000000              FreeScratchGC
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.2.5 sincos
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.4   __stack_chk_fail
0000000000000000      D  *UND*	0000000000000000              miCopyGC
0000000000000000      DF *UND*	0000000000000000              gbm_create_device
0000000000000000      DO *UND*	0000000000000000              epoxy_glMapBuffer
0000000000000000      DO *UND*	0000000000000000              epoxy_glGetProgramivARB
0000000000000000      DO *UND*	0000000000000000              epoxy_glObjectLabel
0000000000000000      D  *UND*	0000000000000000              miSyncGetScreenFuncs
0000000000000000      D  *UND*	0000000000000000              pixman_region_subtract
0000000000000000      DO *UND*	0000000000000000              epoxy_glDrawArrays
0000000000000000      D  *UND*	0000000000000000              ChangeGC
0000000000000000      D  *UND*	0000000000000000              fbPolyFillRect
0000000000000000      DF *UND*	0000000000000000              gbm_bo_get_handle
0000000000000000      D  *UND*	0000000000000000              PictureScreenPrivateKeyRec
0000000000000000      D  *UND*	0000000000000000              fbSetSpans
0000000000000000      DF *UND*	0000000000000000              gbm_bo_get_fd
0000000000000000      DF *UND*	0000000000000000              gbm_device_destroy
0000000000000000      D  *UND*	0000000000000000              miPolylines
0000000000000000      DO *UND*	0000000000000000              epoxy_glBindFramebuffer
0000000000000000      DO *UND*	0000000000000000              epoxy_eglBindAPI
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.2.5 calloc
0000000000000000      D  *UND*	0000000000000000              fbGetScreenPrivateKey
0000000000000000      DO *UND*	0000000000000000              epoxy_eglGetDisplay
0000000000000000      D  *UND*	0000000000000000              DamageUnregister
0000000000000000      D  *UND*	0000000000000000              pixman_region_copy
0000000000000000      D  *UND*	0000000000000000              fbAddTraps
0000000000000000      DO *UND*	0000000000000000              epoxy_glDrawElements
0000000000000000      DO *UND*	0000000000000000              epoxy_glScissor
0000000000000000      DO *UND*	0000000000000000              epoxy_glDeleteTextures
0000000000000000      D  *UND*	0000000000000000              XNFalloc
0000000000000000      DF *UND*	0000000000000000  LIBBSD_0.7  reallocarray
0000000000000000      DO *UND*	0000000000000000              epoxy_glXGetCurrentDrawable
0000000000000000      D  *UND*	0000000000000000              ValidateGC
0000000000000000      D  *UND*	0000000000000000              DamageRegionProcessPending
0000000000000000      D  *UND*	0000000000000000              miImageText8
0000000000000000      D  *UND*	0000000000000000              DamageRegister
0000000000000000      DO *UND*	0000000000000000              epoxy_glBindBuffer
0000000000000000      DF *UND*	0000000000000000              gbm_bo_create
0000000000000000      DO *UND*	0000000000000000              epoxy_glVertexAttribPointer
0000000000000000      D  *UND*	0000000000000000              pixman_f_transform_point
0000000000000000      D  *UND*	0000000000000000              miPolySegment
0000000000000000      DF *UND*	0000000000000000              gbm_bo_get_stride_for_plane
0000000000000000      DF *UND*	0000000000000000              gbm_bo_get_height
0000000000000000      DO *UND*	0000000000000000              epoxy_glPixelStorei
0000000000000000      DO *UND*	0000000000000000              epoxy_glDisable
0000000000000000      DO *UND*	0000000000000000              epoxy_glAttachShader
0000000000000000      DO *UND*	0000000000000000              epoxy_glEnableVertexAttribArray
0000000000000000      DO *UND*	0000000000000000              epoxy_glEnable
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.2.5 realloc
0000000000000000      D  *UND*	0000000000000000              drmAuthMagic
0000000000000000      D  *UND*	0000000000000000              pixman_region_rectangles
0000000000000000      DO *UND*	0000000000000000              epoxy_glGenVertexArrays
0000000000000000      DO *UND*	0000000000000000              epoxy_glGetShaderiv
0000000000000000      D  *UND*	0000000000000000              xfont2_font_set_private
0000000000000000      DO *UND*	0000000000000000              epoxy_eglMakeCurrent
0000000000000000      D  *UND*	0000000000000000              PixmapWidthPaddingInfo
0000000000000000      D  *UND*	0000000000000000              miCopyRegion
0000000000000000      D  *UND*	0000000000000000              miChangeClip
0000000000000000      D  *UND*	0000000000000000              DamageCreate
0000000000000000      D  *UND*	0000000000000000              FatalError
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.2.5 sqrt
0000000000000000      D  *UND*	0000000000000000              RegionDestroy
0000000000000000      D  *UND*	0000000000000000              xf86AllocateScrnInfoPrivateIndex
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.14  memcpy
0000000000000000      DO *UND*	0000000000000000              epoxy_glUseProgram
0000000000000000      DO *UND*	0000000000000000              epoxy_glDeleteShader
0000000000000000      DO *UND*	0000000000000000              epoxy_glCreateShader
0000000000000000      DO *UND*	0000000000000000              epoxy_glActiveTexture
0000000000000000      DF *UND*	0000000000000000  GLIBC_2.2.5 open
0000000000000000      D  *UND*	0000000000000000              MakeAtom
0000000000000000      DO *UND*	0000000000000000              epoxy_glGetProgramInfoLog
0000000000000000      DO *UND*	0000000000000000              epoxy_glUniform1f
0000000000000000      DO *UND*	0000000000000000              epoxy_glUniformMatrix3fv
0000000000000000      DF *UND*	0000000000000000              gbm_bo_destroy
0000000000000000      DO *UND*	0000000000000000              epoxy_glLogicOp
0000000000000000      D  *UND*	0000000000000000              fbComposite
000000000000be00 g    DF .text	0000000000000073  Base        glamor_destroy_gc
00000000002314a0 g    DO .data	0000000000000018  Base        glamoreglModuleData
000000000000be80 g    DF .text	00000000000001b6  Base        glamor_validate_gc
00000000000090d0 g    DF .text	000000000000016d  Base        glamor_set_pixmap_texture
0000000000025304 g    DF .fini	0000000000000000  Base        _fini
0000000000009520 g    DF .text	00000000000009f5  Base        glamor_init
0000000000009fe0 g    DF .text	0000000000000050  Base        glamor_set_drawable_modifiers_func
0000000000007300 g    DF .text	0000000000000089  Base        glamor_gbm_bo_from_pixmap
0000000000022d30 g    DF .text	0000000000000072  Base        glamor_change_window_attributes
0000000000007ef0 g    DF .text	00000000000000f7  Base        glamor_egl_fd_name_from_pixmap
0000000000009f20 g    DF .text	0000000000000002  Base        glamor_fini
0000000000006d80 g    DF .text	000000000000000c  Base        glamor_get_formats
00000000000237a0 g    DF .text	00000000000000b1  Base        glamor_pixmap_exchange_fbos
0000000000008920 g    DF .text	000000000000022d  Base        glamor_close_screen
0000000000007900 g    DF .text	0000000000000088  Base        glamor_pixmap_from_fd
000000000000a0b0 g    DF .text	000000000000011e  Base        glamor_fds_from_pixmap
00000000000085f0 g    DF .text	00000000000001b3  Base        glamor_xv_init
000000000000bc10 g    DF .text	0000000000000110  Base        glamor_copy_window
0000000000008b50 g    DF .text	0000000000000406  Base        glamor_create_pixmap
0000000000009240 g    DF .text	0000000000000060  Base        glamor_get_pixmap_texture
0000000000007990 g    DF .text	0000000000000116  Base        glamor_egl_exchange_buffers
0000000000009f30 g    DF .text	0000000000000053  Base        glamor_enable_dri3
0000000000007610 g    DF .text	000000000000005f  Base        glamor_egl_create_textured_screen
000000000000a390 g    DF .text	0000000000000076  Base        glamor_finish
0000000000009030 g    DF .text	000000000000009f  Base        glamor_set_pixmap_type
000000000000a1d0 g    DF .text	00000000000000d6  Base        glamor_fd_from_pixmap
0000000000009310 g    DF .text	0000000000000076  Base        glamor_block_handler
00000000002317f0 g    D  .bss	0000000000000000  Base        __bss_start
00000000000070f0 g    DF .text	000000000000020b  Base        glamor_egl_create_textured_pixmap_from_gbm_bo
0000000000231a98 g    D  .bss	0000000000000000  Base        _end
0000000000009f90 g    DF .text	000000000000004f  Base        glamor_supports_pixmap_import_export
0000000000008070 g    DF .text	00000000000000e4  Base        glamor_egl_screen_init
00000000000074f0 g    DF .text	0000000000000116  Base        glamor_egl_create_textured_pixmap
0000000000007670 g    DF .text	0000000000000287  Base        glamor_pixmap_from_fds
0000000000006d90 g    DF .text	000000000000000c  Base        glamor_get_modifiers
00000000000070c0 g    DF .text	0000000000000024  Base        glamor_egl_get_gbm_device
00000000000084e0 g    DF .text	0000000000000006  Base        glamor_egl_init_textured_pixmap
0000000000008160 g    DF .text	0000000000000375  Base        glamor_egl_init
000000000000c410 g    DF .text	000000000000006b  Base        glamor_create_gc
000000000000a2b0 g    DF .text	0000000000000022  Base        glamor_shareable_fd_from_pixmap
00000000002317f0 g    D  .data	0000000000000000  Base        _edata
0000000000007e10 g    DF .text	00000000000000d2  Base        glamor_egl_fds_from_pixmap
000000000000a2e0 g    DF .text	00000000000000af  Base        glamor_name_from_pixmap
0000000000007390 g    DF .text	0000000000000157  Base        glamor_back_pixmap_from_fd
00000000000087b0 g    DF .text	0000000000000026  Base        glamor_destroy_pixmap
0000000000005fb0 g    DF .init	0000000000000000  Base        _init
000000000000a030 g    DF .text	0000000000000074  Base        glamor_get_drawable_modifiers
```

```
$ lspci -nn
00:00.0 Host bridge [0600]: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor DRAM Controller [8086:0150] (rev 09)
00:02.0 VGA compatible controller [0300]: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller [8086:0162] (rev 09)
00:14.0 USB controller [0c03]: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller [8086:1e31] (rev 04)
00:16.0 Communication controller [0780]: Intel Corporation 7 Series/C216 Chipset Family MEI Controller #1 [8086:1e3a] (rev 04)
00:19.0 Ethernet controller [0200]: Intel Corporation 82579LM Gigabit Network Connection [8086:1502] (rev 04)
00:1a.0 USB controller [0c03]: Intel Corporation 7 Series/C216 Chipset Family USB Enhanced Host Controller #2 [8086:1e2d] (rev 04)
00:1b.0 Audio device [0403]: Intel Corporation 7 Series/C216 Chipset Family High Definition Audio Controller [8086:1e20] (rev 04)
00:1d.0 USB controller [0c03]: Intel Corporation 7 Series/C216 Chipset Family USB Enhanced Host Controller #1 [8086:1e26] (rev 04)
00:1f.0 ISA bridge [0601]: Intel Corporation Q77 Express Chipset LPC Controller [8086:1e47] (rev 04)
00:1f.2 SATA controller [0106]: Intel Corporation 7 Series/C210 Series Chipset Family 6-port SATA Controller [AHCI mode] [8086:1e02] (rev 04)
00:1f.3 SMBus [0c05]: Intel Corporation 7 Series/C216 Chipset Family SMBus Controller [8086:1e22] (rev 04)
```
Comment 5 Paul Menzel 2018-07-12 17:34:51 UTC
Michel, Chris, I just noticed, that the delay is only there when starting the X.Org X server for the first time. Could you please make sure, that your systems are rebooted when trying this?

(During my tests I do not use a graphical login manager, and just log in on a terminal and execute `exec startx`.)
Comment 6 Paul Menzel 2018-07-13 18:06:55 UTC
Created attachment 140630 [details]
Output of `strace -tt -f startx`

I traced the startup with strace. Of course it’s slower that way, but there are several delays in there. Also, a lot of libraries are loaded seeming to take some time.

Here are the biggest “delays” I found.

278   18:30:40.366920 stat64("/usr/lib/xorg/modules/libglamoregl.so/", 0xbfa34efc) = -1 ENOTDIR (Not a directory)

278   18:30:40.390224 stat64("/usr/lib/xorg/modules/libglamoregl.so/", 0xbfa34efc) = -1 ENOTDIR (Not a directory)

278   18:30:40.666582 write(4, "(II) Loading sub module \"glamore"..., 36) = 36

278   18:30:40.671594 openat(AT_FDCWD, "/usr/lib/xorg/modules/libglamoregl.so", O_RDONLY|O_CLOEXEC) = 12

278   18:30:40.712147 write(4, "(II) Module glamoregl: vendor=\"X"..., 49) = 49

278   18:30:40.790228 openat(AT_FDCWD, "/lib/i386-linux-gnu/libncurses.so.6", O_RDONLY|O_CLOEXEC) = 12
278   18:30:40.790515 read(12, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0 ^\0\0004\0\0\0"..., 512) = 512
278   18:30:40.791695 fstat64(12, {st_mode=S_IFREG|0644, st_size=169280, ...}) = 0
278   18:30:40.792144 mmap2(NULL, 172472, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 12, 0) = 0xb1fc6000
278   18:30:40.792444 mmap2(0xb1fef000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 12, 0x28000) = 0xb1fef000
278   18:30:40.794183 close(12)         = 0
278   18:30:40.802657 mprotect(0xb2015000, 8192, PROT_READ) = 0
278   18:30:40.804863 mprotect(0xb1fef000, 4096, PROT_READ) = 0
278   18:30:40.807819 mprotect(0xb204c000, 4096, PROT_READ) = 0
278   18:30:40.820933 mprotect(0xb21c5000, 24576, PROT_READ) = 0
→ 278   18:30:41.011259 mprotect(0xb5fc9000, 2596864, PROT_READ) = 0
278   18:30:41.012249 mprotect(0xb62c1000, 4096, PROT_READ) = 0
278   18:30:41.013082 mprotect(0xb62cd000, 4096, PROT_READ) = 0
278   18:30:41.013659 mprotect(0xb62d7000, 4096, PROT_READ) = 0
278   18:30:41.014194 mprotect(0xb62e7000, 4096, PROT_READ) = 0
→ 278   18:30:41.022997 mprotect(0xb6efd000, 286720, PROT_READ) = 0
278   18:30:41.033617 futex(0xb6264f6c, FUTEX_WAKE_PRIVATE, 2147483647) = 0
→ 278   18:30:41.094631 time(NULL)        = 1531499441 (2018-07-13T18:30:41+0200)
278   18:30:41.095152 openat(AT_FDCWD, "/sys/devices/system/cpu/online", O_RDONLY|O_CLOEXEC) = 12
278   18:30:41.095808 read(12, "0-1\n", 8192) = 4
278   18:30:41.096267 close(12)         = 0
278   18:30:41.160224 brk(0x12c6000)    = 0x12c6000
278   18:30:41.167493 munmap(0xb72a9000, 71088) = 0
→ 278   18:30:41.171051 getrandom("\x0a\xce\xa9\x46", 4, GRND_NONBLOCK) = 4
278   18:30:41.172796 openat(AT_FDCWD, "/etc/drirc", O_RDONLY|O_LARGEFILE) = 12

278   18:30:41.199927 openat(AT_FDCWD, "/home/kodi/.drirc", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file or directory)
278   18:30:41.204172 fstat64(12, {st_mode=S_IFCHR|0660, st_rdev=makedev(226, 0), ...}) = 0

278   18:30:41.208846 ioctl(13, DRM_IOCTL_RADEON_INFO, 0xbfa3661c) = 0
278   18:30:41.211268 ioctl(13, DRM_IOCTL_RADEON_INFO, 0xbfa3661c) = 0

278   18:30:41.233996 stat64("/home/kodi/.cache/mesa_shader_cache", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
278   18:30:41.248494 openat(AT_FDCWD, "/home/kodi/.cache/mesa_shader_cache/index", O_RDWR|O_CREAT|O_LARGEFILE|O_CLOEXEC, 0644) = 14
278   18:30:41.249985 fstat64(14, {st_mode=S_IFREG|0644, st_size=1310728, ...}) = 0

278   18:30:41.269060 ioctl(11, DRM_IOCTL_GET_CAP, 0xbfa3671c) = 0
278   18:30:41.275748 brk(0x12e7000)    = 0x12e7000
278   18:30:41.280202 openat(AT_FDCWD, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 14
278   18:30:41.280815 fstat64(14, {st_mode=S_IFREG|0644, st_size=71088, ...}) = 0

278   18:30:41.335827 munmap(0xb72ab000, 65536) = 0
278   18:30:41.335940 brk(0x1324000)    = 0x1324000
278   18:30:41.349009 ioctl(13, DRM_IOCTL_RADEON_GEM_CREATE, 0xbfa366f0) = 0
278   18:30:41.349819 getpid()          = 278
278   18:30:41.350429 mmap2(NULL, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7f87000
278   18:30:41.357399 futex(0xb715a8b8, FUTEX_WAKE_PRIVATE, 2147483647) = 0
278   18:30:41.358249 getpid()          = 278
Comment 7 Paul Menzel 2018-07-13 18:07:54 UTC
Created attachment 140631 [details]
X.Org X Server 1.20.0 log run under strace
Comment 8 GitLab Migration User 2018-12-13 22:40:15 UTC
-- GitLab Migration Automatic Message --

This bug has been migrated to freedesktop.org's GitLab instance and has been closed from further activity.

You can subscribe and participate further through the new bug through this link to our GitLab instance: https://gitlab.freedesktop.org/xorg/xserver/issues/543.

Use of freedesktop.org services, including Bugzilla, is subject to our Code of Conduct. How we collect and use information is described in our Privacy Policy.