提交 d2f1b785 编写于 作者: Z Zheng Zengkai

Revert "locking/rwsem: Prevent potential lock starvation"

hulk inclusion
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/I7F5L7
CVE: NA

--------------------------------

2f06f702 ("locking/rwsem: Prevent potential lock starvation"):
This patch may have some impact on reader performance as it reduces
reader optimistic spinning especially if the lock critical sections
are short the number of contending readers are small.

This patch will lead to 30%+ performance degradation to fio write_iops_blocksize
4KB testcase, and we stress the system with mysql tpcc for 12 hours,
no hungtask occur, So revert this patchset temporarily.

This reverts commit f66f7f34.
Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
上级 4332a1c1
......@@ -998,27 +998,16 @@ rwsem_spin_on_owner(struct rw_semaphore *sem, unsigned long nonspinnable)
static struct rw_semaphore __sched *
rwsem_down_read_slowpath(struct rw_semaphore *sem, long count, int state)
{
long owner, adjustment = -RWSEM_READER_BIAS;
long rcnt = (count >> RWSEM_READER_SHIFT);
long adjustment = -RWSEM_READER_BIAS;
struct rwsem_waiter waiter;
DEFINE_WAKE_Q(wake_q);
bool wake = false;
/*
* To prevent a constant stream of readers from starving a sleeping
* waiter, don't attempt optimistic spinning if the lock is currently
* owned by readers.
*/
owner = atomic_long_read(&sem->owner);
if ((owner & RWSEM_READER_OWNED) && (rcnt > 1) &&
!(count & RWSEM_WRITER_LOCKED))
goto queue;
/*
* Save the current read-owner of rwsem, if available, and the
* reader nonspinnable bit.
*/
waiter.last_rowner = owner;
waiter.last_rowner = atomic_long_read(&sem->owner);
if (!(waiter.last_rowner & RWSEM_READER_OWNED))
waiter.last_rowner &= RWSEM_RD_NONSPINNABLE;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册