hyper threading on/off ?

736 views
Skip to first unread message

Choonho Son

unread,
Jan 16, 2013, 5:44:40 AM1/16/13
to osin...@googlegroups.com
xen에서 hyper threading을 on하고 vm을 여러개 만드는 것과 off를 하고 vm을 여러개 만드는 것과의 차이점은 뭘까요?

그리도 둘 중에 어떤 설정이 좀더 좋을까요?

Choonho Son

unread,
Jan 17, 2013, 9:37:00 AM1/17/13
to osin...@googlegroups.com
Hyperthreading은 single physical core에 두개의 arch state 통해서 두개의 logical processor가 존재하는 것입니다.
그런데 hyperthreading을 off해서 물리적으로 존재하는 하나의 arch state를 사용하지 않으면 손해인듯.

bare metal 서버에서 single process의 power를 높이려면 hyper threading을 꺼는게 좋지만,
cloud처럼 하나의 서버에 여러 개의 가상머신이 동작한다면 hyperthreading을 켜서 전체의 효율을 높이는게 좋지 않을까요?

Min Lee

unread,
Jan 18, 2013, 12:59:35 AM1/18/13
to osin...@googlegroups.com
hyperthreading은 보통 SMT라고 불리는 기술의 하나입니다. 실제 물리코어 하나
를 4개 개씩으로 불릴수 있는 기술이죠.. 실제 구현은 꽤나 쉬운 편입니다.. 하
드웨어 자원이 비교적 크게들지 않고도 여러 코어로 보이게할수 있는 기법이..
알파에서 처음 구현되었다가 인텔로 넘어가는 바람에 인텔에서도 구현되었다고
합니다. 비슷한 종류로 하드웨어 MT(multithreading)기법이 있습니다.
암튼 이런 기법은 cpu안에 놀고있는 자원들을 최대한 활용하자는 아이디어인데요,
인텔에서 hyperthreading이라는 이름으로 SMT를 구현했습니다. 근데 물리코어당
2개의 논리코어만을 만들었죠.. 그 이상 넘어가면 아마 단점들이 마구 드러나지
않을까싶습니다.
자세한 얘기를 하자면 끝이 없으니 이만 줄이고, 좀더 썰을 풀어보자면..
코어가 마치 2개로 보이니 성능이 2배가 될리는...없죠 물론..
물리코어가 2개가 되어도 성능이 2배가 되지도 않는 마당에 말이죠..
물리코어가 설사 2개 라고해도 메모리가 공유되기때문에 서로 성능을 저해할수
있습니다.
물론 메모리대역폭이 충분하게 만드니까 그런일이 그다지 없을뿐이죠..
어떤 워크로드에 대해서는 그런일이 벌어질수도 있습니다..
이러한 현상은 일반적인 현상입니다.. 아랫부분에서는 어디선가 자원들이 경쟁적
으로 공유되고 있기때문이죠..
결론적으로는, hyperthreading은 실제로는 물리코어하나뿐이라서, cpu내의
다른 자원들은 전부 공유됩니다. 대표적으로 캐시가 공유되기 때문에
오히려 서로가 상대방의 캐시라인을 지워버리는 바람에 성능이 서로 떨어질수 있
습니다..
그리고 그것도 크게..떨어질수 있기때문에 고성능을 원한다면 차라리 끄는것이
좋겠습니다. 캐시를 많이 사용하는 프로세스 두개가 하나의 물리코어에 스케쥴되
면..재앙이라고 보시면 되겠습니다.. 성능이 몇배씩 떨어지기도 합니다.
이렇게 cache contention문제에 대한 논문도 많이 나와있습니다..
물론 best case로 캐시를 거의 사용하지 않으면서 오래도는 프로그램이라면
hyperthread가 두배 가까운 성능을 보여주겠지만, 이런건 좀 드물죠..
그래서 스케쥴링이 중요한데, 이렇게 서로간의 영향을 줄여주기 위해서 잘~~ 스
케쥴링해야하겠습니다..만.. 이런거 다 연구과정이고 딱 부러지는 방법은 현재
안보이는 실정입니다.. 그리고 아무리 잘 스케쥴링한다고 해도 애초에 물리코어
가 두개인것이 훨씬 낫겠죠..
그리고 전력소비문제가 껴들면 문제가 더 복잡해지죠.. 전력을 얼마나 더 먹는지는
모르겠지만 만약 2배의 성능/throughput이 나왔는데 전력도 2배 가까이 더 먹는
다면 과연 그게 '효율적'인 것인지도 좀 의문이긴 합니다..
말이 자꾸 두서없어지는데, 결론은, workload의 특성에 따라 다르다는..얘기가
되겠습니다. 클라우드환경이라면, 저라면 예를 들어 hyperthread를 켜놓은 경우
에는 가격을 싸게 받고 아닌 경우에는 좀더 비싸게 받거나 해서 팔수는 있을것
같습니다.
아무래도 hyperthread끈 경우가 더 좋은 코어라고 볼수 있겠죠.
그래서, 클라우드같은 환경이라면 더더욱 hyperthread를 켠다고해서 전체 효율이
높아진다고 볼수는 없을것 같습니다...
뭐 그러한 등등의 이유로 개인적으로 hyperthread 꺼놓고 잘 안씁니다만..
서버나 클라우드환경에서 특정한 워크로드만 돌린다면 hyperthread가 이득이 되
는 경우도 있을수 있겠죠... 그러나 과연??
> --
> Google 그룹스 'osinside' 그룹에 가입했으므로 본 메일이 전송되었습니다.
> 웹에서 이 토론을 보려면 https://groups.google.com/d/msg/osinside/-
> /iZTpohfmUYcJ을(를) 방문하세요.
> 이 그룹에 게시하려면 osin...@googlegroups.com(으)로 이메일을 보내세요.
> 그룹에서 탈퇴하려면 osinside+u...@googlegroups.com로 이메일을 보내주
> 세요.
> 더 많은 옵션을 보려면 http://groups.google.com/group/osinside?hl=ko에서 그
> 룹을 방문하세요.

