è¿å¹´ï¼æ±ç¨è¨ç®ã®é«éåã®ããã®ã¢ã¯ã»ã©ã¬ã¼ã¿ã¨ãã¦æ³¨ç®ããã¦ããGPUãï¼ãããã¯ã¼ã¯å¦çã«é©ç¨ããä¸ç°ã¨ãã¦ï¼ãµã¼ããµã¤ãã®SSLå¦çã«æ³¨ç®ããè«æãèªãã ã®ã§ï¼å 容ã軽ãç´¹ä»ãã¾ãï¼
SSLShader: Cheap SSL acceleration with commodity processors Proceedings of the 8th USENIX conference on Networked systems design and implementation 2011
ãªãï¼è©ä¾¡ã«ä½¿ãããå®è£ ã®ä¸é¨ã®ã½ã¼ã¹ã³ã¼ããå ¬éããã¦ãã¾ãï¼
ç´¹ä»
èæ¯
SSL(Secure Socket Layer)ã§ããHTTP2.0ã®ãããå°ã¨ãªã£ã¦ããSPDYãªã©ã§ã¯SSLï¼æ£ç¢ºã«ã¯TLSï¼ã®ä½¿ç¨ãåæã¨ãªã£ã¦ããï¼ä»å¾ãµã¼ããµã¤ãã§ã®SSL対å¿ã®è¦æ±ã¯é«ã¾ã£ã¦ããã¨æãã¾ãï¼
SSLã®æå·å¦çé¨åã¯CPUãã¦ã³ããªå¦çãªã®ã§ï¼CPUè² è·ã®åæ£ã®ããã«ï¼é«éãªãã¼ãã¦ã§ã¢ã¢ã¯ã»ã©ã¬ã¼ã¿ãç¨ãããï¼è¤æ°ã®ä½éãªã½ããã¦ã§ã¢ã¢ã¯ã»ã©ã¬ã¼ã¿ãç¨æãã¦ï¼ãããã«å¯¾ãã¦ãã¼ããã©ã³ãµã«ããå¦çã並ååæ£ããããã¾ãï¼
åæ©
ãããï¼ãã¼ãã¦ã§ã¢ã¢ã¯ã»ã©ã¬ã¼ã¿ã®åé¡ã¨ãã¦ä¾¡æ ¼ã³ã¹ããé«ãï¼æ°æå·ã¢ã«ã´ãªãºã ã®å¯¾å¿ãªã©æè»æ§ã«æ¬ ããï¼ãã¸ãã¯ããã¼ãã¦ã§ã¢ã§å®è£ ããã¦ããã®ã§ï¼é害åå ãçªãæ¢ãã«ããï¼ã¨ãããã¨ãããã¾ãï¼ ããã«ï¼ã½ããã¦ã§ã¢ã¢ã¯ã»ã©ã¬ã¼ã¿ãè¤æ°å°ä¸¦ã¹ãã«ã¯ï¼ãããè¤æ°å°åã®ã³ã¹ãããããã¾ããï¼ã·ã¹ãã æ§æãè¤éã«ãªãã®ã§éç¨ãã¥ããã¨ããåé¡ãããã¾ãï¼
ææ¡ææ³
ãããã®åé¡ç¹ã解決ããã®ãï¼è«æã®ä¸»é¡ã¨ãªã£ã¦ããSSLShaderã§ãï¼ SSLShaderã¯ï¼æå·åé¨åãå®ä¾¡ãªGPUã«ãªããã¼ãæ©è½ãåããSSLãªãã¼ã¹ãããã·ã§ããï¼é«è² è·æã«é«ã¹ã«ã¼ãããï¼ä½è² è·æã«ä½ã¬ã¤ãã³ã·ã¨ãªãããã«è¨è¨ããã¦ãã¾ãï¼
GPUã®ä¸è¬ã®è©±ã¯ä¸è¨ã¹ã©ã¤ããåèã«ãªãã¨æãã¾ãï¼
é«è² è·æã«é«ã¹ã«ã¼ãããï¼ä½è² è·æã«ä½ã¬ã¤ãã³ã·ã¨ããã®ãè«æä¸ã§ä½åº¦ãç¹°ãè¿ããã¦ããï¼è«æã®éè¦ãªãã¤ã³ãã¨ãªã£ã¦ãã¾ãï¼ ãããã©ã®ããã«éæããã®ãã¨ããã¢ã¤ãã¢ãã¾ã¨ããã¨ä¸è¨ã®ããã«ãªãã¾ãï¼
- é«ã¹ã«ã¼ããããéæããããã«ã¯æ°ç¾åï¼ææ°ä¸ä»£ã§ã¯1000å以ä¸ï¼ã®GPUã³ã¢ï¼åä½ã³ã¢ã®æ§è½ã¯CPUã«å£ãï¼ãæ´»ç¨ããªããã°ãªããªãããï¼ä¸¦ååãéè¦
- åã¯ã©ã¤ã¢ã³ãããçºè¡ãããSSLãªã¯ã¨ã¹ãã¯ç¬ç«ãã¦ããããï¼åSSLãªã¯ã¨ã¹ãã¯ä¸¦åã«å¦çå¯è½ï¼ãããã£ã¦ï¼GPUã«è¤æ°ã®ãªã¯ã¨ã¹ãåã®æå·å¦çãã¾ã¨ãã¦ã¤ã£ããï¼
- ä½è² è·æï¼åææ¥ç¶æ°ãå°ãªãï¼ã¨ãã¯GPUã«æ¸¡ãã¿ã¹ã¯éãå°ããããããCPUã®ã¿ã®ã»ããã¹ã«ã¼ããããé«ãï¼éã«é«è² è·æã«GPUã«æ¸¡ãã¿ã¹ã¯éãå¤ããã¦ã¹ã«ã¼ããããã§ãªãã¨ãããã¨ãããï¼ãã£ã¦ï¼CPU1ã³ã¢ã®ã»ããã¹ã«ã¼ããããé«ããªããããªè² è·ã§ããã°ï¼CPUã«ä»»ããï¼ä¸æ¹ï¼GPUã«æ¸¡ãã¿ã¹ã¯éãå¤éããªãããã«ï¼é©å½ãªã¨ããã§GPUã«æ¸¡ãã¿ã¹ã¯éã«ä¸éãè¨ããï¼
ä¸è¨ã®ã¢ã¤ãã¢ãå®ç¾ããããã®ã·ã¹ãã æ§æã¨ãã¦ä»¥ä¸ã®å³ã®ãããªã·ã¹ãã ãææ¡ã»å®è£ ããã¦ãã¾ãï¼
CPUã³ã¢æ°åã®ã¯ã¼ã«ã¹ã¬ããï¼å®é¨ç°å¢ã§ã¯12åï¼ã¨ï¼GPUã®åæ°åã®GPUã¤ã³ã¿ãã§ã¼ã¹ã¹ã¬ãããç¨æãã¾ãï¼ åã¯ã¼ã«ã¹ã¬ããã¯åå¥ã«Input queueããã¡ï¼GPUã¤ã³ã¿ãã§ã¼ã¹ã¹ã¬ããã¯GPU queueããã¡ã¾ãï¼ ã©ã¡ãã®ãã¥ã¼ã«ãRSEãAESãªã©ã®æå·å¦çã¿ã¹ã¯ãæ ¼ç´ããã¾ãï¼ ã¯ã¼ã«ã¹ã¬ããã¯åºæ¬çã«ï¼I/Oã¤ãã³ããå¦çï¼å³ã®Pushã¨Popï¼ãï¼ç©ºãã¦ããæã«æå·å¦çï¼å³ã®Procï¼ãå®è¡ãã¾ãï¼ ããã«ï¼ãã¥ã¼ã«å«ã¾ããã¿ã¹ã¯æ°ãå¤ãæã¯GPU queueã«Input queueã®å 容ã移è¡ããã¾ãï¼ GPUã¤ã³ã¿ãã§ã¼ã¹ã¹ã¬ããã¯ï¼GPU queueãè¦ã¦æãå é ã«ããã¿ã¹ã¯ã®æå·ã¢ã«ã´ãªãºã ã¨åãæå·ã¢ã«ã´ãªãºã ã®ã¿ã¹ã¯ãã¾ã¨ãã¦GPUã«ãªããã¼ããã¾ãï¼ ï¼ãã®è¾ºï¼ç°ãªãæå·ã¢ã«ã´ãªãºã ã§ãã£ã¦ãï¼GPUã®ãªã½ã¼ã¹ãä½ã£ã¦ããã°åæã«GPUã«å¦çããããããªãã®ãçåï¼ï¼
ãªãï¼ãã¥ã¼ã«å«ã¾ããã¿ã¹ã¯æ°ã®å¤å¯¡ã¯ï¼éçã«è¨å®ããé¾å¤ã«ãã決å®ããã¾ãï¼å¤èªä½ã¯ãã³ããã¼ã¯ãã¹ãæã®configureã§æ¸¬å®ããä¸ã§è¨å®ãããããã§ãï¼
以ä¸ã®ãããªãã¤ãã©ã¤ã³å¦çã§ï¼é«ã¹ã«ã¼ãããä½ã¬ã¤ãã³ã·ãéæããã¦ãã¾ãï¼
è©ä¾¡
SSLShaderã®æ¯è¼å¯¾è±¡ã¨ãã¦ï¼lighttpd with OpenSSLã使ããã¦ãã¾ãï¼ ã¯ã©ã¤ã¢ã³ã7å°ããabã³ãã³ããå©ãã¦å¯¾è±¡ã®SSLãããã·ã«è² è·ãããã¦ãã¾ãï¼
ã¾ãï¼ã¹ã«ã¼ãããã®è©ä¾¡ã§ããï¼ã¯ã©ã¤ã¢ã³ãããã®åææ¥ç¶æ°ãå¤åãããã¨ãã®SSL transactions / s (TPS) ã測å®ãããã®ã«ãªã£ã¦ãã¾ãï¼ RSA 1024bitã§ï¼SSLShaderãlighttpdã®2ã2.5åéãï¼RSA 2048bitã§ï¼ç´4ã6åéããªã£ã¦ãã¾ãï¼
次ã«ï¼ã¬ã¤ãã³ã·ï¼ã¬ã¹ãã³ã¹ã¿ã¤ã ï¼ã®è©ä¾¡ã§ãï¼ è² è·ãé«ãã±ã¼ã¹ã¨ä½ãã±ã¼ã¹ã§ææ¡ææ³ã®å¹æãCDFã§è©ä¾¡ãã¦ãã¾ãï¼ ä¾ãã°ï¼80%ã®ã¨ãã¯ã³ãã¯ã·ã§ã³100æ¬ã®ãã¡ã®80æ¬ã¯ã¬ã¤ãã³ã·â¯msã§è¿ããã¨ãããã¨ããããã¾ãï¼ å¡ä¾ã®æ¬å¼§å ã¯(ã³ãã¯ã·ã§ã³æ°ï¼TPS)ã¨ãªã£ã¦ãã¾ãï¼TPSã¯abã³ãã³ãã«æãå ¥ãã¦ä¸å®ã®TPSã§ãªã¯ã¨ã¹ããæããããããã«ãªã£ã¦ãã¾ãï¼
ä½è² è·æã¯ä¸¡æ¹ã¨ãï¼90%ç¨åº¦ã®ã³ãã¯ã·ã§ã³ãæ°msç¨åº¦ç¨åº¦ã§è¿ãã¦ãã¾ãï¼ é«è² è·æã¯SSLShaderã®ã»ããã¬ã¤ãã³ã·ã¯å°ãããªã£ã¦ãã¾ãï¼
以ä¸ããï¼ç¹ã«é«è² è·æã«ããã¦ã¯SSLShaderã®åªä½æ§ã確èªããã¦ãã¾ãï¼
ã¹ã©ã¤ã
ç 究室ã®è¼ªè¬ç¨ã«ã¤ãã£ãã¹ã©ã¤ãã§ãï¼ç´°ããããã¨æããå 容ã«ã¤ãã¦ã¯ãã¤ãã¨ã°ãã¦ãã¾ãï¼ èªã¿éãã»èª¤è§£ãªã©ãå«ã¾ãã¦ããå¯è½æ§ãããã¾ãï¼ ç¹ã«SSLã®èªè¨¼å¨ãã¯ãµãããªãªã®ã§çµæ§é©å½ã§ãï¼
é¢é£ç 究
GPUããããã¯ã¼ã¯å¦çã«å¿ç¨ããã¨ããç 究ã¨ãã¦ï¼ã«ã¼ã¿ã®ã«ã¼ãã£ã³ãIPSecã®æå·åå¦çãGPUã§é«éåããã¨ãããã®ãããã¾ãï¼ SSLShaderã¨åãç 究ãã¼ã ã®ããã§ãï¼