Thomas,
Iratxo Pichel Ortiz wrote:
2.6.29-rt16, right ?
I have also tried rt18, but as I had thought seeing change-logs, the
behavior is exactly the same.
You were right here :) It was 29.
Do you know what could be causing this issue. I have managed to repeat this
traces (NOHZ...) without using my code, using a workqueue and in the work
just by doing something like:
work_func() {
mdelay(10);
msleep(10);
queue_work(myqueue, mywork);
}
And then by heavy loading the box from the outside.
I have written a very small module that causes the
"local_softirq_pending" under not some load. Please find code at the end
of this email. Here is pasted some traces of dmesg (I have increased the
ratelimit of the "NOHZ: local..." trace to 250.
The only strange thing here is that I am calling "set_workqueue_prio" (I
have hacked source to export this symbol), and I am starting to think
that this could not be a good idea. Any hints about this?
[ 648.954000] NOHZ: local_softirq_pending
0e
[ 648.955000] NOHZ: local_softirq_pending
0e
[ 648.956000] NOHZ: local_softirq_pending
0e
Does it work when you disable CONFIG_NOHZ ?
Still pending to test.
I will try this and let the list know.
Thanks,
tglx
#include <linux/module.h>
#include <linux/workqueue.h>
#include <linux/sched.h>
#include <linux/delay.h>
#define LATENCY_PRIO 98
static struct workqueue_struct* wq;
static struct work_struct w;
void LatencyzerWork(struct work_struct* work)
{
static int count;
/* Busy and normal waiting */
mdelay(10);
msleep(1);
/* Requeue work */
if(count++ < 400000)
queue_work(wq, &w);
else
printk("LAT: Count reached %d, stopped latencying\n", count);
}
int __init LatencyzerInit(void)
{
/* Prepare workqueue */
printk("LAT: Initializing latencyzer\n");
if(!(wq = create_singlethread_workqueue("LATENCY"))) {
printk("LAT: Error creating task\n");
return -1;
}
/* Change workqueue prio */
set_workqueue_prio(wq, SCHED_FIFO, LATENCY_PRIO, 1);
printk("LAT: Task prio set to %u\n", LATENCY_PRIO);
/* Run first iteration */
INIT_WORK(&w, LatencyzerWork);
queue_work(wq, &w);
return 0;
}
void __exit LatencyzerExit(void)
{
printk("Latencyzer exiting...\n");
/* Done here */
cancel_work_sync(&w);
destroy_workqueue(wq);
return;
}
module_init(LatencyzerInit);
module_exit(LatencyzerExit);
MODULE_LICENSE("GPL");
--
Iratxo Pichel Ortiz
Software Development Manager
Albentia Systems S.A.
http://www.albentia.com
Tel: +34 914400567
Cel: +34 663808405
Fax: +34 914400569
C\Margarita Salas 22
Parque Tecnológico de Leganés
Leganés (28918)
Madrid
Spain
--
To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html