Leonardo YongUk Kim

unread,
Jan 18, 2013, 1:05:35 AM1/18/13
to osin...@googlegroups.com
http://dalinaum-kr.tumblr.com/post/8008351179/chip-level-multithreading

제가 SMT에 관한 글을 적었던 적이 있어 공유드립니다.

Regards,
Leonardo YongUk KIM


2013/1/18 Min Lee <min...@gatech.edu>
그룹에서 탈퇴하려면 osinside+unsubscribe@googlegroups.com로 이메일을 보내주

세요.
더 많은 옵션을 보려면 http://groups.google.com/group/osinside?hl=ko에서 그
룹을 방문하세요.
--
Google 그룹스 'osinside' 그룹에 가입했으므로 본 메일이 전송되었습니다.
이 그룹에 게시하려면 osin...@googlegroups.com(으)로 이메일을 보내세요.
그룹에서 탈퇴하려면 osinside+unsubscribe@googlegroups.com로 이메일을 보내주세요.

Min Lee

unread,
Jan 18, 2013, 3:36:47 AM1/18/13
to osin...@googlegroups.com
글 잘 읽었습니다.. 좋은글인것 같습니다. 블로그 잘 보도록 하겠습니다.
안드로이드관련 일을 하시는듯.. 유용한 글들이 많군요.

