Re: [RFC PATCH 0/6] Convert all tasklets to workqueues

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Alexey Kuznetsov
Date: Friday, June 29, 2007 - 4:34 am

Hello!


Simple and stupid:

int flag;

static void do_test(unsigned long dummy)
{
	flag = 1;
}

static void do_test_wq(void *dummy)
{
	flag = 1;
}

static void measure_tasklet0(void)
{
	int i;
	int cnt = 0;
	DECLARE_TASKLET(test, do_test, 0);
	unsigned long start = jiffies;

	for (i=0; i<1000000; i++) {
		flag = 0;
		local_bh_disable();
		tasklet_schedule(&test);
		local_bh_enable();
		while (flag == 0) {
			schedule();
			cnt++;
		} /*while (flag == 0)*/;
	}
	printk("tasklet0: %lu %d\n", jiffies - start, cnt);
}

static void measure_tasklet1(void)
{
	int i;
	int cnt = 0;
	DECLARE_TASKLET(test, do_test, 0);
	unsigned long start = jiffies;

	for (i=0; i<1000000; i++) {
		flag = 0;
		local_bh_disable();
		tasklet_schedule(&test);
		local_bh_enable();
		do {
			schedule();
			cnt++;
		} while (flag == 0);
	}
	printk("tasklet1: %lu %d\n", jiffies - start, cnt);
}

static void measure_workqueue(void)
{
	int i;
	int cnt = 0;
	unsigned long start;
	DECLARE_WORK(test, do_test_wq, 0);
	struct workqueue_struct * wq;

	start = jiffies;

	wq = create_workqueue("testq");

	for (i=0; i<1000000; i++) {
		flag = 0;
		queue_work(wq, &test);
		do {
			schedule();
			cnt++;
		} while (flag == 0);
	}
	printk("wq: %lu %d\n", jiffies - start, cnt);
	destroy_workqueue(wq);
}




"... work_struct as intermediary towards a workqueue - what's the technological
point in such a splitup?" Non-sense? Yes, but it is exactly what you said. :-)

softirq is just a context and engine to run something. Exactly like
workqueue task. struct tasklet is work_struct, it is just a thing to run.



I feel I have to repeat: tasklet==work_struct, workqueue==softirq. 

Essentially, you said that workqueues "scale" in direction of increasing
amount of softirqs. This is _correct_, but the word is different: "flexible"
is the word. What's about performance,scalability blah-blah, workqueues
are definitely worse. And this is OK, you do not need to conceal this.

 This is the price, which we pay for flexibility and to niceness to realtime.

That's what should be said in adverticement notes instead of propaganda.




Do not count this.

Done this way because nobody needed that thing, except for _one_ place
in keyboard/console driver, which was very difficult to fix that time,
when vt code was utterly messy and not smp safe at all.

start_bh_atomic() was successfully killed, but we had to preserve analogue
of disable_bh() with the same semantics for some time.
It is deliberately implemented in a way, which does not impact hot paths
and is easy to remove.

It is sad that some usb drivers started to use this creepy and
useless thing.



Incorrect.

The difference between softirqs and hardirqs lays not in their "heavyness".
It is in reentrancy protection, which has to be done with local_irq_disable(),
unless networking is not isolated from hardirqs. That's all.
Networking is too hairy to allow to be executed with disabled hardirqs.
And moving this hairyiness to process context requires
<irony mode> a little </> more efforts than conversion tasklets to work queues.



Do you really see something common between this Holy Grail Quest and
tasklets/workqeueus? Come on. :-)

Actually, this is step backwards. Instead of execution in correct
context, you create a new dummy context.  This is the place, where goals
of realtime and Holy Grail Quest split.



If I started nice --22 running process I signed to killing latency
of nice 0 processes. But I did not sign for killing network/scsi adapters.
"latency-sensitive application" use real time priority as well,
so that they will compete with tasklets fairly.

