Вася Пупкин из бабруйска залез в ядро, насрал, подумал что это хорошо и рассказал всем! )))
Какое отношение имеет эта шняга к играм?
- add sysctl to disallow unprivileged CLONE_NEWUSER by default
- reduce wakeups for PME checks
- default 500 if HZ_500 ... default 750 if HZ_750
Это што? Геймеры перешли на Infiniband?
diff --git a/drivers/infiniband/core/addr.c b/drivers/infiniband/core/addr.c
index 3a98439bba83..6efc4f907f58 100644
--- a/drivers/infiniband/core/addr.c
+++ b/drivers/infiniband/core/addr.c
@@ -820,6 +820,7 @@ int rdma_addr_find_l2_eth_by_grh(const union ib_gid *sgid,
union {
struct sockaddr_in _sockaddr_in;
struct sockaddr_in6 _sockaddr_in6;
+ struct sockaddr_ib _sockaddr_ib;
} sgid_addr, dgid_addr;
int ret;
https://github.com/Frogging-Family/linux-tkg/blob/e2b5820b26...
Чо за детский говнокод?
1. После 1000 смысл пропадает?
2. Почему 1000, а не 2000, или 500 или HZ или 2*HZ..?
3. cpu_relax() на x86 это две инструкции asm volatile("rep; nop")"
Вася Пупкин в курсе, что 1000 раз по "if (++i < 1000)" - это в 5000 раз больше инструкций,
если дико оптимизировано, как минимум: inc; cmp; jne; ret ? :D
4. rep; nop = инструкции pause; Её (их) пихают в циклы работающие под спинлоками, для увеличения производительности.
> Improves the performance of spin-wait loops. When executing a “spin-wait loop,” a Pentium 4
> or Intel Xeon processor suffers a severe performance penalty when exiting the loop because it
> detects a possible memory order violation. The PAUSE instruction provides a hint to the
> processor that the code sequence is a spin-wait loop. The processor uses this hint to avoid
> the memory order violation in most situations, which greatly improves processor performance.
> For this reason, it is recommended that a PAUSE instruction be placed in all spin-wait loops.
(Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 2B: Instruction Set Reference, M-U)
index f11b9bd..1bbfcc1 100644
--- a/kernel/locking/rwsem.c
+++ b/kernel/locking/rwsem.c
@@ -717,6 +717,7 @@ rwsem_spin_on_owner(struct rw_semaphore *sem, unsigned long nonspinnable)
struct task_struct *new, *owner;
unsigned long flags, new_flags;
enum owner_state state;
+ int i = 0;
owner = rwsem_owner_flags(sem, &flags);
state = rwsem_owner_state(owner, flags, nonspinnable);
@@ -750,7 +751,8 @@ rwsem_spin_on_owner(struct rw_semaphore *sem, unsigned long nonspinnable)
break;
}
- cpu_relax();
+ if (i++ > 1000)
+ cpu_relax();
}
rcu_read_unlock();
--