CPU 코어 (또는 다른 기능)에 따라 "정상"컨텍스트 스위치는 몇 개입니까?


34

리눅스 / 유닉스 대 군주 여러분, 안녕하세요.

리눅스 서버에서 몇 개의 컨텍스트 스위치 (프로세서 코어 당)가 정상인지 에 대한 경험이 있습니까?

우리 대학이이 학교를 설립했고 8 코어 x86_64컴퓨터 에서 16K를보고 있습니다.

지난 며칠 동안 sarface의 통계는 다음과 같습니다.

대체 텍스트 http://src.autonomy.net.au/imagebin/81895e338fae67d3d205c09db44a81e6-Picture_10.png

프로세스 생성 통계를 보려면 동일한 그래프에 대한 로그보기가 있습니다.

대체 텍스트 http://src.autonomy.net.au/imagebin/7481f7e52bead4effc90248fc23c72fe-Picture_11.png

그리고 8 개의 핵심은 지루해합니다 ...

대체 텍스트 http://src.autonomy.net.au/imagebin/0e94326652e977fd74edcd840f94200f-Picture_12.png

CS 대 IOwait (x10000 스케일)

대체 텍스트 http://src.autonomy.net.au/imagebin/a52a2a8a120394849c0da4045933e306-Picture_13.png

누군가가 요구할 경우에 쓸모없는 정보 ..

  • 서버가 작동하는 스토리지는 FC를 통한 0.5TB SAN입니다.
  • 8GB의 RAM이 있으며 대부분 캐시이며 스와핑이 없습니다.

1
특정 기간에?
dmckee

워크로드에 대해 더 구체적으로 설명 할 수 있습니까?
dmo

1
그 그래프를 어떻게 만들었습니까? 정말 좋아 보인다!
Antoine Benkemoun

안녕 앙투안-그래프는 sarface ( projects.autonomy.net.au/sarface ) 에서 만들어졌습니다
Xerxes

그래프 링크는 현재 죽었습니다. @Xerxes 어딘가에서 거기에 갈 수 있습니까?
törzsmókus

답변:


25

이것은 실행하는 응용 프로그램 유형에 따라 다릅니다. 매우 트리거 만족도가 높은 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 에는 일반적인 정보와 시스템 호출에 대한 유용한 링크 모음이 있습니다.


1
이것은 유용했습니다-당신은 저에게 훌륭한 아이디어를주었습니다! =)
Xerxes

1
당신의 진술 System calls cause context switches by their very own nature은 잘못된 것 같습니다. 에 의해 명시된 바와 같이 시스템 모드 스위치 원인 호출 linfo.org/context_switch.html
니콜라스 Labrot에게

6

적당히로드 된 웹 서버는 거의 100 초에서 150 초 사이에 위치하며 수천 시간 동안 피크가 발생합니다.

높은 컨텍스트 전환 속도는 그 자체로는 문제가되지 않지만보다 중요한 문제를 지적 할 수 있습니다.

편집 : 컨텍스트 전환은 증상이 아니며 원인이 아닙니다. 서버에서 무엇을 실행하려고합니까? 다중 프로세서 시스템이있는 경우 기본 서버 프로세스에 CPU 선호도를 설정하려고 할 수 있습니다.

또는 X를 실행중인 경우 콘솔 모드로 드롭 다운하십시오.

다시 편집 : 초당 16k cs에서 각 CPU는 밀리 초 당 2 개의 스위치를 평균합니다. 즉, 정상적인 시간 조각의 절반에서 6 분의 1입니다. 많은 IO 바인딩 스레드를 실행할 수 있습니까?

포스트 그래프 다시 편집 : IO 바인딩 된 것으로 보입니다. 컨텍스트 스위치가 높을 때 시스템이 SYS에서 대부분의 시간을 보내고 있습니까?

한 번 더 편집 : 마지막 그래프의 높은 iowait 및 시스템-사용자 공간을 완전히 비 웁니다. IO 문제가 있습니다.
어떤 FC 카드를 사용하고 있습니까?

편집 : hmmm. 데드 타임 동안 bonnie ++ 또는 dbench를 사용하여 SAN 액세스에 대한 벤치 마크를 얻을 수 있습니까? 비슷한 결과가 있는지 확인하고 싶습니다.

편집 : 주말에 이것에 대해 생각하고 보니가 "한 번에 바이트 쓰기"패스를 수행 할 때 비슷한 사용법 패턴을 보았습니다. 각 쓰기에는 별도의 syscall이 필요하기 때문에 많은 양의 전환이 진행되고 있음을 설명 할 수 있습니다.


나는 여전히 높은 컨텍스트 전환 속도가 문제가 아니라고 확신하지 못합니다 .100-150이 아니라 4K에서 16K로 높은 것에 대해 이야기하고 있습니다.
크세르 크세스

