Context Switch and System Call
How many Context Switches is “normal”?
This depends very much on the type of application you run. If you've got applications which are very trigger-happy WRT syscalls you can expect to see high amounts of context switching. If most of your applications idle around and only wake up when there's stuff happening on a socket, you can expect to see low context switch rates.
System calls
System calls cause context switches by their very own nature. When a process does a system call, it basically tells the kernel to take over from it's current point in time and memory to do stuff the process isn't privileged to do, and return to the same spot when it's done.
When we look at the definition of the write(2) syscall from Linux, this becomes very clear:
NAME
write - write to a file descriptor SYNOPSIS
#include ssize_t write(int fd, const void *buf, size_t count); DESCRIPTION
write() writes up to count bytes from the buffer pointed buf to the file
referred to by the file descriptor fd. [..] RETURN VALUE
On success, the number of bytes written is returned (zero indicates
nothing was written). On error, -1 is returned, and errno is set
appropriately.
[..]
This basically tells the kernel to take over operation from the process, move up to count bytes, starting from the memory address pointed at by *buf to file descriptor fd of the current process and then return back to the process and tell him how it went.
A nice example to show this is the dedicated game server for Valve Source based games, hlds.http://nopaste.narf.at/f1b22dbc9 shows one second worth of syscalls done by a single instance of a game server which had no players on it. This process takes about 3% CPU time on a Xeon X3220 (2.4Ghz), just to give you a feeling for how expensive this is.
Multi-Tasking
Another source of context switching might be processes which don't do syscalls, but need to get moved off a given CPU to make room for other processes.
A nice way to visualize this is cpuburn. cpuburn doesn't do any syscalls itself, it just iterates over it's own memory, so it shouldn't cause any context switching.
Take an idle machine, start vmstat and then run a burnMMX (or any different test from the cpuburn package) for every CPU core the system has. You should have full system utilization by then but hardly any increased context switching. Then try to start a few more processes. You'll see that the context switching rate increases as the processes begin to compete over CPU cores. The amount of switching depends on the processes/core ratio and the multitasking resolution of your kernel.
Further reading
linfo.org has a nice writeup on what context switches and system calls are. Wikipedia has generic information and a nice link collection on System calls.
Here is a blog abount how long will constext switches do: http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html
Context Switch and System Call的更多相关文章
- 从Java视角理解CPU上下文切换(Context Switch)
从Java视角理解系统结构连载, 关注我的微博(链接)了解最新动态 在高性能编程时,经常接触到多线程. 起初我们的理解是, 多个线程并行地执行总比单个线程要快, 就像多个人一起干活总比一个人干要快 ...
- Context Switch Definition
A context switch (also sometimes referred to as a process switch or a task switch) is the switching ...
- 操作系统重点双语阅读 - 上下文切换 Context Switch
The context is represented in the PCB of the process. It includes the value of the CPU registers, th ...
- CPU上下文切换的次数和时间(context switch)
什么是CPU上下文切换? 现在linux是大多基于抢占式,CPU给每个任务一定的服务时间,当时间片轮转的时候,需要把当前状态保存下来,同时加载下一个任务,这个过程叫做上下文切换.时间片轮转的方式,使得 ...
- context switch
In computing, a context switch is the process of storing and restoring the state (more specifically, ...
- [转帖]How long does it take to make a context switch?
How long does it take to make a context switch? FROM: http://blog.tsunanet.net/2010/11/how-long-do ...
- How long does it take to make a context switch?
FROM: http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html That's a interesti ...
- [CareerCup] 16.2 Measure Time in a Context Switch 测量上下文转换的时间
16.2 How would you measure the time spent in a context switch? 上下文转换发生在两个进程之间,比如让一个等待进程进入执行和让一个运行进程进 ...
- [Chapter 3 Process]Practice 3.4 Describe what happens when a context switch occurs if the new context is already loaded into one of the register sets.
3.4 The Sun UltraSPARC processor has multiple register sets. Describe what happens when a context sw ...
随机推荐
- Thinkphp入门 五 —模型 (49)
原文:Thinkphp入门 五 -模型 (49) [数据库操作model模型] model 模型 数据库操作 tp框架主要设计模式:MVC C:controller 控制器 shop/Li ...
- jquery用div模拟一个下拉列表框
原文 jquery用div模拟一个下拉列表框 今天分享一个用我自己用jquery写的,用div模拟下拉列表select,这个效果网上有很多,但是写一个有自己思路的代码效果,更有成就感,先看截图: 自我 ...
- 3D-HEVC/HTM测试序列下载地址(官方完整版)
最新3DV通用测试条件Common TestConditions of 3DV Core Experiments(JCT3V-E1100)中给出了所有标准测试序列的下载地址,有需要的朋友可以看看! 标 ...
- XMPPclient库Smack 4.0.6一个版本的开发
XMPPclient库Smack 4.0.6版开发之中的一个 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs 一.Smack库概述 Smack是一个开源. ...
- 打开excel2007文档时显示“excel无法打开文件~$book.xltm”
此问题的出现是因为意外情况导致Excel临时文件没有删掉,把C:\Program Files\Microsoft Office\Office12\XLSTART里面的临时文件“~$book”给删除就好 ...
- 使MYSQL能被外部访问_xeyuu_新浪博客
使MYSQL能被外部访问_xeyuu_新浪博客 使MYSQL能被外部访问 (
- Apache commons-net用法的一个示例
jar: commons-io-2.4.jarcommons-net-3.3.jar Code: import java.io.File; import java.io.FileInputStream ...
- c#Lamdba表达式与托付
介绍: "Lambda表达式"(lambda expression)是一个匿名函数,在C#3.0中引入了lambda表达式,它是对匿名函数的一种简化,能够包括表达式和语句,而且可用 ...
- ThinkPHP多应用/项目配置技巧(使用同一配置文件)--(十六)
原文:ThinkPHP多应用/项目配置技巧(使用同一配置文件)--(十六) ThinkPHP多应用配置技巧(没有使用分组,这是通过入口文件产生的Home.Admin)----很实用! 比如:现在有Ho ...
- [Android学习笔记]ScrollView的使用
竖直滚动使用ScrollView 水平滚动使用HorizontalScrollView 如果需要禁止ScrollView的滚动,则需要扩展ScrollView类,重写onTouchEvent方法.