Project

General

Profile

Actions

Bug #7601

closed

nfs_rwlock_t does not scale with cv_broadcast()

Added by Marcel Telka over 5 years ago. Updated over 5 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
nfs - NFS server and client
Start date:
2016-11-21
Due date:
% Done:

100%

Estimated time:
Difficulty:
Medium
Tags:
needs-triage
Gerrit CR:

Description

The nfs_rwlock_t implementation uses cv_broadcast(9f) to wake up the waiters. This is clearly visible in nfs_rw_exit().

In a case there are several WRITERs waiting all of them will wake up, then one thread will grab the lock, but all others will just go back and wait again in cv_wait()/cv_wait_sig() - see nfs_rw_enter_sig(). This might cause significant performance degradation in some scenarios. To fix this the nfs_rwlock_t implementation should be changed to utilize cv_signal(9f) instead of cv_broadcast(9f).


Files

test.svg (291 KB) test.svg Marcel Telka, 2016-11-21 11:00 AM

Related issues

Related to illumos gate - Bug #7721: Poor nfs4_frlock() performance for blocking locksIn ProgressMarcel Telka2017-01-03

Actions
Related to illumos gate - Bug #7912: nfs_rwlock readers are running wild waiting for a writer that cannot comeClosedMarcel Telka2017-02-27

Actions
Actions

Also available in: Atom PDF