Playing with the Linux Scheduler


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users Playing with the Linux Scheduler
# 1  
Old 10-19-2011
Playing with the Linux Scheduler

Hi,

To begin with let me explain my system and then I will come to the problem.

System:

My program forks 2 child processes. These child processes further start 2 user level threads (pthreads) and 2 kernel level threads (kthread). All these threads issue various system calls. I am using Ubuntu with Linux kernel 2.6.39-rc7


Problem:

I want the following informtion about my system:

1. Scheduling information of the process and/or threads. ie. when was a particular process and/or thread scheduled.

2. Thread state information. ie. when and which thread is waiting for an I/O to get over. And is there a way, I can measure how much time does I/O takes?

3. Context switch information. ie. which system call caused the context switch and from which thread does this system call was called from?

Further, in case if I want to make changes to the linux scheduler and the context switch functionalities, then which files should I aim for?

I would really appreciate if you can answer all or part of these problems.

Thanks
# 2  
Old 10-19-2011
This sounds like the sort of thing which needs doing inside the kernel. Perhaps some debugging options can be enabled.
# 3  
Old 10-19-2011
I was thinking of putting some printk at appropriate positions. But was not sure how that will work.
# 4  
Old 10-19-2011
Quote:
Originally Posted by demigod85
3. Context switch information. ie. which system call caused the context switch and from which thread does this system call was called from?
A context switch is not necessarily triggered by a system call. If that were the case, it would be trivial to write an infinite loop which would never release the cpu.

Quote:
Originally Posted by demigod85
Further, in case if I want to make changes to the linux scheduler and the context switch functionalities, then which files should I aim for?
You probably want to begin with kern/sched.c, where you'll find scheduling and context switch code.

On an unrelated note, in the future, before starting a thread, choose the most appropriate forum and only post in that forum. Posting duplicates to multiple forums is frowned upon.

Regards and welcome,
Alister
# 5  
Old 10-20-2011
You can't come and go between user and kernel space.
These spaces are strictly separated.
The only form of communication from user space to kernelspace is with system calls.

User level threads (pthreads) create processes that run on userspace. They don't know what happens in kernel.

So to (1) no you can't know when or who scheduled the thread. If you mean when was created, then you have to provide this information on yourself on thread creation. man 7 pthreads shows shat info are stored and it basically ids, signals etc.

Also (2) you can't know if the thread is running or stopped (but you can know if it finished with nonblocking pthread_tryjoin_np()). However kernel does know, and publishes info on /proc fs (the same info you access with ps).

Finally, (3) you can't have context switching information from userspace (pthreads). Context switching is a kernel job. It is completely transparent to the userland. Of course, you can anytime give up processor from userspace with sched_yield() or from kernelspace by calling directly the scheduler with schedule() [i think].

As for scheduler, it resides at /usr/src/linux/kernel/sched.c
But it's a huge -- it's about 10k lines, you must really know what you are doing. And certainly with proper documentation.

ps: you can crash your machine very easily. There is no protection in kernel space. Try to find a program like vmware.

What do you want to do?
This User Gave Thanks to galanom For This Post:
# 6  
Old 10-20-2011
Hi Galanom,

Thanks a lot for such a detailed reply.

This is what am trying to do exactly:

I am interested in doing the batch processing of system calls. My application has around 100 user level threads and around 64 kernel level threads. Whenever a user level thread requests a system call, instead of performing a system call I take a note of that system call and then I make that user thread sleep. Only when there are a considerable number of system calls waiting for me, i do a context switch and then let the kernel threads execute all those system calls. That ways, I am able to batch perform system calls and reduce the number of context switches. My application is working perfectly and I can see an improvement in performance.

However, now I actually want to trace through the application to see, whether it is doing exactly what I am expecting it to do. ie, when the user threads are executing only the user threads are executing and there is no switching to kernel threads and vice-versa. I also want to check when the system calls are being executed.

In reference to the problem that i posted, if I can trace through that dummy application then I can also trace through my real application.

I hope this helps and now you are in a better situation to provide more insightful information.

Thanks

---------- Post updated at 01:49 PM ---------- Previous update was at 01:36 PM ----------

Just to add.. Yes am working on VM, so crashing is not an issue Smilie
# 7  
Old 10-20-2011
I'm being confused a bit.
How do you do "context switch"?
In userspace you can't.
In kernelspace you can, but to withhold the scheduler from scheduling kthreads would require to patch it, no? But you asked where the scheduler is in the kernel tree, so I assume you haven't.

