이것은 실행하는 응용 프로그램 유형에 따라 다릅니다. 매우 트리거 만족도가 높은 WRT syscalls 응용 프로그램이 있다면 많은 양의 컨텍스트 전환을 기대할 수 있습니다. 대부분의 응용 프로그램이 유휴 상태이고 소켓에서 발생하는 상황에서만 깨우는 경우 컨텍스트 전환 속도가 낮을 것으로 예상 할 수 있습니다.
시스템 호출
시스템 호출은 고유 한 특성으로 컨텍스트 전환을 유발합니다. 프로세스가 시스템 호출을 수행하면 기본적으로 커널이 현재 시점 및 메모리에서 프로세스가 특권이없는 작업을 수행하도록 메모리에 인계하고 완료되면 동일한 지점으로 돌아갑니다.
Linux에서 write (2) syscall의 정의를 보면 매우 분명해집니다.
이름
쓰기-파일 디스크립터에 쓰기
개요
#포함
ssize_t write (int fd, const void * buf, size_t count);
기술
write ()는 버퍼가 가리키는 buf에서 파일까지 바이트 수까지 기록합니다.
파일 기술자 fd에 의해 참조됩니다. [..]
반품 가치
성공하면 쓴 바이트 수가 반환됩니다 (0은
아무것도 쓰여지지 않았다). 오류가 발생하면 -1이 반환되고 errno가 설정됩니다.
적절하게.
[..]
이것은 기본적으로 커널에게 프로세스에서 작업을 인계하고 count
바이트 로 이동 하여 현재 프로세스의 *buf
파일 디스크립터 fd
로 지정된 메모리 주소부터 시작 하여 프로세스로 되돌아 가서 프로세스가 어떻게 진행되는지 알려줍니다.
이를 보여주는 좋은 예는 Valve Source 기반 게임 전용 게임 서버 hlds 입니다. http://nopaste.narf.at/f1b22dbc9 는 플레이어가없는 게임 서버의 단일 인스턴스에 의해 수행 된 1 초 분량의 syscall을 보여줍니다. 이 프로세스는 Xeon X3220 (2.4Ghz)에서 약 3 %의 CPU 시간을 필요로합니다.
멀티 태스킹
컨텍스트 전환의 또 다른 소스는 syscall을 수행하지 않지만 다른 프로세스를위한 공간을 확보하기 위해 지정된 CPU에서 이동해야하는 프로세스 일 수 있습니다.
이것을 시각화하는 좋은 방법은 cpuburn 입니다. cpuburn은 자체 시스템 호출을 수행하지 않고 자체 메모리를 반복하므로 컨텍스트 전환을 유발하지 않아야합니다.
유휴 시스템을 사용하여 vmstat를 시작한 다음 시스템에있는 모든 CPU 코어에 대해 burnMMX (또는 cpuburn 패키지와 다른 테스트)를 실행하십시오. 그때까지 전체 시스템 사용률이 높아야하지만 컨텍스트 전환이 거의 발생하지 않습니다. 그런 다음 몇 가지 프로세스를 더 시작하십시오. 프로세스가 CPU 코어와 경쟁하기 시작하면 컨텍스트 전환 속도가 증가한다는 것을 알 수 있습니다. 전환 량은 프로세스 / 코어 비율 및 커널의 멀티 태스킹 해상도에 따라 다릅니다.
추가 자료
linfo.org에는 컨텍스트 스위치 및 시스템 호출 에 대한 훌륭한 글 이 있습니다. Wikipedia 에는 일반적인 정보와 시스템 호출에 대한 유용한 링크 모음이 있습니다.