우리 서버는 X를 실행하지 않습니다. IO 대기 문제와 CS와의 관계에 동의합니다. HBA 카드는 다른 백여 대의 서버에서 같은 카드를 사용하기 때문에 의심의 여지가 없습니다 ... 결론은 필사적으로 항상 노력하고 방어하는 SAN 팀의 엉뚱한 EVA SAN을 비난한다는 것입니다. 높은 IO 대기 시간이 항상 경보를받는 이유 는 아닙니다 . 머신의 대부분의 프로세스가 IO 바인딩 된 경우 서버가 유휴 회전을 수행하는 데 더 좋은 방법은 없을 것으로 예상됩니다.
크세르 크세스

두 번째로-첨부 된 네 번째 그래프는 실제로 처음에 가깝지 않다는 것을 보여줍니다. 어떤 식 으로든 일식이 아닙니다. 그래도 여전히 SAN을 비난합니다. =)
Xerxes

1

시스템 상태의 CPU 점유율에 대해 더 관심이 있습니다. 10 % 이상인 경우 OS가 컨텍스트 전환에 너무 많은 시간을 소비하고 있음을 의미합니다. 일부 프로세스를 다른 시스템으로 이동하는 것이 훨씬 느리더라도 그렇게 할 가치가 있습니다.


1

이와 같은 것들 때문에 서버의 성능 기준을 유지해야합니다. 이렇게하면 갑자기 발견 한 내용과 과거에 기록한 내용을 비교할 수 있습니다.

즉, 서버가 (주로 사용량이 많지 않은 Oracle 서버) 실행 중이며 4k 피크로 약 2k로 안정적입니다. 내 서버의 경우, 다른 사람들의 서버가 너무 낮거나 너무 높은 경우에는 정상입니다.

데이터에서 얼마나 멀리 갈 수 있습니까?

어떤 종류의 CPU 정보를 제공 할 수 있습니까?


나는 기준을 지키는 것에 동의하고, 우리는 nagios 데이터를 오랜 시간 동안 되돌려 놓았습니다.이 서버의 문제는 새로운 혈액이라는 것입니다. 또한 정의되지 않은 변수 목록에 추가하기 위해 엔터프라이즈 (읽기 : 쓰레기) 소프트웨어-Teamsite를 실행 중입니다. 나는 여전히 sar (개인 환경 설정)을 선호하므로 기본값 (2 주) 이상을 유지하도록 구성하고 어떻게 진행되는지 보겠습니다.
크세르 크세스

sar을 rrdtool과 함께 사용하면 (그래프에서 나온 것처럼 보임) 데이터를 오랫동안 (또는 최소한 초록으로) 쉽게 유지할 수 있습니다.
wzzrd

0

경험 법칙은 없습니다. 컨텍스트 스위치는 하나의 스레드를 다른 스레드로 처리하는 CPU입니다. 많은 프로세스 (또는 스레드가 많은 프로세스)를 실행하면 더 많은 스위치가 표시됩니다. 운 좋게도 컨텍스트 스위치의 수에 대해 걱정할 필요가 없습니다. 비용은 작고 피할 수없는 수준입니다.


6
실제로 컨텍스트 전환 비용비싸다 . 가상 머신에서는 최악입니다. 몇 달 전에 몇 가지 테스트를 수행 한 결과 VM 성능의 가장 큰 원인 중 하나는 컨텍스트 전환이었습니다.
크세르 크세스

실제로 모든 현대 (멀티 태스킹) 운영 체제에서 컨텍스트 전환을 최소화하는 것은 매우 중요한 최적화 작업입니다. 비용이 적다는 주장을 뒷받침 할만한 자료가 있습니까?
크세르 크세스

죄송합니다. OS 개발 관점에서 컨텍스트 스위치를 최소화하는 것에 대해 이야기하고 있습니까? 이러한 개발과는 아무런 관련이 없습니다 .CS를 최소화하기 위해 시스템을 설계하는 이점에 대해서는 아무런 의견이 없습니다. EG 머신의 프로세스 수를 줄이면 이러한 프로세스를 다른 머신으로 이동해야합니다. 즉, 네트워크를 통한 통신이 훨씬 느려집니다.
Alex J

컨텍스트 스위치에 대한 정의에 결함이 있다고 생각합니다. 또한 동일한 스레드로 리턴 되더라도 시스템 호출이 수행 될 때 발생합니다. 응용 프로그램은 다양한 트릭을 수행하여 이에 대해 최적화합니다. 예를 들어 Apache는 시스템 시간을 매우 자주 가져와야합니다. 이를 위해 스레드는 로컬 시간을 반복적으로 호출하고 결과를 공유 메모리에 저장합니다. 다른 스레드는 RAM에서 읽기만하면되므로 프로세스 전환이 발생하지 않습니다.
niXar 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.