Messages in this thread | | | Subject | Bottom Handles/soft irqs/timer interrupts/SMP ..... | From | "Juan J. Quintela" <> | Date | 27 Sep 2000 14:54:14 +0200 |
| |
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/
| |