On 1/18/2013 1:05 AM, Leonardo YongUk Kim wrote:
> http://dalinaum-kr.tumblr.com/post/8008351179/chip-level-multithreading
>
> 제가 SMT에 관한 글을 적었던 적이 있어 공유드립니다.
>
> Regards,
> Leonardo YongUk KIM
>
>
> 2013/1/18 Min Lee <min...@gatech.edu <mailto:min...@gatech.edu>>
> https://groups.google.com/d/__msg/osinside/-
> <https://groups.google.com/d/msg/osinside/->
> /iZTpohfmUYcJ을(를) 방문하세요.
> 이 그룹에 게시하려면 osin...@googlegroups.com
> <mailto:osin...@googlegroups.com>(으)로 이메일을 보내세요.
> 그룹에서 탈퇴하려면 osinside+unsubscribe@__googlegroups.com
> <mailto:osinside%2Bunsu...@googlegroups.com>로 이메일을 보내주
> 세요.
> 더 많은 옵션을 보려면
> http://groups.google.com/__group/osinside?hl=ko
> <http://groups.google.com/group/osinside?hl=ko>에서 그
> 룹을 방문하세요.
>
>
> --
> Google 그룹스 'osinside' 그룹에 가입했으므로 본 메일이 전송되었습니다.
> 이 그룹에 게시하려면 osin...@googlegroups.com
> <mailto:osin...@googlegroups.com>(으)로 이메일을 보내세요.
> 그룹에서 탈퇴하려면 osinside+unsubscribe@__googlegroups.com
> <mailto:osinside%2Bunsu...@googlegroups.com>로 이메일을 보내주세요.
> 더 많은 옵션을 보려면 http://groups.google.com/__group/osinside?hl=ko
> <http://groups.google.com/group/osinside?hl=ko>에서 그룹을 방문하세요.
>
>
> --
> Google 그룹스 'osinside' 그룹에 가입했으므로 본 메일이 전송되었습니다.
> 이 그룹에 게시하려면 osin...@googlegroups.com(으)로 이메일을 보내세요.
> 그룹에서 탈퇴하려면 osinside+u...@googlegroups.com로 이메일을 보내주

Choonho Son

unread,
Jan 23, 2013, 1:55:51 AM1/23/13
to osin...@googlegroups.com

우리의 실험 결론은 가상화 환경에서는 HT 사용을 권장합니다~~ 입니다.

ㅇ workload가 적으면 HT enable 나 disable 이나 큰 성능차는 없음 (1VM/ 1 Hypervisor)
ㅇ workload가 많으면 HT enable이 조금더 효율이 좋음 (4VM/ 1 Hypervisor)

ㅇ 즉 클라우드 환경에서는 1개의 Hypervisor에 10개 정도의 VM을 돌리고 있다면, VCPU를 대기하고 있는 VM들이 CPU를 사용하고 있는 놈들보다 많다는 거죠.
. 따라서 HT를 켜서 CPU를 대기하고 있는 VM의 수를 줄이는 것이, HT를 disable해서 cache hit ratio를 높이는것보다 좋다.가 잠정 결론이었습니다.


P.S. 첨부 그림 참조

Intel HT 기술문서를 보면, 하나의 Core에 두개의 Architecture state(registers)가 존재한다고 합니다.

캐쉬는 공유하지만요.

architecture

  • architecture state를 구성하기 위한 register
    • complete general purpose register set
    • control register
    • APIC register
    • some machine state register
  • 공유 part
    • cache
    • execution unit
    • branch predictor
    • control logic
    • buses

HT_benchmark.png

Min Lee

unread,
Jan 23, 2013, 12:19:13 PM1/23/13
to osin...@googlegroups.com
오호.. 재미있네요.. 흥미로운 결과 공개해주셔서 감사합니다..
네, 대기하고있는 VM수를 줄여주는것이 훨씬 좋겠습니다.. 생각보다 캐시의 영향
은 미미하다는 얘기네요.. 캐시가 요즘엔 꽤나 크니까요.. 이해됩니다..

실험에 대한 몇가지 질문..
(1) 먼저 하드웨어구성?? PCPU 몇개인가요? 캐시 사이즈는?
(2) 커널빌딩의 경우 12vcore 1vm은 12VCPU를 가진 VM 하나이죠? 그리고 그 안에
서 make -j12 를 하셨을거고, 12vcore 4vm은 똑같은것이 4개 VM으로 도는것이
죠?? 그럼 총 48VCPU네요?
(3) 나머지 두개의 실험에서 4VM은 1VM을 똑같이 4개 카피해서 동시에 돌리신것
맞나요? 즉 워크로드가 4배로 증가한걸로 이해됩니다만,.. 측정은 정확히 어떤것
을 측정하신건가요? 각 VM내의 workload가 끝난 시간(elapsed time)인가요 아님
전체 VM이 끝난 시간인가요..

