Re: how to bind CPU with taskqueue thread
John Baldwin <[email protected]> Fri, 22 Aug 2008 15:42:34 -0400
| Newsgroups | gmane.os.freebsd.devel.smp |
|---|---|
| Message-ID | <[email protected]> |
On Wednesday 20 August 2008 08:09:14 pm Ji wrote: > Hi all, > > I use "taskqueue_start_threads(&tq, 1, PI_NET, tq_name)" to create a > thread working for the task queue, and I have multiple CPUs. > Can I bind the thread with a specific CPU so that the thread is only > running on that CPU permanently? Thank you a lot. > I tried sched_bind(FIRST_THREAD_IN_PROC(*tq->tq_pproc), 1) but it does > not work. BTW, the kernel uses ULE scheduler. > Thanks. With sched_bind() you can only bind curthread. What you can do for your case since you have 1 thread is to queue a task whose function does: struct thread *td; td = curthread; thread_lock(td); sched_bind(td, 1); thread_unlock(td); For a queue with multiple threads there isn't a good way to do that currently, though you might can have a task function that does a bind and then blocks on a condition variable after bumping up a counter, except that if the counter hits N, you do a wakeup on the cv instead. This would ensure that N threads run the tasks (i.e. no thread runs two of the bind tasks). -- John Baldwin _______________________________________________ [email protected] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-smp To unsubscribe, send any mail to "[email protected]"