Intel Software Guard ExtensionsïŒIntel SGXïŒãIntel Control-flow Enforcement TechnologyïŒIntel CETïŒãªã©ã®æ°ããåœä»€ãããŸã£ããæ°ããæ©èœãæäŸã§ããŸãã
![](https://habrastorage.org/webt/pe/0g/bo/pe0gbovlwuiycx-kappcb5zafsg.jpeg)
è¯ã質åã¯ãã¢ãŒããã¯ãã£ã«è¿œå ãããæ°ããåœä»€ããšã³ããŠãŒã¶ãŒã«å°éãããŸã§ã®æéã§ãã ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãšä»ã®ã¢ããªã±ãŒã·ã§ã³ã¯ãã€ã³ã¹ããŒã«ãããããã»ããµã®ã¢ãã«ã«é¢ä¿ãªããéåžžãäžäœäºææ§ãšå®è¡æ©èœãæäŸããããšãèæ ®ããŠãæ°ããåœä»€ãå©çšã§ããŸããïŒ äœå¹Žãåãæ°ããåœä»€ã®äœ¿çšã¯ãæ°ããã¢ãŒããã¯ãã£åãã«ããã°ã©ã ãåæ§ç¯ããå€ãããŒããŠã§ã¢ã§èµ·åããŠãç³ãèš³ãããŸãããããã®ããã°ã©ã ã¯ãã®ããŒããŠã§ã¢ã§ã¯ãµããŒããããŠããŸããããªã©ã®åºåãé²ãããã®ãã§ãã¯ãè¿œå ããããšã§éæãããŸããã
ãã«ãã©ãããã©ãŒã ã®Wind River Simicsã·ãã¥ã¬ãŒã¿ãŒã䜿çšããŠãå€ãããŒããŠã§ã¢ãšã®äºææ§ãç¶æããªãããææ°ã®ãœãããŠã§ã¢ãæ°ããåœä»€ãã©ã®çšåºŠäœ¿çšã§ãããã調ã¹ãŸããã
å®éšã»ããã¢ãã
ãœãããŠã§ã¢ãããŸããŸãªããŒããŠã§ã¢ã«åçã«é©å¿ããæ¹æ³ãèŠã€ããããã«ãããžã§ããªãã¯PCããã©ãããã©ãŒã ã®Simicsã¢ãã«ãš2ã€ã®ç°ãªãããã»ããµã¢ãã«ã䜿çšããŸããã ïŒã³ãŒãããŒã ã¯Skylakeã2015幎åã°ã«ãªãªãŒã¹ïŒã
äžèšã®æ§æã§å®è¡ããã次ã®Linuxèµ·åã¹ã¯ãªããã調æ»ããŸããã
- Ubuntu 16.04ãã«ãŒãã«ããŒãžã§ã³4.4ããªãªãŒã¹å¹Ž2016ã
- Yocto 1.8ãã«ãŒãã«ããŒãžã§ã³3.14ããªãªãŒã¹2014幎ã
- 2.6.39ã«ãŒãã«ã®Busyboxã2011幎補é 幎ã
ãã¹ãã«ã¯åããã£ã¹ã¯ã€ã¡ãŒãžã䜿çšãããããããœãããŠã§ã¢ã¹ã¿ãã¯ã¯å€æŽãããŸããã ä»®æ³ãã©ãããã©ãŒã ã®ããã»ããµæ§æã®ã¿ãç°ãªã£ãŠããŸããã æ°ããããŒããŠã§ã¢ã§å®è¡ãããŠããLinuxã¯ãæ°ããåœä»€ã䜿çšããããšãæåŸ ãããŠããŸããã åæ§æã¯ãã€ã³ã¹ãã«ã¡ã³ããŒã·ã§ã³ã¡ã«ããºã ãæ¥ç¶ããŠèµ·åãããååœä»€ãå®è¡ãããåæ°ãã«ãŠã³ãããŸããã Simicsã®æ¢åã®ã€ã³ã¹ãã«ã¡ã³ããŒã·ã§ã³ã¡ã«ããºã ã¯ãã²ã¹ãã¢ããªã±ãŒã·ã§ã³ã®åäœãå€æŽãããããã»ããµã³ãã³ãã¬ãã«ã§åäœãããšããäºå®ã«ããããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã®BIOSãšã«ãŒãã«ã®ããŒãã調æ»ã§ããŸãã åæã«ãå®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ã¯ãã€ã³ã¹ãã«ã¡ã³ããŒã·ã§ã³ã䜿çšããŠèµ·åãããã©ãããå€æã§ããŸããã åæ§æã¯ã60ç§éã®ä»®æ³æéã§å®è¡ãããŸããã BIOSãšãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãèµ·åããã«ã¯ããã§ååã§ãã åèµ·ååŸã100ã®æãé »ç¹ã«äœ¿çšãããåœä»€ãéžæãããããã«åæããããã«äœ¿çšãããŸããã
ããã»ããµèå¥ã®åºç€ãåŠã¶
ãã®äœæ¥ã®åºç€ã¯ã䜿çšããæ©åšã«å¿ããŠãœãããŠã§ã¢ãå®è¡å¯èœã³ãŒããåçã«é©å¿ã§ãããšããåæã«ãããŸãã ã€ãŸããåããã€ããªæ§é ã§ã¯ãç°ãªãæ©åšã§ç°ãªãåœä»€ã䜿çšã§ããŸãã
ãã®ãããªåçãªé©å¿ãã©ã®ããã«æ©èœããããç解ããã«ã¯ãéãã©ã®ããã«æ©èœããããç解ããå¿ èŠããããŸãã éå»ã«ãããã»ããµãã»ãšãã©ãªããæ°ããã¢ãã«ããã£ãã«ç»å Žããªãå ŽåããœãããŠã§ã¢ã¯ããã©ãŒãã³ã¹ãIntel 80386ãŸãã¯80486ãMotorola 68020ãŸãã¯68030ã§ãããã©ãããç°¡åã«ç¢ºèªããããã«å¿ããŠåäœã調æŽã§ããŸããã çŸåšãéåžžã«å€æ§ãªã·ã¹ãã ããããŸãã IA-32ããã»ããµãŒã®èå¥åé¡ã解決ããã«ã¯ãCPUIDåœä»€ã䜿çšããŸã ãããã¯ãæ©åšã®ããŸããŸãªåŽé¢ãèšè¿°ããè€éãªã·ã¹ãã ã§ãã
ãããããCPUIDåœä»€ã䜿çšããŠååŸããæ å ±ã¯ããã®ãœãŒã¹ã«ã€ããŠãèããã«ãã§ã«æºãããŠããã§ãããã ããšãã°ãMicrosoft Windows 8.1ã®ã¿ã¹ã¯ãããŒãžã£ãŒã«ã¯ãCPUIDåœä»€ã䜿çšããŠååŸãããããã»ããµãŒã®ã¿ã€ãããã³ãã®ä»ã®ç¹æ§ã«é¢ããæ å ±ã衚瀺ãããŸãã
![](https://habrastorage.org/webt/ji/-w/st/ji-wstiocksxzp2e5pxpkl0ixws.jpeg)
Linuxã§ã¯ããcat / proc / cpuinfoãã³ãã³ãã䜿çšããŠãçŸåšã®ã·ã¹ãã ã§äœ¿çšå¯èœãªã³ãã³ãã»ããæ¡åŒµæ©èœã®ãã©ã°ãªã©ãå æ¬çãªããã»ããµãŒæ å ±ã衚瀺ã§ããŸãã åæ¡åŒµæ©èœã«ã¯ç¬èªã®ãã©ã°ãããããœãããŠã§ã¢ã¯å®è¡ãéå§ããåã«ãã®ãã©ã°ã確èªããå¿ èŠããããŸãã 第4äžä»£Intel Core i5ããã»ããµãŒã§åéãããæ å ±ã®äŸã次ã«ç€ºããŸãã
![](https://habrastorage.org/webt/6_/nl/51/6_nl51-y_2-ktll9zwo1tsfnl-y.png)
CPUIDã¯ãããã»ããµã§å©çšå¯èœãªããŸããŸãªåœä»€ã»ããæ¡åŒµã«é¢ããæ å ±ãæäŸããŸããããœãããŠã§ã¢ã¯ããããã®ãã©ã°ãå®éã«äœ¿çšããŠãããŒããŠã§ã¢ã«å¿ããŠé©åãªãã€ããªã³ãŒããéžæããŸããïŒ éæšæºåœä»€ã䜿çšãããã¹ãŠã®å Žæã«if-then-elseæ§é ãé©çšããã®ã¯è³¢æã§ã¯ãããŸããã ãããã®ç¹æ§ã¯ã»ãã·ã§ã³äžã«å€æŽãããªããããäžåºŠã ããã§ãã¯ããã°ååã§ãã
Linuxã¯éåžžãç°ãªãæ©èœã䜿çšããŠåãæ©èœãå®è£ ããé¢æ°ãã€ã³ã¿ãŒã䜿çšããŸãã è¯ãäŸã¯ããã¡ã€ã«arch / x86 / crypto / sha1_ssse3_glue.c ïŒsource elixir.free-electrons.com/linux/v4.13.5/source ïŒã«ãããŸãïŒ
![](https://habrastorage.org/webt/kr/8z/si/kr8zsir0nlzwtjbqrfhmeewocpw.png)
ãããã®é¢æ°ã¯ç¹å®ã®æ©èœããã§ãã¯ãã察å¿ããããã·ã¥é¢æ°ãç»é²ããŸãã åŒã³åºãã®é åºã«ãããæãå¹ççãªå®è£ ã䜿çšãããŸãã å ·äœçã«ã¯ããã®å Žåãæè¯ã®ãœãªã¥ãŒã·ã§ã³ã¯SHA-NIæ¡åŒµåœä»€ã«åºã¥ããŠããŸãããããããå©çšã§ããªãå Žåã¯ãAVXãŸãã¯SSEå®è£ ã䜿çšãããŸãã
çµæ
以äžã®ã°ã©ãã¯ã6ã€ã®ç°ãªãæ§æïŒ2ã€ã®ããã»ããµãš3ã€ã®ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ïŒãèµ·åããçµæã瀺ããŠããŸãã ãã¹ãŠã®åœä»€ã衚瀺ããããã®æ°ã¯å®è¡ã®åèšæ°ã®1ïŒ ãè¶ ããŸãã ãV1ããšã¯ãCore i7ã¢ãã«ã®ç¬¬1äžä»£ããv6ãïŒ6çªç®ïŒã®çºå£²ãæå³ããŸãã
![](https://habrastorage.org/webt/xa/2t/if/xa2tifu5jb5koe-sagqglbs_9i8.png)
ããèªäœã瀺åããæåã®çµè«ïŒã»ãšãã©ã®æ瀺ã¯ããã»ã©æ°ãããã®ã§ã¯ãããŸããã ãããããããã¯Intel 8086ã«è¿œå ãããåºæ¬çãªåœä»€ãã€ãŸã移åãæ¯èŒããžã£ã³ããè¿œå ã«é¢é£ããŠããŸãã æ°ããåœä»€ã«ã€ããŠã¯ãããããè¿œå ãããæ¡åŒµæ©èœã®ååãæ¬åŒ§å ã«æžãããŠããŸãã æãé »ç¹ã«äœ¿çšããã28ã®ãªã¹ãã«ã¯ããã£ã6ã€ã®æ°ããåœä»€ãããããŸããã
æããã«ãç°ãªãããã»ããµã®äœ¿çšã«èµ·å ããå€åã«å ããŠãLinuxã®ç°ãªãããŒãžã§ã³éã§å€åããããŸãã ããšãã°ãå€ãã«ãŒãã«ã§æ§æãããBusyBoxã¯ãä»ã®ããŒãžã§ã³ã®ã«ãŒãã«ã§ã¯äžè¬çã§ã¯ãªãLEAVEåœä»€ã䜿çšããPOPåœä»€ãã¯ããã«å°ãªã䜿çšããŸãã ãã ããããã¯ãæ°ããåœä»€ã䜿çšå¯èœãªå Žåã«ãœãããŠã§ã¢ãã©ã®ããã«äœ¿çšããããšãã質åã«ã¯çããŸããã ç§ãã¡ã®ç®çã«ãšã£ãŠãæãèå³æ·±ãããªãšãŒã·ã§ã³ã¯ãåããœãããŠã§ã¢ã¹ã¿ãã¯ãèµ·åãããšãã®ããã»ããµã®äžä»£ã®å€åã«ãã£ãŠåŒãèµ·ããããŸãã
ãã®äœæ¥ã§èª¿æ»ãããã¹ãŠã®ã·ããªãªã¯ãLinuxãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ã«ããŸããŸãªã«ãŒãã«ãã©ã¡ãŒã¿ãŒãèªã¿èŸŒãã§ããŸãã ããã«ãããŸããŸãªãã©ã°ã䜿çšããŠãããŸããŸãªããŒãžã§ã³ã®ã³ã³ãã€ã©ã§ããŸããŸãªãã£ã¹ããªãã¥ãŒã·ã§ã³ãã³ã³ãã€ã«ã§ããŸãã ãããã£ãŠãåããœãŒã¹ã䜿çšããŠã³ã³ãã€ã«ããããã€ããªã³ãŒãã§ãç°ãªãå ŽåããããŸãã
Yoctoã®äŸã§ã¯ããã®å¹æãèŠãããŸãã Yoctoã¯ãADCXãADOXãããã³MULXåœä»€ïŒADXããã³BMI2æ¡åŒµã«å«ãŸããïŒã䜿çšããŸãã ãã®äŸã¯ããœãããŠã§ã¢ã«æ°ããåœä»€ã衚瀺ãããé床ããã瀺ããŠããŸãã ãããã®3ã€ã®åœä»€ã¯ãYoctoã§äœ¿çšãããŠããLinuxã«ãŒãã«ãšã»ãŒåæã«ãªãªãŒã¹ããã第5äžä»£Intel Coreããã»ããµãŒã«è¿œå ãããŸããã ã€ãŸããæ°ããåœä»€ã®ãµããŒãã¯ãããã»ããµãåžå Žã«ç»å Žãããšãã«è¿œå ãããŸããã æ°ããåœä»€ã®ä»æ§ã¯å€ãã®å ŽåãããŒããŠã§ã¢ã®å®è£ ãããåã«å ¬éããããããããã¯é©ãããšã§ã¯ãããŸããã ã€ãŸãããœãããŠã§ã¢ã¯æ°ããããŒããŠã§ã¢ã«åäœãäºåã«é©åãããããšãã§ããŸãïŒãã®ãããã¯ã«é¢ããèå³æ·±ãèšäº ïŒãå€ãã®å Žåããããã°ãšãã¹ãã«ä»®æ³ãã©ãããã©ãŒã ã䜿çšããŸãã
ãã ããæ°ããã«ãŒãã«ãæèŒããUbuntu 16.04ã¯ADXãšBMI2ã䜿çšããŸãããããã¯ãæ§æãç°ãªãããšã瀺åããŠããŸãã ããããããã¯ãã³ã³ãã€ã©ã®ããŒãžã§ã³ãŸãã¯ãã©ã°ãã«ãŒãã«ãã©ã¡ãŒã¿ããŸãã¯ã€ã³ã¹ããŒã«ãããããã±ãŒãžã®ã»ãããåå ã§ãã
å¶åŸ¡ãããŒã®å€æŽ
èå³æ·±ãã®ã¯ãå¶åŸ¡ãããŒãå€æŽããããã«ã©ã®åœä»€ã䜿çšãããããšããããšã§ãã ããã·ãŒãšãã¿ãŒãœã³ã«ããåæ§ã«å€å žçãªæ¬ã§èª¬æãããŠããå€å žçãªèŠåã¯ã6çªç®ã®åœä»€ããšã«ãžã£ã³ãã§ãããšè¿°ã¹ãŠããŸãã ãã ãã枬å®ã§ã¯ã5ã€ã®åœä»€ã®ãã¡çŽ1ã€ãå¶åŸ¡ãããŒãå€æŽããåœä»€ã§ããããšã瀺ãããŸããã Yoctoã®6ã€ã®ãã¡ã®1ã€ã«è¿ãã
![](https://habrastorage.org/webt/ok/1b/zf/ok1bzfanzmhpflpxtj7-oc8d2mq.jpeg)
ãã¯ã¿ãŒåœä»€
ããããæãåºãç¥ãããŠããåœä»€ã»ããæ¡åŒµæ©èœã¯ã åäžåœä»€è€æ°ããŒã¿ïŒSIMDïŒ ãã€ãŸãããã¯ãã«åœä»€ã§ãã ãã¯ã¿ãŒåœä»€ã¯IA-32ããã»ããµãŒäžã«ååšãã1997幎ã«Intel Pentiumã«è¿œå ãããMMXæ¡åŒµããå§ãŸããŸãã çŸåšãMMXåœä»€ã¯äºå®äžä¿èšŒãããŠããŸãã ãããã®ããã€ãã¯ãæãäžè¬çãªæ瀺ã®ãã£ãŒãã«ååšããããšã«æ°ä»ããããããŸããã ããã«ãå€ãã®ç°ãªãã¹ããªãŒãã³ã°SIMDæ¡åŒµåœä»€ïŒSSEïŒåœä»€ãšææ°ã®AVXãAVX2ãAVX512ãè¿œå ãããŸããã
ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãšBIOSã®èªã¿èŸŒã¿ãå匷ããããšãèãããšãå€ãã®ãã¯ãã«åœä»€ãæåŸ ããŠããŸããã§ããã ãã ããå®è¡ãããåœä»€ã®çŽ5ã6ïŒ ããã¯ãã«ã§ããããšãå€æããŸããã å®è¡ãããåœä»€ã®ç·æ°ã«å¯Ÿããå²åãšããŠæž¬å®ãããæ¡åŒµã«ãã£ãŠã°ã«ãŒãåããããå®è¡ããããã¯ãã«åœä»€ã®æ°ïŒ
![](https://habrastorage.org/webt/-h/_x/s_/-h_xs_moxfw12dpxclpwgml4ops.png)
ããªãã®ç®ãåŒãæåã®ãã®-Busyboxã¯å®éã«ã¯ãã¯ãã«åœä»€ã䜿çšããŸããã 次ã«èå³æ·±ã芳å¯çµæã¯ã第1äžä»£ã®ããã»ããµã第6ããã»ããµã«å€æŽãããšãå€ãåœä»€ã®æ°ãæžããæ°ããåœä»€ã®æ°ãå¢ãããšããããšã§ãã ç¹ã«ãå€ãSSEåœä»€ãæ°ããAVXããã³AVX2ã«çœ®ãæããããšããã¬ãŒã¹ãããŠããŸãã
Simics
åœåãSimicsã䜿çšããŠãã®ç 究ãå®æœããããšã¯é£ãããããŸããã§ããã æããã«ãSimicsã¯ã·ãã¥ã¬ãŒããããã·ã¹ãã ã®ãã¹ãŠã®ããã»ããµã§å®è¡ãããŠãããã¹ãŠã®åœä»€ã«ã¢ã¯ã»ã¹ã§ããŸãïŒãããã®å®éšã¯ãã¥ã¢ã«ã³ã¢ã·ã¹ãã ã§å®è¡ãããŸãããã2çªç®ã®ã³ã¢ã¯ããŒãæã«åœä»€ãå®è¡ããŸããã§ããïŒã ã¹ã¯ãªããã¯å®å šã«èªååãããŠãããOSãã€ã³ã¹ããŒã«ãããŠããããã€ã¹ã®éžæãããŠã³ããŒãã®æåŸã§ã®ãŠãŒã¶ãŒåãšãã¹ã¯ãŒãã®å ¥åãå«ãŸããŸãã ç¹°ãè¿ãèµ·åãããšãŸã£ããåãçµæã衚瀺ããããããåã¹ã¯ãªããã¯1åå®è¡ãããŸããïŒåãå Žæããç¹°ãè¿ãã¹ã¯ãªãããæ€èšããŸãïŒã
ãããã«
ãœãããŠã§ã¢ã¹ã¿ãã¯ãæ°ããããã»ããµã§ã©ã®ããã«é©å¿ããæ°ããåœä»€ã䜿çšããããåŠã¶ããšã¯æçã§ããã ææ°ã®ããã°ã©ã ã¯é©å¿åã§ãããåã³ã³ãã€ã«ããã«äœ¿çšãããæ©åšã«å¿ããŠç°ãªãã³ãŒããå®è¡ããŸãã æ€èšãããã¹ãŠã®ã·ããªãªã§ãåããœãããŠã§ã¢ã¹ã¿ãã¯ãç°ãªãã·ãã¥ã¬ãŒã·ã§ã³ã·ã¹ãã ã§äœ¿çšãããå¯çšæ§ã«å¿ããŠç°ãªãåœä»€ã䜿çšãããŸããã ãã®èª¿æ»ã¯ãã·ãã¥ã¬ãŒã·ã§ã³ã§ç°¡åã«ååŸã§ããããå®éã®æ©åšã§ã¯ã»ãšãã©åéã§ããªãããŒã¿ã®åªããäŸã§ãã