thread context switches: detection, prevention


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users thread context switches: detection, prevention
# 1  
Old 03-23-2008
thread context switches: detection, prevention

#1: does anyone know how to detect how many times (and/or the time length) a given thread has been context switched out of the CPU?

#2: are there any tchniques that minimize/eliminate your thread getting context switched?

I would be happy to know the answers to these questions for ANY operating system, not only real ones like solaris and linux, but even (pinch your noise) Windows.

Here is the little bit that I currently know:

#1:
Apparently Solaris records context switch counts; see this discussion:
JMX - Any way to detect thread context switches?

Unfortunately, I too am running a Java program, and so the issue mentioned in that posting about how to figure out the mapping between your Java thread ID and solaris's LWP ID remains for me too.

Is there any functionality in Linux or Windows to what is described in that discussion?


#2:
Well, you can do obvious things, such as run no other programs, disable as many daemons/services as possible.

Is there any other configuration that you can do? I have tried setting my java program's thread priority to max in the hope this would prevent it, but it doesn't seem too.

Is there some version of linux that you can run in which you can muck with the thread scheduler and alter its policies to minimize hot threads from be switched out? (I have a dual core CPU, so if my app's main thread fully occupies one core, the other core is still free to run stuff from the operating system, so I see no reason why my hot thread needs to ever be swapped out--or am I missing something?).

Or maybe a real time OS in which you specify that a thread has to run for a certain length of time completely unmolested?
# 2  
Old 03-23-2008
Raise the base priority of the process.

Use realtime processing in sched.h if your system has it. I do not know if java supports this or not.
# 3  
Old 03-23-2008
Quote:
Originally Posted by jim mcnamara
Raise the base priority of the process.

Use realtime processing in sched.h if your system has it. I do not know if java supports this or not.

Thanks for the pointer about sched.h.

According to The Linux Kernel Archives the latest stable version of the Linux kernel is 2.6.24.3. Unfortunately, I was not able to find an online listing for sched.h for that kernel version. If anyone knows of a good source for this stuff lemme know. (Altho maybe it does not matter: while you will get 2.6.24 with, say, ubuntu 8.04 when released, currently you get 2.6.2 with ubuntu 7.10) The closest version to it that I found was linux-2.6.4/include/linux/sched.h

That version has a few occurences of "real", but none seemed to be relevant. Feel free to point out anything that I may have missed.

I have never done any kernel hacking before. If I modify sched.h, would I then have to recompile the kernel and somehow reboot into the new version or something?

Let me ask a general question. Suppose that you have a multi-core CPU. Does a single process (or thread?)--in linus, solaris, windows--get the entire CPU at once, or can multiple processes/threads simultaneously be on the CPU?

I would have thought the latter is true, but when I began thinking about how a context switch is done, which includes saving all the CPU registers, it seems like it might be the case that just a single process/thread should occupy the CPU at once, else it might be difficult/impossible to know which registers belong to what? Or is this a non-issue? I would love to be educated.

Also, is the linux interrupt system responsible for periodic involuntary process contexct switches? According to p.5 of
Chapter 7: Scheduling
there is the claim that
Quote:
An interrupt occurs every k clock ticks, thus causing the hardware clock's con-troller to execute the logical equivalent of an yield() to invoke the interrupt
handler. The interrupt handler invokes the scheduler to reschedule the CPU.
How often do interrupts in linux occur? Is there any way to disable this, or at least prevent my hot thread from being context switched out of its core when an interrupt occurs?
Login or Register to Ask a Question

Previous Thread | Next Thread

4 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Questions related to if in awk context and if without awk context

I wrote this code, questions follow #! /bin/bash -f # Purpose - to show how if syntax is used within an awk clear; ls -l; echo "This will print out the first two columns of the inputted file in this directory"; echo "Enter filename found in this directory"; read input; ... (11 Replies)
Discussion started by: Seth
11 Replies

2. Programming

Parallel Processing Detection and Program Return Value Detection

Hey, for the purpose of a research project I need to know if a specific type of parallel processing is being utilized by any user-run programs. Is there a way to detect whether a program either returns a value to another program at the end of execution, or just utilizes any form of parallel... (4 Replies)
Discussion started by: azar.zorn
4 Replies

3. Cybersecurity

Anyone knows any prevention against identity theft?

I have recently been victimized by the theft of my credit card. But, due to favorable situations I could prevent it from being miss-used and was able to make thins go in the right way.Anyways , I would like to know that if there any services which keeps your financial information safe and make you... (4 Replies)
Discussion started by: levi
4 Replies

4. Programming

Signal Handling and Context Switches

Hi guys, this is my first posting, so at first hi to everyone! ;) I have a problem with ucontext_t in connection with signal handling. I want to simulate a preemptive scheduler. I am using the iTimer with ITIMER_PROF, to schedule the interrupts. You find the code below: #include <stdio.h>... (18 Replies)
Discussion started by: XComp
18 Replies
Login or Register to Ask a Question