귀한 자료 감사합니다~~ㅎㅎ


On 1/23/2013 1:55 AM, Choonho Son wrote:
>
> 우리의 실험 결론은 가상화 환경에서는 HT 사용을 권장합니다~~ 입니다.
>
> ㅇ workload가 적으면 HT enable 나 disable 이나 큰 성능차는 없음 (1VM/ 1
> Hypervisor)
> ㅇ workload가 많으면 HT enable이 조금더 효율이 좋음 (4VM/ 1 Hypervisor)
>
> ㅇ 즉 클라우드 환경에서는 1개의 Hypervisor에 10개 정도의 VM을 돌리고 있다
> 면, VCPU를 대기하고 있는 VM들이 CPU를 사용하고 있는 놈들보다 많다는 거죠.
> . 따라서 HT를 켜서 CPU를 대기하고 있는 VM의 수를 줄이는 것이, HT를 disable
> 해서 cache hit ratio를 높이는것보다 좋다.가 잠정 결론이었습니다.
>
>
> P.S. 첨부 그림 참조
>
>
> Intel HT 기술문서를 보면, 하나의 Core에 두개의 Architecture
> state(registers)가 존재한다고 합니다.
>
> 캐쉬는 공유하지만요.
>
>
> architecture
>
> * architecture state를 구성하기 위한 register
> o complete general purpose register set
> o control register
> o APIC register
> o some machine state register
>
> * 공유 part
> o cache
> o execution unit
> o branch predictor
> o control logic
> o buses
> o
>
>
> On Friday, January 18, 2013 5:36:47 PM UTC+9, Min Lee wrote:
>
> 글 잘 읽었습니다.. 좋은글인것 같습니다. 블로그 잘 보도록 하겠습니다.
> 안드로이드관련 일을 하시는듯.. 유용한 글들이 많군요.
>
> On 1/18/2013 1:05 AM, Leonardo YongUk Kim wrote:
> >
> http://dalinaum-kr.tumblr.com/post/8008351179/chip-level-multithreading
> <http://dalinaum-kr.tumblr.com/post/8008351179/chip-level-multithreading>
> >
> > 제가 SMT에 관한 글을 적었던 적이 있어 공유드립니다.
> >
> > Regards,
> > Leonardo YongUk KIM
> >
> >
> > 2013/1/18 Min Lee <min...@gatech.edu <javascript:>
> <mailto:min...@gatech.edu <javascript:>>>
> <https://groups.google.com/d/__msg/osinside/->
> > <https://groups.google.com/d/msg/osinside/-
> <https://groups.google.com/d/msg/osinside/->>
> > /iZTpohfmUYcJ을(를) 방문하세요.
> > 이 그룹에 게시하려면 osin...@googlegroups.com <javascript:>
> > <mailto:osin...@googlegroups.com <javascript:>>(으)로 이메일
> 을 보내세요.
> > 그룹에서 탈퇴하려면 osinside+unsubscribe@__googlegroups.com
> <http://googlegroups.com>
> > <mailto:osinside%2Bunsu...@googlegroups.com
> <javascript:>>로 이메일을 보내주
> > 세요.
> > 더 많은 옵션을 보려면
> > http://groups.google.com/__group/osinside?hl=ko
> <http://groups.google.com/__group/osinside?hl=ko>
> > <http://groups.google.com/group/osinside?hl=ko
> <http://groups.google.com/group/osinside?hl=ko>>에서 그
> > 룹을 방문하세요.
> >
> >
> > --
> > Google 그룹스 'osinside' 그룹에 가입했으므로 본 메일이 전송되었
> 습니다.
> > 이 그룹에 게시하려면 osin...@googlegroups.com <javascript:>
> > <mailto:osin...@googlegroups.com <javascript:>>(으)로 이메일을
> 보내세요.
> > 그룹에서 탈퇴하려면 osinside+unsubscribe@__googlegroups.com
> <http://googlegroups.com>
> > <mailto:osinside%2Bunsu...@googlegroups.com <javascript:>>로
> 이메일을 보내주세요.
> > 더 많은 옵션을 보려면
> http://groups.google.com/__group/osinside?hl=ko
> <http://groups.google.com/__group/osinside?hl=ko>
> > <http://groups.google.com/group/osinside?hl=ko
> <http://groups.google.com/group/osinside?hl=ko>>에서 그룹을 방문하세요.
> >
> >
> > --
> > Google 그룹스 'osinside' 그룹에 가입했으므로 본 메일이 전송되었습니다.
> > 이 그룹에 게시하려면 osin...@googlegroups.com <javascript:>(으)로 이
> 메일을 보내세요.
> > 그룹에서 탈퇴하려면 osinside+u...@googlegroups.com <javascript:>로
> 이메일을 보내주
> > 세요.
> > 더 많은 옵션을 보려면 http://groups.google.com/group/osinside?hl=ko
> <http://groups.google.com/group/osinside?hl=ko>에서 그
> > 룹을 방문하세요.
>
> --
> Google 그룹스 'osinside' 그룹에 가입했으므로 본 메일이 전송되었습니다.
> 웹에서 이 토론을 보려면 https://groups.google.com/d/msg/osinside/-
> /eV7556KmGfUJ을(를) 방문하세요.

