Linux
Linuxã«ã¼ãã«ããªã¢ã«ã¿ã¤ã åããããã®æå¾ã®æ¡å¼µæ©è½ããã«ã¼ãã« v6.12ã«ã¦åãè¾¼ã¾ãã¾ããã æ¬ããã°ã§ã¯ãLinuxã«ã¼ãã«ã®å¿çæ§ãåä¸ãããããã«è¡ããã¦ããæ§ã ãªæ½çã«ã¤ãã¦è§£èª¬ãã¦ããã¾ãã
ä»åããã¡ã¤ã«ç®¡çã«ã¾ã¤ããã話ã®ç¶ãã§ãã
ä»åã¯ããã¡ã¤ã«ç®¡çã«ã¾ã¤ããã話ã§ãã
ä»åã¯ãã«ã¼ãã«ã¢ã¸ã¥ã¼ã«æ©è½ãè¦ã¦è¡ãã¾ãã Linuxã«ã¼ãã«ã¯ãæ©è½ã®ä¸é¨ãã«ã¼ãã«ã¢ã¸ã¥ã¼ã«ã¨ãã¦çæããå¿ è¦ã«å¿ãã¦çµã¿è¾¼ãæ¹å¼ãæ¡ç¨ãã¦ãã¾ããããããã©ã®ãããªä»æãã§å®ç¾ãã¦ããã解説ãã¾ãã
ä»åã¯ããã±ããåä¿¡å¦ç ï½Ethernetãã©ã¤ã æ¦è¦ç·¨ï½ã®3ç« ããã¼ãªã³ã°ãã³ãã©(NAPI)ã«ããåä¿¡å¦çãã§è§£èª¬ãããã¼ãªã³ã°ãã³ãã©ã®å¦çãæ·±å ãã¾ãã
ä»åããæ°åã«åãã¦ãã¿ã¹ã¯ã¹ã±ã¸ã¥ã¼ã©ã«ã¤ãã¦è§£èª¬ãã¾ããä»åã¯ãåºæ¬çãªæ¦å¿µãå ¨ä½åãä¸å¿ã¨ããã話ã§ãã
ä»åã¯ãååã®ç¶ãã§ãã«ãããã»ã¹ã«ã¾ã¤ããã話ã§ãã
ä»åã¯ããã¤ã¹(NIC)ããã±ãããåä¿¡ãããã±ãããIPã¬ã¤ã¤ã¼ã«æ¸¡ãã¾ã§ã®éç¨ã解説ãã¾ãã
é£è¼ãRISC-V OSãä½ãããã§ä½ã£ã¦ããOS(Sophia OS)ããLinux KVMä¸ã®ã²ã¹ãOSã¨ãã¦åããã¦ã¿ã¾ãããï¼
ä»åã¯CPUã®å¹ççãªæ´»ç¨ãç®æãããã«ãããã»ã¹ãããã¹ã±ã¸ã¥ã¼ãªã³ã°ãã«ã¾ã¤ããã話ã§ãã
æ¬ç¨¿ã§ã¯ãLinuxã®æä»å¶å¾¡ã®ä»çµã¿ã§ããèªã¿æ¸ãã¹ãã³ããã¯(RWããã¯)ã¨RCUã«ã¤ãã¦ãnetfilterã«ãããæä»å¶å¾¡ãå ·ä½ä¾ã¨ãã¦ãå®éã«Linuxã§ã©ã®ããã«ä½¿ããã¦ããã®ãã解説ãã¾ãã
ããã¾ã§ã®é£è¼ã§ã¯ããã¢ã¡ã¿ã«ä¸ã§ç´æ¥RISC-V OSãåããä»çµã¿ã解説ãã¦ãã¾ãããä»åã¯ãRISC-V OSãã¢ãã¿ããã°ã©ã OpenSBIã®ä¸ã§åä½ãããæ¹æ³ãè¦ã¦ããã¾ããRISC-V OSã¯ã¹ã¼ãã¼ãã¤ã¶ã¼ã¢ã¼ãã§ã®åä½ã¨ãªãã¾ãã
ä»åã¯ä»®æ³ç©ºéãå·¡ãã話ã§ããä»®æ³ç©ºéã¨ãããã®ã¯ãOSãèªãä¸ã§å¤ããªããã®ã§ãã®ã§ãæ¬ç¨¿ãä»®æ³ç©ºéãç解ããããã®å©ãã«ãªãã°å¹¸ãã§ãã
ååã¯RISC-V OSããã«ã³ãã¢OSã¨ãã¦ç«ã¡ä¸ããã¨ããã解説ãã¾ããã ä»åã¯ãRISC-V OSããã«ãã³ã¢ãæèããã¿ã¹ã¯ã¹ã±ã¸ã¥ã¼ãªã³ã°ãè¡ãªãä»çµã¿ãè¦ã¦ããã¾ãã
ååã¾ã§ã¯ãã·ã³ã°ã«ã³ã¢ç°å¢ãåæã«ããOSå®è£ ãè¦ã¦ãã¾ããããä»åããRISC-V OSããã«ãã³ã¢ç°å¢ã«å¯¾å¿ããã¾ããã³ã¢ãè¤æ°ã«ãªãã¨ãè¤æ°ã®ã³ã¢ãåæã«ã²ã¨ã¤ã®ãã¼ã¿æ§é ãæä½ãããã¨ãããã¨ãããã¾ããOSã¯è¤æ°ã³ã¢ããåææä½ãè¡ããã¦ãâ¦
OSã®éçºããã¦ããã¨ãå¿ ç¶çã«ã·ã¹ãã ã³ã¼ã«ã使ç¨ããããã°ã©ã ãä½æãããã¨ã«ãªãã¾ãã誰ããå§ããã¦ã®é ã¯ãfork(2)ã·ã¹ãã ã³ã¼ã«ãä¸æè°ã«æãã®ã§ã¯ãªããã¨æãã¾ãã forkã®å¾©å¸°å¤ã親ã¨åã§éã£ã¦ãã¦ãããã§èªåã親ãåããåºå¥ã§ããâ¦
æ¬ç¨¿ã§ã¯ãã¿ã¹ã¯ã®åãæ¿ãã«ä¼´ãã¬ã¸ã¹ã¿ã®åãæ¿ãå¦çã®å ãåç·¨ (7æ11æ¥å ¬é: https://valinux.hatenablog.com/entry/20240711) ã§ã¯è§£èª¬ããããªãã£ãé¨åã«ã¤ãã¦è§£èª¬ãã¾ãã
ååã®è¨äºã§ã¯ããã¼ã¿æ§é ã¨ã¨ãã«ã½ã±ããæä½å¦çã®æµããè¦ã¦ãã¾ããã æ¬ç¨¿ã§ã¯ãsocket(2)ã·ã¹ãã ã³ã¼ã«ã«ãã£ã¦ãããã®å種ãã¼ã¿æ§é ãã©ã®ããã«çæãããé¢é£ã¥ãããã¦ããã®ããè¦ã¦ããããã¨æãã¾ãã
OSãã©ããªãã®ã§ããããç解ããããã®èæ¯ã¨ãªãç¥èãåå¼·ã®åèã«ãªãæ å ±ãã話ããã¦ãããã¨æã£ã¦ãã¾ãã調ã¹ãã®ã¨ããããéè«ã«è¿ããã®ã§ãã®ã§ãæ°æ¥½ã«èªãã§é ããã°è¯ããã¨æãã¾ãããã®ä¸ã§ãä½ããã®åèã«ãªãã°å¹¸ãã§ãã
æ¬ç¨¿ã§ã¯ãæ§ç1ç« ã§è§£èª¬ããã¦ãããããã»ã¹ã¹ã±ã¸ã¥ã¼ãªã³ã°ãã®å ãããã»ã¹ãã£ã¹ãããã£(ã¿ã¹ã¯ã®åãæ¿ãå¦ç)ã«ã¤ãã¦ãã«ã¼ãã«v6.8/x86_64ã®ã³ã¼ãããã¼ã¹ã«è§£èª¬ãã¾ãã
ç©çã¡ã¢ãªãã¢ããªã±ã¼ã·ã§ã³ç¨ (ã¦ã¼ã¶ã¢ã¼ãç¨) ã¨ã«ã¼ãã«ç¨ (ãã·ã³ã¢ã¼ãç¨) ã®2ã¤ã«åå²ããã¢ããªã±ã¼ã·ã§ã³ããã¯ã«ã¼ãã«ç¨ã®ã¡ã¢ãªåãåç §ã§ããªãããã«ã¡ã¢ãªä¿è·è¨å®ãè¡ãªã£ã¦ã¿ã¾ãããã
ã«ã¼ãã«v6.8ã®ã³ã¼ãããã¼ã¹ã«ããããã³ã«ãã¨ã«ç°ãªãå¦çãã½ã±ãããã©ã®ããã«æ½è±¡åãã¦ããã®ããã¾ãã½ã±ããããªããã¡ã¤ã«ã¨ãã¦æä½ã§ããã®ãã«ã¤ãã¦ããã¼ã¿æ§é ãä¸å¿ã«è§£èª¬ãã¾ãã
ãæ°Linuxã«ã¼ãã«è§£èªå®¤ãããã¸ã§ã¯ãã®æ¬ç¨¿ã§ã¯ããã¼ãå²ãè¾¼ã¿ãçºçãã¦ããã½ããå²ãè¾¼ã¿å¦çãå®è¡ãããã¾ã§ã®æµãããå®è¡ã³ã³ããã¹ãã®åãæ¿ããã追ããããªããã«ã¼ãã«v6.8ã®ã³ã¼ãããã¼ã¹ã«ç´¹ä»ãã¾ãã
VA Linuxã®è¥ææè¡è ãä¸å¿ã¨ãªããææ°ã®Linuxã«ã¼ãã«ã³ã¼ãå ¨ä½ãèªã¿è§£ãããã¸ã§ã¯ããé²è¡ä¸ã§ãã解æããã³ã¼ãã®ãã¡èå³ãæ¹ããããã®ãéè¦ãããªãã®ãä¸å¿ã«ããã°è¨äºã«ã¾ã¨ãã¦ããã¾ãã®ã§ã©ããã楽ãã¿ã«ï¼
ååã¯ãã»ããã©ã«ããåææ©æ§ãå®ç¾ãã¦ã¿ã¾ããã ä»åã¯ãã¢ããªã±ã¼ã·ã§ã³ã®ã³ã¼ããã¦ã¼ã¶ã¢ã¼ãã§ãOSã³ã¼ãããã·ã³ã¢ã¼ãã§åä½ããã¦ã¿ã¾ãããã
éçã³ã¼ã解æãã¼ã«ã®1ã¤ã§ãã Inferã使ã£ã¦Linuxã«ã¼ãã«ã®ã½ã¼ã¹ã³ã¼ãã解æããã¡ã¢ãªé¢é£ã®ä¸å ·åãæ¤åºãã¦ã¿ã¾ããInfer ã®ãã«ãããã解æã®å®è¡ã¨æ¤è¨¼ã解æçµæã®ç²¾æ»ã«ã¤ãã¦ã¾ã¨ãã¾ããã
ååè¨äºãQemuã®ããã¿ (ã®ä¸é¨)ãã®å 容ãéãã£ãã®ã§ãä»åã¯Qemuã®å°ãã¿ãéãã¦ã¿ã¾ããã
OSS ã®éçºæ¯æ´ãé害解æãµã¼ãã¹ãªã©ã®ä»äºæãQemu ã®ä»çµã¿ãå é¨åä½ãã客æ§ã«èª¬æããå¿ è¦ãããå ´åãããã¾ãããããªæã«ãQemuã®ãã«ã¤ãã¦ã¯ãããè¦ã¦ããã¨è¨ãããããªææ¸ãããã¨ãããªãã¨æããèªåã§ä½ã£ã¦ã¿ããã¨ã«ãã¾ããã
ARMv8-A ã¢ã¼ããã¯ãã£ã§ã® 64bit ç°å¢ (AArch64) ã§ã®ãã¼ãããã°ã©ã ä½æã«ã¤ãã¦ã¾ã¨ãã¾ãã ä»åã®ãã¼ãå¦çã§ã¯ AArch64 ã¹ãã¼ãã§å®è¡ãä¾å¤ã¬ãã«ã EL1 ã«ãã¦ç¹æ¨©ããã°ã©ã ã®å®è¡ã®æºåã¾ã§ãè¡ãã¾ãã
ååã®æ¦è«ç·¨ã§ã¯ãeBPFãã©ããªãã®ã§ãã©ã®ããã«å®ç¾ããã¦ããããä¸å¿ã«è§£èª¬ããeBPFã®æè¡è¦ç´ (BCCãBCC-ToolsãCO-RE) ã«ã触ãã¾ããã å®è£ ç·¨ã¨ãªãä»åã¯ãBCC-Toolsã®å¾ç¶ã¨ãªãlibbpf-toolsããopensnoopã³ãã³ãã«çç®ãã¦ã½ã¼ã¹ã³ã¼ãã¬ãã«â¦