Chromium und das böse Mausrad
18. April 2017 um 1:14 Uhr von Atari-Frosch
Mit Chromium bin ich eigentlich recht zufrieden. Er ist nicht so träge wie Firefox, und er tut zumindest so, als sei er eine freie Version von Google Chrome (daß er das nicht ist, merkt man unter anderem daran, daß ein neuer Tab unabänderlich die Startseite von Google anzeigt, obwohl als „Homepage“ was anderes eingetragen ist). Ich kann mir einen anständigen Ad-Blocker installieren, JavaScript per Plugin pro Site ein- oder ausschalten und zur besseren Lesbarkeit mancher Seiten (zumindest für mich) gibt's Binnen-I-Be-Gone. Achja, und HTTPS Everywhere läuft auch mit. Chromium ist recht flott und frißt mir auch das RAM nicht weg.
Aber zumindest auf meiner Installation hat Chromium ein Problem, und das seit dem Upgrade auf Jessie: Mitten im Betrieb scheint Chromium immer irgendwann plötzlich einzufrieren. Was ich bisher herausgefunden habe:
- Es passiert erst seit dem Upgrade von Debian Wheezy auf Debian Jessie.
- Es passiert mit fluxbox als Window-Manager genauso wie unter icewm.
- Es ist kein Crash, ergo gibt es keine Fehlermeldung oder Crash-ID. Nur das Neuzeichnen des Fensterinhalts (redraw) geht nicht mehr; in der Prozeßliste sieht alles normal aus.
- Es passiert immer, wenn ich viel mit dem Mausrad auf einer Website herumscrolle, und meistens mitten im Scroll-Vorgang.
- Es ist nicht von der gerade geöffneten Website abhängig, passiert also auf beliebigen Websites. Ich dachte ja zuerst, es hinge am Zusammenspiel mit einer WordPress-Installation (letztes Update) bzw. deren Plugins, aber das war's auch nicht gewesen.
- Es hängt passiert auch mit unterschiedlichen Mäusen (Logitech, Watson).
Den Window-Manager icewm verwende ich ja schon durchgehend seit 20 Jahren. Allerdings hat der nun wohl schon seit längerer Zeit kein echtes Update mehr bekommen und wird immer nur noch gegen die aktuellen libs neu compiliert. Da wäre es denkbar gewesen, daß sich da was nicht mehr verträgt, weil icewm einfach zu alt ist. Um icewm nun also als Fehlerquelle auszuschließen, installierte ich mir fluxbox. xfce4, den ich zuerst im Sinn gehabt hatte, ist leider massiv mit systemd verbandelt, und den habe ich ja #ausgründen von meinen Installationen verbannt. Und kaum hatte ich mich nach ein paar Tagen einigermaßen (und teils grummelnd) an die Veränderungen gewöhnt und mir ein paar Dinge angepaßt, passierte es wieder.
Es, das heißt: Chromium reagiert plötzlich auf gar nichts mehr; die anderen Fenster können noch neu zeichnen. Es genügt aber nicht, Chromium aus dem xterm heraus mit -9 zu killen – normales kill genügt nicht! –, nein, ich muß mich aus dem Window-Manager ausloggen und X11 neu starten. Versuche ich, Chromium ohne kompletten WM-Neustart wieder zu öffnen, geht nur der äußere Fensterrahmen auf, und darinnen passiert – nichts. Die Prozeßliste sagt mir dagegen ganz unschuldig, wat willste denn, der Chromium ist doch da?
Was in fluxbox anders lief als in icewm: Auch das xterm konnte keinen redraw mehr durchführen (XChat und icedove/Thunderbird dagegen waren hier wie auch unter icewm nicht betroffen). Ich hatte dann eben noch einen Restart aus dem Menü heraus versucht, aber es änderte nichts daran, daß ein Neustart von Chromium rein optisch beim Aufbau des äußeren Fensterrahmens endete. Auch da mußte ich komplett aus X11 raus und es neu starten.
Ich kann an dieser Stelle nicht sagen, wie das wäre, wenn ich einen grafischen Login zu X11 hätte; ich starte den immer mit startx, das heißt, wenn ich mich auslogge, falle ich auf die Textkonsole zurück, auf der ich vorher startx aufgerufen hatte.
Erst nach dem X11-Neustart kommt auch Chromium wieder sauber hoch und, da er ja mit kill -9 abgeschossen worden war, fragt er brav, ob er einen Restore durchführen soll. Und dann gehen auch alle Tabs mit ihren vorherigen Inhalten wieder auf und alles ist wieder da. Bis zum nächsten Mal.
Generell scheint dieser Fehler nicht ganz so neu zu sein. So fand ich diese Meldung im Bugtracker von Chromium von Februar 2014: Use of mouse scroll wheel causes hangs. Das kommt mir dann doch sehr bekannt vor. Allerdings half dem Einreicher dann am Schluß ein Update, sodaß von den Entwicklern ein WONTFIX zurückkam. Da war man bei Version 35.0.1883.0.
Meine aktuelle Version ist 57.0.2987.98 Built on 8.7, running on Debian 8.7 (64-bit). Ich meine, seit dem Upgrade auf Jessie hätte ich schon mindestens ein Update auf Chromium bekommen, das den Fehler jedoch nicht behoben hat.
Auf den Chemnitzer Linuxtagen letzten Monat hatte ich den Bug bei mehreren Leuten angesprochen, allein um mal herauszufinden, ob der so allgemein bekannt ist. Ein Mensch hatte mir zur Installation von compton geraten, einem Compositor, mit dem Hinweis, daß icewm sowas nicht hat (fluxbox und xfce4 bringen jeweils einen eigenen mit). Man hatte mir erklärt, daß dieses Stück Software dafür sorgt, daß Anweisungen, die an die CPU gehen, aber eigentlich an die GPU, also den Prozessor der Grafikkarte, gehen sollten, an die GPU quasi umgebogen werden, sodaß sie an der richtigen Stelle und damit schneller ausgeführt werden können. Ich installierte also compton, hatte beim ersten Mal den Eindruck, daß da tatsächlich Dinge schneller liefen, aber dann verflog der Eindruck wieder. Ich vermute, es genügte nicht, das Ding einfach zu installieren, ich hätte da vielleicht auch noch was konfigurieren müssen, denn er wird mir nirgends angezeigt, weder in der Prozeßliste noch in chrome://gpu.
Apropos, unter icewm sieht chrome://gpu bei mir so aus:
Graphics Feature Status
Canvas: Hardware accelerated
Flash: Hardware accelerated
Flash Stage3D: Hardware accelerated
Flash Stage3D Baseline profile: Hardware accelerated
Compositing: Hardware accelerated
Multiple Raster Threads: Disabled
Native GpuMemoryBuffers: Software only. Hardware acceleration disabled
Rasterization: Software only. Hardware acceleration disabled
Video Decode: Software only, hardware acceleration unavailable
Video Encode: Hardware accelerated
VPx Video Decode: Software only, hardware acceleration unavailable
WebGL: Hardware accelerated
WebGL2: Hardware accelerated
Driver Bug Workarounds
adjust_src_dst_region_for_blitframebuffer
clear_uniforms_before_first_program_use
count_all_in_varyings_packing
decode_encode_srgb_for_generatemipmap
disable_framebuffer_cmaa
disable_post_sub_buffers_for_onscreen_surfaces
disable_texture_storage
dont_remove_invariant_for_fragment_input
force_cube_map_positive_x_allocation
init_texture_max_anisotropy
regenerate_struct_names
remove_invariant_and_centroid_for_essl3
scalarize_vec_and_mat_constructor_args
Problems Detected
Accelerated video decode is unavailable on Linux: 137247
Disabled Features: accelerated_video_decodeClear uniforms before first program use on all platforms: 124764, 349137
Applied Workarounds: clear_uniforms_before_first_program_useMesa drivers in Linux handle varyings without static use incorrectly: 333885
Applied Workarounds: count_all_in_varyings_packingLinux AMD drivers incorrectly return initial value of 1 for TEXTURE_MAX_ANISOTROPY: 348237
Applied Workarounds: init_texture_max_anisotropyAlways rewrite vec/mat constructors to be consistent: 398694
Applied Workarounds: scalarize_vec_and_mat_constructor_argsLinux AMD drivers handle struct scopes incorrectly: 403957
Applied Workarounds: regenerate_struct_namesLinux ATI drivers crash on binding incomplete cube map texture to FBO: 518889
Applied Workarounds: force_cube_map_positive_x_allocationLinux Mesa drivers crash on glTexSubImage2D() to texture storage bound to FBO: 521904
Applied Workarounds: disable_texture_storageLimited enabling of Chromium GL_INTEL_framebuffer_CMAA: 535198
Applied Workarounds: disable_framebuffer_cmaaDisable partial swaps on Mesa drivers (detected with GL_VERSION): 339493
Applied Workarounds: disable_post_sub_buffers_for_onscreen_surfacesDecode and encode before generateMipmap for srgb format textures on os except macosx: 634519
Applied Workarounds: decode_encode_srgb_for_generatemipmapadjust src/dst region if blitting pixels outside read framebuffer on Linux AMD: 664740
Applied Workarounds: adjust_src_dst_region_for_blitframebufferAMD drivers in Linux require invariant qualifier to match between vertex and fragment shaders: 659326, 639760
Applied Workarounds: dont_remove_invariant_for_fragment_input, remove_invariant_and_centroid_for_essl3Disable KHR_blend_equation_advanced until cc shaders are updated: 661715
Decode and Encode before generateMipmap for srgb format textures on Linux AMD: 634519
Applied Workarounds: decode_encode_srgb_for_generatemipmapAccelerated rasterization has been disabled, either via blacklist, about:flags or the command line.
Disabled Features: rasterizationRaster is using a single thread.
Disabled Features: multiple_raster_threadsNative GpuMemoryBuffers have been disabled, either via about:flags or command line.
Disabled Features: native_gpu_memory_buffersVersion Information
Data exported 4/17/2017, 10:49:40 PM Chrome version Chrome/57.0.2987.98 Operating system Linux 3.16.0-4-amd64 Software rendering list version 12.13 Driver bug list version 9.29 ANGLE commit id unknown hash 2D graphics backend Skia/57 ae9cc5d3588d52f4b371b55845704b25d88cf06d Command Line Args --flag-switches-begin --google-profile-info --javascript-harmony --flag-switches-end Driver Information
Initialization time 78 In-process GPU false Passthrough Command Decoder false Sandboxed false GPU0 VENDOR = 0x1002, DEVICE= 0x791e Optimus false AMD switchable false Driver vendor Mesa Driver version 10.3.2 Driver date Pixel shader version 1.20 Vertex shader version 1.20 Max. MSAA samples 6 Machine model name Machine model version GL_VENDOR X.Org R300 Project GL_RENDERER Gallium 0.4 on ATI RS690 GL_VERSION 2.1 Mesa 10.3.2 GL_EXTENSIONS GL_ARB_multisample GL_EXT_abgr GL_EXT_bgra GL_EXT_blend_color GL_EXT_blend_minmax GL_EXT_blend_subtract GL_EXT_copy_texture GL_EXT_polygon_offset GL_EXT_subtexture GL_EXT_texture_object GL_EXT_vertex_array GL_EXT_compiled_vertex_array GL_EXT_texture GL_EXT_texture3D GL_IBM_rasterpos_clip GL_ARB_point_parameters GL_EXT_draw_range_elements GL_EXT_packed_pixels GL_EXT_point_parameters GL_EXT_rescale_normal GL_EXT_separate_specular_color GL_EXT_texture_edge_clamp GL_SGIS_generate_mipmap GL_SGIS_texture_border_clamp GL_SGIS_texture_edge_clamp GL_SGIS_texture_lod GL_ARB_multitexture GL_IBM_multimode_draw_arrays GL_IBM_texture_mirrored_repeat GL_ARB_texture_cube_map GL_ARB_texture_env_add GL_ARB_transpose_matrix GL_EXT_blend_func_separate GL_EXT_fog_coord GL_EXT_multi_draw_arrays GL_EXT_secondary_color GL_EXT_texture_env_add GL_EXT_texture_filter_anisotropic GL_EXT_texture_lod_bias GL_INGR_blend_func_separate GL_NV_blend_square GL_NV_light_max_exponent GL_NV_texgen_reflection GL_NV_texture_env_combine4 GL_S3_s3tc GL_SUN_multi_draw_arrays GL_ARB_texture_border_clamp GL_ARB_texture_compression GL_EXT_framebuffer_object GL_EXT_texture_compression_s3tc GL_EXT_texture_env_combine GL_EXT_texture_env_dot3 GL_MESA_window_pos GL_NV_packed_depth_stencil GL_NV_texture_rectangle GL_ARB_depth_texture GL_ARB_occlusion_query GL_ARB_shadow GL_ARB_texture_env_combine GL_ARB_texture_env_crossbar GL_ARB_texture_env_dot3 GL_ARB_texture_mirrored_repeat GL_ARB_window_pos GL_EXT_stencil_two_side GL_EXT_texture_cube_map GL_NV_fog_distance GL_APPLE_packed_pixels GL_APPLE_vertex_array_object GL_ARB_draw_buffers GL_ARB_fragment_program GL_ARB_fragment_shader GL_ARB_shader_objects GL_ARB_vertex_program GL_ARB_vertex_shader GL_ATI_draw_buffers GL_ATI_texture_env_combine3 GL_ATI_texture_float GL_EXT_shadow_funcs GL_EXT_stencil_wrap GL_MESA_pack_invert GL_MESA_ycbcr_texture GL_NV_primitive_restart GL_ARB_fragment_program_shadow GL_ARB_half_float_pixel GL_ARB_occlusion_query2 GL_ARB_point_sprite GL_ARB_shading_language_100 GL_ARB_sync GL_ARB_texture_non_power_of_two GL_ARB_vertex_buffer_object GL_ATI_blend_equation_separate GL_EXT_blend_equation_separate GL_OES_read_format GL_ARB_pixel_buffer_object GL_ARB_texture_float GL_ARB_texture_rectangle GL_ATI_texture_compression_3dc GL_EXT_pixel_buffer_object GL_EXT_texture_compression_dxt1 GL_EXT_texture_mirror_clamp GL_EXT_texture_rectangle GL_EXT_texture_sRGB GL_ARB_framebuffer_object GL_EXT_framebuffer_blit GL_EXT_framebuffer_multisample GL_EXT_packed_depth_stencil GL_ARB_vertex_array_object GL_ATI_separate_stencil GL_ATI_texture_mirror_once GL_EXT_gpu_program_parameters GL_EXT_texture_sRGB_decode GL_OES_EGL_image GL_ARB_copy_buffer GL_ARB_half_float_vertex GL_ARB_instanced_arrays GL_ARB_map_buffer_range GL_ARB_texture_rg GL_ARB_texture_swizzle GL_ARB_vertex_array_bgra GL_EXT_texture_swizzle GL_EXT_vertex_array_bgra GL_NV_conditional_render GL_ARB_ES2_compatibility GL_ARB_debug_output GL_ARB_draw_elements_base_vertex GL_ARB_explicit_attrib_location GL_ARB_fragment_coord_conventions GL_ARB_provoking_vertex GL_ARB_sampler_objects GL_ARB_vertex_type_2_10_10_10_rev GL_EXT_provoking_vertex GL_EXT_texture_snorm GL_MESA_texture_signed_rgba GL_NV_texture_barrier GL_ARB_get_program_binary GL_ARB_robustness GL_ARB_separate_shader_objects GL_ANGLE_texture_compression_dxt3 GL_ANGLE_texture_compression_dxt5 GL_ARB_compressed_texture_pixel_storage GL_ARB_internalformat_query GL_ARB_map_buffer_alignment GL_ARB_texture_storage GL_EXT_framebuffer_multisample_blit_scaled GL_AMD_shader_trinary_minmax GL_ARB_clear_buffer_object GL_ARB_explicit_uniform_location GL_ARB_invalidate_subdata GL_ARB_vertex_attrib_binding GL_KHR_debug GL_ARB_buffer_storage GL_ARB_multi_bind GL_ARB_texture_mirror_clamp_to_edge GL_ARB_vertex_type_10f_11f_11f_rev GL_ARB_texture_barrier Disabled Extensions GL_KHR_blend_equation_advanced GL_KHR_blend_equation_advanced_coherent Window system binding vendor SGI Window system binding version 1.4 Window system binding extensions GLX_ARB_create_context GLX_ARB_create_context_profile GLX_ARB_fbconfig_float GLX_ARB_framebuffer_sRGB GLX_ARB_multisample GLX_EXT_create_context_es2_profile GLX_EXT_framebuffer_sRGB GLX_EXT_import_context GLX_EXT_texture_from_pixmap GLX_EXT_visual_info GLX_EXT_visual_rating GLX_MESA_copy_sub_buffer GLX_OML_swap_method GLX_SGI_swap_control GLX_SGIS_multisample GLX_SGIX_fbconfig GLX_SGIX_pbuffer GLX_SGIX_visual_select_group GLX_INTEL_swap_event Window manager IceWM 1.3.8 (Linux 3.12.18+/x86_64) Compositing manager No Direct rendering Yes Reset notification strategy 0x8261 GPU process crash count 0 System visual ID 33 RGBA visual ID 105 Compositor Information
Tile Update Mode One-copy Partial Raster Enabled GpuMemoryBuffers Status
ATC Software only ATCIA Software only DXT1 Software only DXT5 Software only ETC1 Software only R_8 Software only RG_88 Software only BGR_565 Software only RGBA_4444 Software only RGBX_8888 Software only RGBA_8888 Software only BGRX_8888 Software only BGRA_8888 Software only YVU_420 Software only YUV_420_BIPLANAR Software only UYVY_422 Software only Log Messages
[14957:14957:0417/223138.093208:ERROR:sandbox_linux.cc(343)] : InitializeSandbox() called with multiple threads in process gpu-process.
Die Karte ist laut lspci:
01:05.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] RS690 [Radeon X1200]
Da fällt mir als erstes ins Auge, daß die GPU-Auskunft von Chromium mir was von einem Mesa-Treiber erzählt. Nun sind Grafikkartentreiber wirklich nicht mein Spezialgebiet, aber Mesa ist meines Wissens nach eine Art Standard-Treiber, der genommen wird, wenn sich nichts Besseres findet. Erste Frage des Unwissenden: Warum findet sich für eine ATI Radeon X1200 bzw. Radeon S690 kein expliziter Treiber?
Ja, ich habe gegoogelt. Und ich könnte das vermutlich noch tage- und wochenlang tun, ohne eine brauchbare Lösung zu finden. Ohne Kenntnisse über Grafikkartentreiber komme ich da wohl nicht wirklich weiter. Zumal ja nicht klar ist, ob das das eigentliche Problem lösen würde.
Dann sehe ich, daß da einiges an Beschleunigungsmöglichkeiten der Karte wohl nicht genutzt wird, was wiederum dem „falschen“ Treiber zuzurechnen sein dürfte. Grafikbeschleunigung, Scrollen im Fenster … da könnte was dran sein. Aber wie gesagt, ich weiß da einfach zu wenig drüber, und wild herumspekulieren bringt mich auch nicht weiter.
Die Fehlermeldung unten am Schluß aus dem syslog kann ich auch nicht interpretieren. Wieder was, wofür man Kenntnisse über Grafikkarten und ihre Treiber haben müßte.
Eine eher radikale Lösung wäre wohl, eine andere Grafikkarte in den PC einzubauen. Ja, ich hätte was Passendes. Aber bevor ich meinen PC zerlege, wüßte ich doch gern, ob sich das Problem auch eleganter lösen läßt.
Jemand 'ne Idee?
18. April 2017 at 21:19
Erst einmal zur Startseite unter Chromium: Ich hatte da noch nie ein Problem damit und konnte die auf jeden Wert setzen der mir bislang passte. Meist habe ich da about:blank oder aber ein lokales File mit Links auf die Seiten, die ich am häufigsten besuche …
… bis ich diese Startseite mit einem Plug-In ganz ersetz habe, das stellt mir als Startseite den Bookmark Ordner als Seite mit Links dar. Das Plug-In nennt sich „Humble New Tab Page“
… und da liegt vielleicht auch dein Problem, neben der Angabe der Homepage gibt es noch ein Schalter: On Startup open new Tab Page … und dann kannst du Home Page eintragen was immer du willst, du bekommst immer die New Tab Page, die im Standard die Google Suche aufruft (oder genauer gesagt die Standard Suche).
18. April 2017 at 21:40
Als zweites möchte ich sagen, dass ich einen ganz ähnlichen Fehler hatte, nicht nur in Chromium auch einige andere Anwendungen die nach dem neu öffnen nur noch den Rahmen aber keinen Inhalt mehr brachten.
Ich weiß nicht genau was die Ursache dafür ist, aber der Fehler verschwand immer kurzzeitig nach dem ich den Empfänger meiner schnurlosen Tastatur/Maus abgezogen habe, zwei Minuten wartete und dann neu angeschlossen habe.
Nach dem Austausch eines USB Hubs war es zwar besser aber hin und wieder froren einige Anwendungen doch wieder komplett ein (so neben Chromium etwa Synaptic). Manchmal lies sich auch gar keine weitere Bedienung über Maus oder Tastatur vornehmen. Auf einer anderen Konsole oder per SSH Zugang ging aber alles.
Ich habe dann eine andere schnurlose Tastatur/Maus angeschlossen und hatte seither den Fehler nicht mehr! Ich habe daher auch nicht weiter nach dem Problem gesucht.
Vielleicht hilft das ja das Problem einzugrenzen.
Das folgende hatte ich bis dahin herausgefunden:
Der Grund warum es gerade Chromium trifft scheint zu sein, dass die Anwendung sich in einem Zustand befindet, in dem sie auf ein ganz bestimmtes Event von der Tastatur/Maus wartet. In diesem Zustand werden offensichtlich keine weiteren (Draw) Events bearbeitet. Ich bin sicher es hat nichts mit der Grafikkarte oder dem Grafiktreiber zu tun.
Hinzu kommt dass Chromium auch durch schließen des Fensters oder einen Kill nicht vollständig geschlossen wird. Es bleibt immer noch ein Prozess im Speicher (siehe Prozessliste – etwa htop, ich tippe auf Schnellstarter). Schießt man diesen weiteren Chromium Prozess (der möglicherweise nicht mit user rechten läuft) ab und startet Chromium nach einer Wartezeit von mindestens 60 Sekunden neu, wird auch der Fensterinhalt wieder angezeigt … sofern du es geschafft hast den X Server aus dem Modus raus zu holen in dem er auf ein bestimmtes Event wartet.
18. April 2017 at 21:53
Ach noch eine Anmerkung, das Mausrad wird unter Linux als Maus-Button Events verarbeitet (Button 4 + 5 wenn ich das richtig weiß).
Der Ablauf dieser Maus/Keyboard Events ist ein Graus, wenn da etwas durcheinander kommt hängt sich so manche Anwendung komplett auf und zeichnet einfach ihr Fensterinhalt nicht mehr neu. Man kann es provozieren, aber ganz verstanden habe ich es noch nicht.
… und noch was, bei deinem betreffenden Debian Update mit dem der Fehler erst auftrat, hat sich etwas wichtiges geändert: der Linux-Kernel … und im Linux Kernel die Verarbeitung von Tastatur und Maus Ereignissen. Ähnliches hatte bei mir zur Folge dass ältere X Server nicht mehr liefen und auch einen Update brauchten. Aber nicht etwa der Grafiktreiber, der Input Treiber für Maus und Tastatur bzw. der Input Event Treiber verursachten die Probleme.
19. April 2017 at 7:53
Nebenbei noch eine kleine Anmerkung, deine Auffassung über die Funktion von Mesa ist so nicht ganz richtig. Näheres findet sich da auch in der Wikipedia.
Etwa hier: https://en.wikipedia.org/wiki/Mesa_(computer_graphics)