#8007: [app_server] fully unresponsive when resizing window of big textfile ----------------------------------+---------------------------- Reporter: ttcoder | Owner: axeld Type: bug | Status: new Priority: normal | Milestone: R1 Component: Servers/app_server | Version: R1/Development Resolution: | Keywords: Blocked By: | Blocking: Has a Patch: 0 | Platform: All ----------------------------------+---------------------------- Comment (by bonefish): I examined the analysis a bit further and it actually doesn't seem to be a bug in the ports code as such. It looks more like a bad case of priority inversion. Since threads with all kinds of different priorities use port messaging there's a good chance for this to happen for the involved kernel locks. Looking at the scheduling data at around 5.53 s one can see that the "Tracker" thread (priority 10) -- which has been waiting for around 62 ms -- acquires the "ports list" mutex. Since there's a higher priority thread running (or ready) at the time it doesn't run for another 0.22 s, thus blocking higher priority threads waiting on the same lock during that time, most notably the "_input_server_event_loop_" thread (priority 103). There's quite a bit of locking ping pong going on afterwards, but I believe the core of the issue is that we have a FIFO policy for mutexes and other locking primitives but no strategy (e.g. priority boosting) to address the priority inversion issue. That also explains why multi-CPU machines don't have the problem (the high-priority thread runs on one CPU, while the other threads can still be served by another CPU) and why decreasing the thread priority to 10 helps as well (all threads using port messaging probably have a priority >= 10 and thus still get a fair share of the CPU). I guess the only good solution is to implement some strategy to counter priority inversion. -- Ticket URL: <http://dev.haiku-os.org/ticket/8007#comment:15> Haiku <http://dev.haiku-os.org> Haiku - the operating system.