-
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[RFC PATCH 0/6] Convert all tasklets to workqueues, Steven Rostedt, (Thu Jun 21, 9:00 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Christoph Hellwig, (Fri Jun 22, 12:09 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Ingo Molnar, (Fri Jun 22, 12:51 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Christoph Hellwig, (Fri Jun 22, 12:53 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Ingo Molnar, (Fri Jun 22, 4:23 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Steven Rostedt, (Fri Jun 22, 5:32 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Ingo Molnar, (Fri Jun 22, 5:38 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Steven Rostedt, (Fri Jun 22, 5:58 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Ingo Molnar, (Fri Jun 22, 6:12 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Andrew Morton, (Fri Jun 22, 6:13 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Ingo Molnar, (Fri Jun 22, 6:26 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Steven Rostedt, (Fri Jun 22, 6:35 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Andrew Morton, (Fri Jun 22, 6:41 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Ingo Molnar, (Fri Jun 22, 7:00 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Arjan van de Ven, (Fri Jun 22, 7:25 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Steven Rostedt, (Fri Jun 22, 7:27 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Steven Rostedt, (Fri Jun 22, 7:42 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Arjan van de Ven, (Fri Jun 22, 7:43 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Linus Torvalds, (Fri Jun 22, 10:16 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Steven Rostedt, (Fri Jun 22, 10:31 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Christoph Hellwig, (Fri Jun 22, 11:32 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Ingo Molnar, (Fri Jun 22, 1:40 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Christoph Hellwig, (Fri Jun 22, 2:00 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Ingo Molnar, (Fri Jun 22, 2:10 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Thomas Gleixner, (Fri Jun 22, 2:13 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Linus Torvalds, (Fri Jun 22, 2:37 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Daniel Walker, (Fri Jun 22, 2:53 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Ingo Molnar, (Fri Jun 22, 2:59 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Ingo Molnar, (Fri Jun 22, 3:09 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Ingo Molnar, (Fri Jun 22, 3:15 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Daniel Walker, (Fri Jun 22, 3:15 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Roland Dreier, (Fri Jun 22, 3:43 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Ingo Molnar, (Fri Jun 22, 3:44 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Steven Rostedt, (Fri Jun 22, 3:58 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Daniel Walker, (Fri Jun 22, 4:28 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Stephen Hemminger, (Fri Jun 22, 10:14 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Dave Airlie, (Fri Jun 22, 11:23 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues , Jonathan Corbet, (Sun Jun 24, 8:16 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues , Steven Rostedt, (Sun Jun 24, 8:52 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Tilman Schmidt, (Mon Jun 25, 9:50 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Steven Rostedt, (Mon Jun 25, 10:06 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Steven Rostedt, (Mon Jun 25, 12:11 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Stephen Hemminger, (Mon Jun 25, 12:52 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Steven Rostedt, (Mon Jun 25, 1:31 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Tilman Schmidt, (Mon Jun 25, 1:50 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Steven Rostedt, (Mon Jun 25, 2:03 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Ingo Molnar, (Mon Jun 25, 2:15 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Stefan Richter, (Mon Jun 25, 4:36 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues , Jonathan Corbet, (Mon Jun 25, 5:00 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Steven Rostedt, (Mon Jun 25, 5:46 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Steven Rostedt, (Mon Jun 25, 5:52 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Dan Williams, (Mon Jun 25, 6:46 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Steven Rostedt, (Mon Jun 25, 7:01 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Dan Williams, (Mon Jun 25, 7:12 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Jeff Garzik, (Wed Jun 27, 10:48 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Ingo Molnar, (Thu Jun 28, 2:23 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Steven Rostedt, (Thu Jun 28, 5:37 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Alexey Kuznetsov, (Thu Jun 28, 7:38 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Jeff Garzik, (Thu Jun 28, 8:17 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Jeff Garzik, (Thu Jun 28, 8:23 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Steven Rostedt, (Thu Jun 28, 8:54 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Ingo Molnar, (Thu Jun 28, 9:00 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Oleg Nesterov, (Thu Jun 28, 9:37 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Jeff Garzik, (Thu Jun 28, 10:26 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Jeff Garzik, (Thu Jun 28, 10:44 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Dan Williams, (Thu Jun 28, 11:02 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Andrew Morton, (Thu Jun 28, 11:19 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Ingo Molnar, (Thu Jun 28, 1:07 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Steven Rostedt, (Thu Jun 28, 1:46 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Dan Williams, (Thu Jun 28, 2:23 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Dan Williams, (Thu Jun 28, 2:40 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Steven Rostedt, (Thu Jun 28, 3:00 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Steven Rostedt, (Thu Jun 28, 3:01 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Alexey Kuznetsov, (Fri Jun 29, 4:34 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Duncan Sands, (Fri Jun 29, 4:48 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Ingo Molnar, (Fri Jun 29, 5:29 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Alexey Kuznetsov, (Fri Jun 29, 6:25 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Alexey Kuznetsov, (Fri Jun 29, 6:36 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Steven Rostedt, (Fri Jun 29, 6:41 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Ingo Molnar, (Fri Jun 29, 6:43 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Duncan Sands, (Fri Jun 29, 7:01 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Jeff Garzik, (Fri Jun 29, 7:24 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Oleg Nesterov, (Fri Jun 29, 7:26 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Alexey Kuznetsov, (Fri Jun 29, 7:27 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Alexey Kuznetsov, (Fri Jun 29, 8:23 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Oleg Nesterov, (Fri Jun 29, 8:51 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Alexey Kuznetsov, (Fri Jun 29, 9:21 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Alexey Kuznetsov, (Fri Jun 29, 9:34 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Oleg Nesterov, (Fri Jun 29, 9:52 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Oleg Nesterov, (Fri Jun 29, 10:09 am)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Alexey Kuznetsov, (Fri Jun 29, 12:04 pm)
Re: [RFC PATCH 0/6] Convert all tasklets to workqueues, Oleg Nesterov, (Sat Jun 30, 4:25 am)