Hi Ingo & folks,
I am heard that you are the one that have set the timer
interrupt APIC by the 2.2+ linux kernel.
The Problem:
-----------
I am getting freezes with test9-pre7. The freezes happen while all
the processes that should be running are waiting in the semaphore:
cache_drain_sem
The process that holds that semaphore is waiting for all the CPUS to
run the function slab_drain_local_cache(), this function is called
from the timer interrupt.
1st Question: It is guaranteed that the timer interrupt will go to
all CPUs _soon_???
What the code tries to do:
-------------------------
The code tries to call the slab_drain_local_cache in all the CPUs and
wait for all the CPUs to call that function, and the last one to
wakeup the first one.
Problem: The variable slab_cache_drain_mask is used "quite happily"
without too much looking on it (i.e. it is read without any atomic
operation, I have changed it to be a volatile varible, but the problem
persists).
What we need to do:
------------------
We are trying that each CPU shrink its local caches, and that should
be done by the local CPU.
2nd Question: Is there a sane way to queue an operation to be done in
each specific CPU?
Something like tq_timer[cpu]?
It is that problem better solved with
soft_irqs/<whatever other mechanism>.
Notice that we are sleeping with the cache_drain_sem, but it should be
not necessary, if there is a way to queue an operation to do in each
CPU, with that, if I call drain_cpu_caches, I can always use a bitmap
to see if I have that interrupt pending, and in that case, does
nothing, if the bit was 0, I queue the operation.
If you need any more explanation, or a pointer to a place where I can
find how to setup a function to be called by each CPU, you are
welcome. I have only found smp_call_function, but I don't know if it
is run with local_irqs deactivated, or if it is the correct answer to
this problem.
Later, Juan.
-- In theory, practice and theory are the same, but in practice they are different -- Larry McVoy - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Sat Sep 30 2000 - 21:00:19 EST