Min Lee

unread,
Jan 23, 2013, 12:36:30 PM1/23/13
to osin...@googlegroups.com
커널빌딩의 경우는 이해가 가는데, 다른 두개의 실험은 정확히 어떻게 실험이 된
것인지 궁금하네요.. 조금만 자세히 알려주세요..ㅎㅎ
감사

Choonho Son

unread,
Jan 24, 2013, 6:53:07 PM1/24/13
to osin...@googlegroups.com
ㅇ 서버향 CPU, 아마 X5690(6core/socket) 또는 E5-2690(8core/socket) 둘 중에 하나일겁니다. (후배한테 방법만 가르켜 주고 시킨거라 ㅋㅋ)
ㅇ 서버는 2socket 이어서 2690 일 경우 16 cores with No HT, 32 cores with HT 가 되죠.

벤치마킹은 벤치마킹 결과 첨부파일에 있는 벤치마킹 툴을 돌린건데,
커널 컴파일시 모든 CPU가 사용중이었다고 하니, 아마 커널컴파일을 병렬로 했을 것 같아요. ㅋㅋ
(다른 일로 너무 바쁘다 보니, 몇몇 일은 후배한테 시키고 결과만 접수 ^^)

Min Lee

unread,
Jan 24, 2013, 8:08:29 PM1/24/13
to osin...@googlegroups.com
자세히 알면 좀더 썰을 풀어볼수도 있겠지만-_-;;
다들 바쁘니 생략..
general한 클라우드환경에서 HT를 켜는게 좋을것도 같네요..
> <javascript:> <javascript:>>로
> > 이메일을 보내주세요.
> > > 더 많은 옵션을 보려면
> > http://groups.google.com/__group/osinside?hl=ko
> <http://groups.google.com/__group/osinside?hl=ko>
> > <http://groups.google.com/group/osinside?hl=ko
> <http://groups.google.com/group/osinside?hl=ko>>>에서 그룹을 방문하세요.
> > >
> > >
> > > --
> > > Google 그룹스 'osinside' 그룹에 가입했으므로 본 메일이 전송되
> 었습니다.
> 이 그룹에서 탈퇴하고 더 이상 이메일을 받지 않으려면
> osinside+u...@googlegroups.com에 이메일을 보내세요.
> 이 그룹에 게시하려면 osin...@googlegroups.com(으)로 이메일을 보내세요.
> http://groups.google.com/group/osinside?hl=ko에서 그룹을 방문하세요.
> 더 많은 옵션을 보려면 https://groups.google.com/groups/opt_out을(를) 방문하
> 세요.
>
>
Reply all
Reply to author
Forward
0 new messages