So what do you context-switch?

Secondly: If a kthread starts to execute it cannot be scheduled-out. It will execute until finished or give up voluntary by calling schedule(). I don't know much about preemptive kernels (well, all are nowadays). I am sure that are very certain points of where a kernel preemption can occur -- after an interrupt for example. If you don't have an interrupt I can't imagine how the kthread could be unscheduled (by who??).

So what I think in a n-core pc:
pthread0...pthreadN sleep
kthread0...kthreadn-1 become runnable (as many as the cores)
kthreadx finishes
either a pthreadx or a kthreadx become runnable
Meanwhile, more kthreadx will finish.
Chances are as kthreadx finish, some pthreadx will became runnable.
So with time, all pthreads will become runnable and all kthreads will terminate.

But I am not 100% sure if everything works as I assume. I remember when I was programming a driver for the parallel port, upon entry to the interrupt service routine (triggered by a hardware interrupt) I did a CLI so no one could interrupt me. I did my job the fastest I could, then executed an STI and a schedule() to give up cpu. Preemptible kernel of not, there was no difference.
I don't seem to have the code to check it however, it's so many years that have passed.

Gotta go to bed() now because I'm cast to (void *) as I am sleepless for 2 days. Please be more specific (technically) and/or give or describe some code you have run.
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

task scheduler for linux

Hello i am looking for good and popular application run on linux OS as centos to give same function as crontab i am seeking task scheduler with web portal and logs and so on i preferred good tool freeware. thanks for help (1 Reply)
Discussion started by: mogabr
1 Replies

2. Linux

Playing with the Linux Scheduler

Hi, To begin with let me explain my system and then I will come to the problem. System: My program forks 2 child processes. These child processes further start 2 user level threads (pthreads) and 2 kernel level threads (kthread). All these threads issue various system calls. I am using... (1 Reply)
Discussion started by: demigod85
1 Replies

3. Shell Programming and Scripting

scheduler Script

Hi, My requirement is i want to send mails from server to all my employess with one attachment file for every monday and friday like scheduler.. how it is possible through bash script. please guide me.. With Regards Anish Kumar.V (8 Replies)
Discussion started by: anishkumarv
8 Replies

4. UNIX for Dummies Questions & Answers

Linux scheduler....

HI could you comment on my small doubts below 1. which type of sheduler is used inb linux?? is it round robin or multi queue priority based round robin ??? 2. Which process has the PID 0 ?? if it is sheduler process then how to convinience myself?? i mean how to see on the system...?? is... (0 Replies)
Discussion started by: raj_b025
0 Replies

5. Solaris

CRON Scheduler

I have akorn shell job that I can run manually but when I run via cron it starts and finishes, but does not do what it does when I run it manually. Any ideals on why this is happening? (3 Replies)
Discussion started by: CAGIRL
3 Replies

6. UNIX for Advanced & Expert Users

Scheduler program

Hi, what i need to do is build my own scheduler program. I am supposed to display my own prompt. at this prompt i accept a command in the following format. ls -l start 0:0:10:10 period 10 end 0:0:0:10 now this command should be executed in the background starting at 10 mins and 10 secs... (2 Replies)
Discussion started by: p_aishwarya
2 Replies

7. HP-UX

Help... LP scheduler problem...

My HPUX server can't accept all lp jobs for all my printers... I pinged the print servers and they are fine, ran lpstat -r and shows me that the scheduler is running, lpstat -t shows nothing and won't get back to # unless i terminate it, lpstat -a shows all printers fine, but in SAM it failed to... (1 Reply)
Discussion started by: amao
1 Replies

8. Solaris

About Control-M Scheduler

Hi all, Is anybody have any idea on Control-M schedular(bmcsoftware product) on Solaris/UNIX environment.If yes,can you please help me how to set it up and schedule a job. Please!!! it's Urgent!!! Regards, Uday (0 Replies)
Discussion started by: uday123
0 Replies

9. UNIX for Dummies Questions & Answers

Scheduler in Solaris

I am using Sun Solaris Where I can find scheduler program that can run another program automatically on scheduled time? Thank you. (1 Reply)
Discussion started by: wadiachmed
1 Replies
Login or Register to Ask a Question