주말에 스터디 쉬면 5420 기사를 보다가 커널분석시 참고해야 할 몇가지 사실이 있어 정리합니다.
ARM 커널 스터디 10차는 세 팀 모두 target을 exynos 5410으로 잡고 스터디 중이시니 참고하세요.
(exynos5410을 선정한 이유가 대부분 big.LITTLE 프로세싱 때문이므로 이와 관련 부분만 정리합니다.)
일단 결론은 아래와 같습니다.
1. exynos5410은 IKS를 지원하지 않을 것이다.
2. IKS(Core migration) 관련 코드는 3.11 또는 3.12에서 지원 예정이라하나 현재 3.11rc에는 포함되어 있지 않다.
IKS 분석을 위해서는 linaro에서 source를 pull할 필요가 있다.
3. GTS(HMP) 또한 linaro 사이트 참고 필요
<상세내용>
1. exynos5410은 IKS를 지원하지 않을 것이다.
현재 exynos5410은 CCI-400의 bug로 cluster간 HW coherence를 보장하지 못하여 CCI를 disable하여 사용한다.
"In the case of the 5410, the bus was functional but coherency was broken and manually disabled on the Galaxy S 4"
ref: http://www.anandtech.com/show/7164/samsung-exynos-5-octa-5420-switches-back-to-arm-gpu
따라서 A15와 A7의 L2 cache의 memory coherence를 맞추기 위해 core migration이 발생할 때 source cluster의 경우 해당 task의 data를 모두 main memory로 clean시키고 target cluster에서 해당 task관련 memory를 invalidate하여야한다.
이말의 의미는 core migration이 빈번하게 발생하는 경우 불필요한 clean & invalidation으로 성능이 열화되기 쉬우므로 IKS의 지원이 어렵다.
현재의 cluster migration의 경우 상대적으로 드물게 발생한다. 그러나 exynos5420의 경우 이같은 coherence가 필요한 경우에만 HW에 의해 자동으로 이루어지므로 성능 향상이 크다.
(삼성 측에 따르면 core 성능이 20%향상되었다고 발표. clock은 1.6GHz->1.8GHz로 13%정도 향상, 이외에 CCI 수정, core revision 등에 의해 나머지 성능 향상(core revision은 성능보다는 bug와 power 효율 측면이 주된 것임을 감안할 때 CCI에 의한 성능 향상 이득이 5% 이상을 될 것으로 추측됨)
2&3. IKS & GTS
일단 Cluster Migration, IKS, GTS의 개념을 모르시는 분은 ARM tech symposium자료를 찾아보세요.
간단히 얘기 하면
cpu busy(computation intensive)한 경우와 CPU Idle 한 경우에 대해
Cluster migration은 big core cluster와 little core cluster를 통째로 switching (cluster는 MPCore단위로 보통 2 또는 4 core)
즉 exynos 5410의 경우 동작이 big core 4개 이거나 little core 4개로만 동작
IKS(Core migration)은 cluster migration의 fine granularity version으로 big+little을 virtual core 1개로 보고 virtual core내에서 big <-> little간 전환은 자유롭게 가능
즉 4big, 4little 뿐만 아니라 1big+3little 같은 조합도 가능
GTS(HMP)는 big과 little을 모두 가용 자원으로 사용가능
즉 4big+4little와 같이 모든 코어를 동시에 사용가능
참고로 IKS의 경우 big little core의 수가 같아야 하지만 HMP의 경우 4big+1little 같이 비대칭 big.LITTLE도 지원 가능.
IKS GTS 참고: http://www.linaro.org/linaro-blog/2013/07/10/big-little-software-update/
3.11 또는 3.12에서 IKS 지원예정 ref: http://en.wikipedia.org/wiki/Big.LITTLE
linaro iks, hmp 관련 reference
https://wiki.linaro.org/projects/big.LITTLE.MP참고로 리나로 site에서는 iks와 gts를 각각 big.LITTLE switcher, big.LITTLE MP로 지칭
IKS 관련 커널 코드
(관련 link)
http://www.linaro.org/linaro-blog/2013/05/02/the-linaro-iks-code-now-publicly-available/
(source description)
https://wiki.linaro.org/projects/big.LITTLE.MP/Big.Little.Switcher/Docs/in-kernel-code
HMP 관련 커널 코드
https://wiki.linaro.org/WorkingGroups/PowerManagement/Process/bigLittleMPTree
ps1: IKS나 HMP를 시험하시고 싶은 분들은 기다리셨다가 5420을 구입하셔야 합니다.
ps2: big.LITTLE때문에 5410을 선정했는데 big.LITTLE관련 스케쥴러는 linaro 소스코드를 따로 분석해야할 것 같네요.
ps3: 지금은 거의 상관이 없으나 나중에 스케줄러나 cpu 설정 (cpufreq등) 을 분석할 때는 target을 5420으로 IKS 관련 코드를 분석하는 것에 대해 여론 수렴이 필요해보입니다.
댓글 7
-
K
2013.08.09 04:22
-
신C
2013.08.10 22:56
좋은 정보 감사합니다^^
새로운 지식을 배웠네요 궁금한게 있는데요
지금 커널이 IKS나 GTS를 지원하지 않는다면
엑시노스는 빅리틀교환을 삼성에서 따로 구현 한건가요? -
K
2013.08.14 15:20
역시~ 깔끔하게 정리해주시는군요..^^
저도 비슷...하게나마 생각했던것 같긴 한데...(묻어가기 신공 ㅋㅋ)
머리속에 명확한 그림이 안들어있어서인지 표현이 좀 이상했군요..
덕분에 깔끔하게 알게되었습니다.
-
신C
2013.08.14 09:27
맞는지 모르겠지만^^;;
빅/리틀 스위칭과 캐쉬일관성의 방법은 구분이 필요한 것 같아요.
제가 이해한 것은 클러스터 마이그레이션, IKS, GTS는 빅/리틀 스위칭에 관한 방법이고,
Disable caching, Software managed coherency, Hardware managed coherency 캐쉬 일관의 일관성을 유지하기 위한 방법입니다.
CCI는 3번째 방법이 되겠죠.
따라서
"코어의 스위칭 방법으로 IKS나 GTS가 커널에 포함되지 않았으므로, 클러스터 마이그레이션이 사용되었다."
"여러 코어의 캐쉬일관성을 소프트웨어로 해결했기 때문에 성능이 떨어졌다."
처럼 구분하는 것이 맞지않을까하는 소설을 써봅니다. ^^;;
-
K
2013.08.13 12:58
CCI-400을 좀 찾아보고나니, 이런 상황이 아닐까 추측됩니다.
http://www.arm.com/products/system-ip/interconnect/corelink-cci-400.php
공유데이터를 관리하는 3가지 테크닉:
1. 캐시 사용안함 : 이건 성능문제가 있어서 생각조차 할 수 없음.. 그냥 공유데이터를 사용하는 방법 중 하나로 언급한 수준
2. 소프트웨어적으로 캐시일관성을 보장 : 캐시의 내용을 외부 메모리에 반영하여, 다른 프로세서 혹은 GPU 등이 공유데이터를 사용하게 함
3. 하드웨어적으로 캐시일관성을 보장 : 프로세서 및 GPU 사이를 연결(interconnect)하여 캐시의 내용을 직접 공유
따라서 enynos5410에서 CCI를 disable 했다는 것은 위 2번 방식을 사용했다는 것이고, 따라서 커널에 IKS나 GTS가 포함되어 있지 않아도 상관없다..
이게 좀 더 정확한(?) 소설인 듯 합니다. ^^
-
K
2013.08.10 23:26
제가 이해한 게 맞는지 모르겠네요. ^^;;
현재 엑시노스는 빅리틀교환을 클러스터 단위로 하고 있어요. 즉 빅4개를 쓰거나 리틀4개를 쓰거나..
IKS는 클러스터 단위가 아니라 클러스터을 구성하는 코아 단위로 마이그레이션을 하는거구요. 즉 빅1개와 리툴3개 이런 식으로..
따라서 삼성이 따로 구현해줄 필요는 없는것 아닐까요? -
신C
2013.08.12 20:30
감사합니다^^ 제가 잘못 이해했네요
.
올려주신 내용으로 공부하고 갑니다. ^^