On 19.12.2014 15:37, Ivan Zhakov wrote:
> Originally FSFS caching implementation was using apr_thread_mutex_t to
> serialize access to shared data. In r1346122 [1] implementation was
> switched to apr_thread_rw_lock_t to improve performance. This change
> was released in Subversion 1.8.0
>
> Unfortunately current apr_thread_rwlock_t implementation is very slow
> on Windows. As quick workaround FSFS code was patched to select
> apr_thread_mutex_t or apr_thread_rwlock_t() depending of platform on
> compile time (r1611380 [2]).
>
> In further investigation Bert found why apr_thread_rwlock_t() so slow
> on Windows: implementation uses kernel level mutex object instead of
> lightweight critical section (critical sections are also used in
> apr_thread_mutex_t in most cases).
>
> The simple patch to switch apr_thread_rwlock_t() implementation to use
> critical sections (through apr_thread_mutex_t) was proposed on APR
> development mailing list [3], but patch was not commited nor reviewed.
>
> So the current situation is:
> 1. APR has performance problem on Windows that hurts Subversion 1.8.x and trunk
> 2. Subversion trunk has workaround for this specific problem at compile time
> 3. Patch proposed to APR mailing list, without any reaction for three months
>
> From my point of view the proposed patch is straightforward and Bert
> stated that it makes apr_thread_rwlock_t 10 to 140 times more
> efficient on Windows. So the best option will be to commit Bert's
> patch, but I cannot do this since I'm not APR committer :(
>
> Thoughts?
Thanks for the reminder ... I remember that thread on apr-dev, but it
slipped my mind. If I don't review and commit Bert's patch in the next
week or so, feel free to send another nagging e-mail. :)
FWIW, committing to APR trunk isn't enough: should be back-ported to 1.6
and 1.5, too.
-- Brane
Received on 2014-12-19 16:58:35 CET