Red Hat ã§ã³ã³ãµã«ã¿ã³ãããã¦ããè åã¨ç³ãã¾ãã
ãã®è¨äºã§ã¯ãæå¤ã¨ãã¾ã説æããã¦ããªããããªæ°ããã Linux ã·ã¹ãã ã§çºçãããã³ã°ã¿ã¹ã¯ã«ã¤ãã¦å°ã説æãããã¨æãã¾ããç¾å ´ã®ã·ã¹ãã ã§ããã³ã°ã¿ã¹ã¯æ¤ç¥ã®è¨å®ãããã¦ãããã¨ãå¤ãã¨æãã¾ããããã³ã°ã¿ã¹ã¯ã¨ã¯ä½ãªã®ããæ£ãããçè§£ããã ããã¨ã§ããã³ã°ã¿ã¹ã¯æ¤ç¥ãè¡ãç®çãæç¢ºã«ãªããã¨ãã¾ããå®éã®é害äºä¾ããç´¹ä»ãããã¨ã§ãé常ãã¾ããã³ã°ã¿ã¹ã¯ã¨é¢é£ã¥ãã¦èããªããããªè¨å®ã§ããã³ã°ã¿ã¹ã¯çºçã«ã¤ãªããå ´åããããã¨ãç¥ã£ã¦ããã ããå°ãã§ãã·ã¹ãã 管çãé害ã®çè§£ãé害対å¿ãªã©ã®ãå½¹ã«ç«ã¦ãã°å¹¸ãã§ãã
ãªãããã®è¨äºã§ã¯ RHEL ã®ã¿ãå¯¾è±¡ã«æ¸ãã¦ãã¾ãããä»ã® Linux ãã£ã¹ããªãã¥ã¼ã·ã§ã³ã«ãé©ç¨ãããå å®¹ã¨æãã¾ãã
ãã³ã°ã¿ã¹ã¯ (hung tasks) ã¨ã¯
ãã³ã°ã¿ã¹ã¯ã¨ã¯èªãã§åã®ãã¨ãã§ãã³ã°ããã¿ã¹ã¯ (Linux ã«ã¼ãã«ã§ã¯ããã»ã¹ã¨ã¹ã¬ãããçµ±ä¸ãã¦åãæ±ã£ã¦ãããã¿ã¹ã¯ã¨å¼ãã§ãã¾ãã以éãæ¬è¨äºã§ã¯ãã¿ã¹ã¯ãã¨ãããã»ã¹ãã¯å義èªã¨ãã¦æãã¦ããã ãã¦çµæ§ã§ã) ã®ãã¨ã§ããçç¶ã¨ãã¦ã¯å ¸åçã«ã¯ã¿ã¹ã¯ã®å¦çãé²è¡ããªããªãã®ã§ãããããåºãã£ãããããªç¶æ ã¨ãªããã¨ãæãããã¾ããããå³å¯ã«ã¯ãps ã³ãã³ãã§è¦ãã¨ãã®ç¶æ ã "D" ã§ä¸å®ä»¥ä¸é·ãæ»çãã¦ããã¨ãã³ã°ãã¦ããã¨è¦ãªããã¾ãã
ã¿ã¹ã¯ã® D ç¶æ (D state) ã¨ã¯
D ç¶æ ã¯è±èªã§ã¯ uninterruptible sleep ã¨è¡¨è¨ãããæ¥æ¬èªã«è¨³ãã¨ãå²ãè¾¼ã¿ã§ããªãã¹ãªã¼ãç¶æ ãã«ãªãã¾ãããã®ç¶æ ã«ããã¿ã¹ã¯ã«ä¾ãã° kill ã³ãã³ãã§ã·ã°ãã«ãéã£ãã¨ãã¦ããå²ãè¾¼ã¿ä¸å¯ãªã®ã§ã·ã°ãã«ã®åä¿¡ã¯ä»å®è¡ä¸ã®å¦çãçµãã£ã¦ D ç¶æ ãæããã¾ã§å¾ ãããããã¨ã«ãªã£ã¦ãã¾ã (ãªã®ã§ãD ç¶æ ã§åºãã£ã¦ããããã»ã¹ã kill ãã¦ãããã»ã¹ãæ¢ããããªãã®ã§ã)ã
å®ã¯ãã® D ç¶æ ã¨ããã®ã¯ãã¦ã¼ã¶ã¼ã¢ã¼ãã§ã¯ãªãã«ã¼ãã«ã¢ã¼ãã§å®è¡ãã¦ããªãã¨è¦ãããªãç¶æ ã§ããä¾ãã°ããã£ã¹ã¯çã®ããã¤ã¹ã«å¯¾ãã¦å ¥åºåãçãã«å®è¡ãã¦ããããã»ã¹ã®ç¶æ ãããè¦ã¦ãã㨠D ç¶æ ã«ãªããã¨ã¯çãããã¨ã§ã¯ããã¾ãããD ç¶æ ã¯çæéã§ããã°ããèªä½ãåé¡ãªããã§ã¯ãªããåé¡ã¯ãé·ãæ»çãããã¨ããã¨ããã§ãã
ã¾ããã¹ãªã¼ãç¶æ ã¨å¼ãã§ã¯ãã¾ãããå®éã«ã¿ã¹ã¯ãã¹ãªã¼ããã¦ããã¨ã¯éãããã«ã¼ãã«å ã§å¿ããä½ããã®å¦çãå®è¡ãã¦ããå ´åãå¤ããã¨ã«æ³¨æãå¿ è¦ã§ãããã ãã¿ã¹ã¯ã®ã¦ã¼ã¶ã¼ç©ºéã¨ãã¦ã¯ãã·ã¹ãã ã³ã¼ã«ãå¼ã³åºãã¦æ»ããå¾ ã£ã¦ãããæ»ã£ã¦ããã¾ã§ã¦ã¼ã¶ã¼ç©ºéã®å¦çãä¸åé²ã¾ãªãã¨ããæå³ã§ã¯ã¹ãªã¼ãç¶æ (S ç¶æ ) ã«ä¼¼ã¦ããã¨è¨ããããç¥ãã¾ããã
D ç¶æ ãå¿ è¦ãªçç±
D ç¶æ ã¨ããã®ã¯ãã«ã¼ãã«å é¨ã§ä½ããã®æä»å¶å¾¡ãå¿ ãé¢ãã£ã¦ãã¾ããæä»å¶å¾¡ã¨ããã®ã¯ãããã³ã¼ããè¤æ°ã®ã¿ã¹ã¯ã並è¡å¦çããã¨åé¡ãçºçãããããªå ´åã«ãããã®é¨åã¯ï¼åº¦ã«ï¼åã®ã¿ã¹ã¯ã«ããå®è¡ãããªããã¨ããä»çµã¿ãå®ç¾ãããã®ã§ãããã®ãããªé¨åã®ãã¨ããã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ãã¨å¼ã³ã¾ãã
ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã«å ¥ãã¨ãã«ã¯ãããã¯ããåå¾ããæããã¨ãã«åå¾ããããã¯ãè§£æ¾ãã¾ããã²ã¨ã¤ã®ããã¯ã¯ã²ã¨ã¤ã®ã¿ã¹ã¯ã«ããææã§ããªããããå ã«ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ãå®è¡ãã¦ããã¿ã¹ã¯ãåå¨ããã¨ãã«ãå¾ããå¥ã®ã¿ã¹ã¯ãåãã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ãå®è¡ããããã«ããã¯ãåå¾ãããã¨ããã¨ãåã®ã¿ã¹ã¯ãããã¯ãè§£æ¾ããã¾ã§å¾ ãããããã¨ã«ãªãã¾ãããã®ããã«ãã¦ãè¤æ°ã®ã¿ã¹ã¯ãã«ã¼ãã«å ã®ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ãåæã«å®è¡ãããªãããã«ãã¦ãã¾ããã«ã¼ãã«å ã«ã¯å¤ç¨®å¤æ§ãªã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ãåå¨ããããããã®ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã«ãã£ã¦ãè¤æ°ã®ç°ãªã種é¡ã®ããã¯ãç®çã«åããã¦ä½¿ãåãã¦ãã¾ããããã¯ã¯å¤§ããåããã¨ããã¯ãå¾ ã¤ã¨ãã«ã¿ã¹ã¯ãã¹ãªã¼ããããã®ã¨ããªããã®ã«åé¡ã§ãã¾ãããD ç¶æ ã¯ãå²ãè¾¼ã¿ã§ããªãã¹ãªã¼ããç¶æ ãªã®ã§ãã¹ãªã¼ãããæ¹ã®ããã¯ãé¢ãã£ã¦ãã¾ããå¾ã§ãç´¹ä»ããäºä¾2ã¤ã§ã¯ãã¹ãªã¼ãããã¿ã¤ãã®ããã¯ã¨ãã¦ã©ã¡ãã mutex ãé¢ãã£ã¦ãã¾ããã
åèæç®: Linux kernel doc "Lock types and their rules"
ã¾ãããªã D ç¶æ ãå²ãè¾¼ã¿ã§ããªãã®ãã¨ããã¨ãåå¾ããããã¯ããã¡ãã¨è§£æ¾ããããã§ããä»®ã«ããã¯ãåå¾ãã¦å¦çããã¦ããéä¸ã§ãã·ã°ãã«ã®åä¿¡ãªã©ã«ããã¿ã¹ã¯ã®ä»ã®é¨åã®å¦çã«é£ã¹ã¦ãã¾ã£ãã¨ããã¨ãä¾ãã°å²ãè¾¼ãã å¦çãã¿ã¹ã¯ãçµäºããã¦ãã¾ã£ãããã¦åå¾ããããã¯ãæ£ããè§£æ¾ãããªãå¯è½æ§ãåºã¦ãã¾ããããã§ã¯ä»ã®ã¿ã¹ã¯ãåãã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ãå®è¡ãããã¨ãã¦ãæ°¸ä¹ ã«ããã¯å¾ ã¡ç¶æ ã«é¥ã£ã¦ãã¾ãã ãã§ãããããªã®ã§ãä¸åº¦ã¿ã¹ã¯ãããã¯ãåå¾ããããè§£æ¾ããã¾ã§ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ããåºã¦ä»ã®é¨åã¸é£ãã§ãã¾ããªãããã«ãã·ã°ãã«ãªã©ã«ããã¿ã¹ã¯ã«å¯¾ããå²ãè¾¼ã¿ãç¦æ¢ãã¦ããããã§ãã
D ç¶æ ã¸åºå ¥ãããã¿ã¹ã¯ã®æ§åãæé軸ã«ãã£ã¦ã¾ã¨ããã¨ã以ä¸ã®ããã«ãªãã¾ãã
- ã¿ã¹ã¯ç¶æ ã D ã«å¤æ´
- ããã¯ãåå¾ (ä»ã®ã¿ã¹ã¯ã«ãã£ã¦æ¢ã«åå¾ããã¦ããå ´åã¯è§£æ¾ãããã¾ã§ã¹ãªã¼ããã¦å¾ ã¤)
- ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®å®è¡
- ããã¯ãè§£æ¾
- ã¿ã¹ã¯ç¶æ ã D ããä»ã®ç¶æ ã«å¤æ´
ãã³ã°ã¿ã¹ã¯çºçæã«èµ·ãã¦ãããã¨
ãã¦ãããã¾ã§è¦ã¦ããããã«ãã¿ã¹ã¯ãé·æé D ç¶æ ã«æ»çãã¦ããã¨ãããã¨ã¯ãä¸è¨ã® 1ã4ã5 ã«ã¯é·æéãããè¦ç´ ã¯ãªãã®ã§ã2 ã 3 ã®ã©ã¡ããã§é·æéæ»çãã¦ãããã¨ã«ãªãã¾ããé·æéããã¯ãå¾ ã£ã¦ããã¿ã¹ã¯ãããã¨ãããã¨ã¯ãä»ã®ã¿ã¹ã¯ãé·æéåãããã¯ãä¿æãç¶ãã¦ããã¨ãããã¨ãæ¨æ¸¬ã§ãã¾ãã®ã§ãå®éã«ã¯ã
- ã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ã®å®è¡ã«é·æéããã£ã¦ããã¿ã¹ã¯ (1åã ã)
- é·æéããã¯ãå¾ ã£ã¦ããã¿ã¹ã¯ (1å以ä¸)
ã®ä¸¡æ¹ãåæã«åå¨ãã¦ãã確çãé«ãã§ãã
ã¨ããã¾ã§ã®èª¬æã§çåãæãããæ¹ã¯ããããªãã§ãããããã¨ããã®ã¯ãD ç¶æ ã¯ã«ã¼ãã«ã¢ã¼ãã§ããå ¥ããªãã¿ã¹ã¯ç¶æ ãªããã§ããããããã§è¨ã£ã¦ããããã¯ã¯ã«ã¼ãã«ããã¯ã«ãªãããã§ãããã¯ãªãã£ã«ã«ã»ã¯ã·ã§ã³ãã«ã¼ãã«å é¨ã®ã³ã¼ãã®ä¸é¨ã§ããã¤ã¾ãããã³ã°ã¿ã¹ã¯ãçºçããåå ã¯æä»å¶å¾¡ã«çµ¡ãã ã«ã¼ãã«ãã°ãªã®ã§ã¯ï¼ ã«ã¼ãã«ãã°ã ã¨ããããã·ã¹ãã 管çè ã«ã§ãããã¨ã¯ãµãã¼ãã±ã¼ã¹ãä¸ãã¦æ©ãç´ãã¦ããããã¨ããããããªãããããªãã®ï¼ ã¨ã
ã¨ããããå®éã«ã¯ã«ã¼ãã«ãã°ã§ã¯ãªãåå ã«ãã£ã¦ããã³ã°ã¿ã¹ã¯ãçºçãããã¨ããããã§ããã·ã¹ãã ã®æ§æãã·ã¹ãã éç¨æé ãæ³¨ææ·±ãè¨è¨ããªãã¨ããã°ã§ã¯ãªãçç±ã§ãã³ã°ã¿ã¹ã¯ã«ãããããã¨ãããã¨ããäºä¾ãå°ãã ããç´¹ä»ãããã¨æãã¾ãã
ã¨ãã®åã«ããã³ã°ã¿ã¹ã¯ã«é¢ããã«ã¼ãã«è¨å®ããããããã¦ãããã¾ãããã
ãã³ã°ã¿ã¹ã¯ã«é¢ããã«ã¼ãã«è¨å®
RHEL ã§è¨å®ã§ããããã³ã°ã¿ã¹ã¯ã«é¢ãããã©ã¡ã¼ã¿ã¯ä»¥ä¸ã®4ã¤ã§ãããããã sysctl ãã©ã¡ã¼ã¿ãªã®ã§ã/etc/sysctl.d/ é ä¸ã®ãã¡ã¤ã«ã /etc/sysctl.conf çã«æ¸ãã¦ããã¦ã·ã¹ãã èµ·åæã«èªåè¨å®ãããã稼åä¸ã« sysctl ã³ãã³ãã§åçã«è¨å®ãããã§ãã¾ãã
kernel.hung_task_warnings kernel.hung_task_timeout_secs kernel.hung_task_check_count kernel.hung_task_panic
åã ã®ãã©ã¡ã¼ã¿ã®æå³ã¨è¨å®æ¹æ³ã«ã¤ãã¦ã¯ãã¡ãã® KCS ã«è©³ããè¨è¼ããã¦ãã¾ãã®ã§ã覧ãã ããããªããæ¥æ¬èªçã 㨠RHEL 8/9 ã«å¯¾ããè¨åãããã¾ããããRHEL 8/9 ã«å¯¾ãã¦ãé©ç¨ã§ãããã¬ãã¸ã§ãã対å¿ããè±èªç KCS ãã覧ããã ã㨠RHEL 8/9 ã対象ã¨ããã¦ãã¾ãã®ã§æ°ã«ãªãæ¹ã¯ãã¡ãããã§ãã¯ãã¦ããã ãã¨è¯ãã§ãããã
- https://access.redhat.com/ja/solutions/915423 (æ¥æ¬èªç)
- https://access.redhat.com/solutions/60572 (è±èªç)
ã·ã¹ãã 管çä¸ç¹ã«éè¦ãªã®ã¯ D ç¶æ ã§ã®æ»çæéã®ä¸éãã¤ã¾ããã以ä¸é·ã D ç¶æ ã§æ»çãã¦ããã¨ãã³ã°ã¨ã¿ãªãæéãæ±ºãã hung_task_timeout_secs ã¨ããã³ã°ã¿ã¹ã¯ãæ¤åºããã¨ãã«ã«ã¼ãã«ãããã¯ãèµ·ãããã©ãããæ±ºãã hung_task_panic ã§ãããã
åè ã¯ããã¾ãçãã¨é »ç¹ã«ãã³ã°ã¿ã¹ã¯ãæ¤åºããæããããã¾ããã䏿¹ãã¾ãé·ãè¨å®ããã¨ã¿ã¹ã¯ã®å¦çãé²ã¾ãªããªã£ã¦ããé·æééå®³ã®æ¤ç¥ãã§ããªãå±éºãããã䏿¦ã«ä½ç§ãè¯ãã¨ã¯è¨ããªããã©ã¡ã¼ã¿ã§ãããµã¼ãä¸ã§ç¨¼åãã¦ããã¯ã¼ã¯ãã¼ãã®æ§è³ªããSLA ã«ãã£ã¦æ³¨ææ·±ãè¨å®ããå¿ è¦ãããã¾ããããã¾ã§ç®å®ã§ããããã¾ããããä¸è¬çã«ã¯ 120ã600 (åä½ã¯ç§)ãããã®ç¯å²ã§è¨å®å¤ã決å®ããããã¨ãå¤ãããã§ãã
å¾è 㯠0 ãã«ã¼ãã«ãããã¯ãªãã®è¨å®ã§ã1 ãã«ã¼ãã«ãããã¯ãèµ·ããè¨å®ã§ããã«ã¼ãã«ãããã¯ããå ´åãkdump ãæ§æããã¦ããã° vmcore (ã«ã¼ãã«ã¯ã©ãã·ã¥ãã³ã) ãåå¾ãã¦ãã³ã°ã¿ã¹ã¯ã®åå ãè§£æã§ããå¯è½æ§ãæ®ããã¨ãã§ãã¾ãããããã¯ã®æç¡ã¨é¢ä¿ãªãããã³ã°ã¿ã¹ã¯æ¤åºæã«ã¯ãã°ã« "INFO: task xxxxx:NNNNN blocked for more than TTTseconds." ã®ããã«ã¡ãã»ã¼ã¸ãè¨é²ããã¾ããã¢ããªã±ã¼ã·ã§ã³ã® SLA ãªã©ã«ãã£ã¦ã¯ããã³ã°æ¤åºãããã³ã«ãããã¯ãããªãã¦ãããã³ã°ãçºçãããã¨ããããã°è¯ãã¨ãã£ãã±ã¼ã¹ãããã¨æãã¾ãã
ãã³ã°ã¿ã¹ã¯äºè±¡ã®è§£æ
å®éã«ãã³ã°ã¿ã¹ã¯ãçºçããéã«çºçã®åå ãç¹å®ããã«ã¯ãåè¿°ã®è¨å®ã§ kernel.hung_task_panic=1 ãè¨å®ãã¦ãã³ã°ã¿ã¹ã¯æ¤ç¥ã§ã«ã¼ãã«ãããã¯ãèµ·ããããããã« kdump ã«ãã£ã¦ã«ã¼ãã«ã¯ã©ãã·ã¥ãã³ããåå¾ãã¦è§£æãããã¨ãå¿ é ã§ãããã ãããã®è¨äºã§èª¬æããããå 容ã§ã¯ããã¾ããã®ã§ãkdump è¨å®æ¹æ³ãè§£æã®ããæ¹ãªã©ã«ã¤ãã¦ã¯ããã§è§£èª¬ãããã¨ã¯ãããã¾ãããç¥èã¨ãã¦ããã³ã°ã¿ã¹ã¯ã®åå 調æ»ã«ã¯ãã®ãããªè¨å®ãå¿ è¦ãã¨ã ããæ¿ç¥ãããã ããã
ãã³ã°ã¿ã¹ã¯ã®äºä¾
ããããåæã¨ãªããã³ã°ã¿ã¹ã¯ã®èª¬æãçµããã¾ããã®ã§ãå®éã®é害äºä¾ããç´¹ä»ãã¦ããããã¨æãã¾ããä»åã¯2ä»¶ã®äºä¾ããç´¹ä»ãã¾ãã
RPM ã¢ãããã¼ããããªã¬ã¼ã¨ã㦠tuned ããã³ã°ã¿ã¹ã¯åããäºä¾
å®éã«ã客æ§å ã§çºçããäºä¾ã§ããpolkit RPM ãã¢ãããã¼ãããã¨ãããtuned ãµã¼ãã¹ããã»ã¹ããã³ã°ãã¦ãkernel.hung_task_panic=1 ã®è¨å®ãããã¦ããããã«ã¼ãã«ãããã¯ãçºçãã¾ããã
RPM ã®ã¢ãããã¼ãã¯ã·ã¹ãã ã¡ã³ããã³ã¹ã¨èããã°ãµã¼ãã¹ãã¢ããªã±ã¼ã·ã§ã³ã忢ããä¸ã§è¡ãã¨ããèãæ¹ãããã°ããªãã¼ããä¸è¦ãªã¢ãããã¼ãèªä½ã¯é©å®å®æ½ããã¨ããèãæ¹ãããã¾ãããã®å ´åã¯ããªãã¼ããä¸è¦ãªã¢ãããã¼ããªã®ã§ã¢ããªã±ã¼ã·ã§ã³ã忢ããã« RPM ã®ã¢ãããã¼ããé©ç¨ããã±ã¼ã¹ã§ãã
詳ãã調æ»ã®çµç·¯ã¯çç¥ãã¾ãããä½ãèµ·ãã¦ãããã¨ããã¾ãã¨ã
- polkit RPM ã®ã¢ãããã¼ããé©ç¨ããã¨ãããRPM ã¤ã³ã¹ãã¼ã«å¾ã«èªåå®è¡ãããã¹ã¯ãªãã (ãã¹ãã¤ã³ã¹ãã¼ã«ã¹ã¯ãªããã¬ãã) ä¸ã§ãpolkit ã®ãµã¼ãã¹ã®åèµ·åã試è¡ãã "systemctl try-restart polkit.service" ãå®è¡ããã
- å®ã¯ tuned ãµã¼ãã¹ã® systemd ã¦ããããã¡ã¤ã«ã®ä¸ã§ polkit ãµã¼ãã¹ã Requires ã«è¨è¿°ããã¦ãããpolkit ãµã¼ãã¹åèµ·ååã« tuned ãµã¼ãã¹ã忢ããã
- tuned ãµã¼ãã¹åæ¢å¾ã« polkit ãµã¼ãã¹ãåèµ·åããtuned ãµã¼ãã¹ãå度起åãã
- tuned ã®ããã©ã«ãè¨å®ã§ã¯ãµã¼ãã¹èµ·åæã« /etc/sysctl.conf ããã³ /etc/sysctl.d/* ã«è¨è¼ããã¦ããè¨å®ãé©ç¨ããããã«ãªã£ã¦ããã®ã§ãé©ç¨ãã
- ãã®ã¨ããsysctl.conf ãã¡ã¤ã«ã« "kernel.nmi_watchdog=0" 㨠"kernel.nmi_wathdog=1" ã¨ãããçç¾ããè¨å®ã両æ¹è¨è¼ããã¦ãããããkernel.nmi_watchdog ã«å¯¾ã㦠0 㨠1 両æ¹ã®å¤ãæ¸ãè¾¼ãåä½ãçºçããããã«ãªã£ã¦ãã (è¨å®ãã¡ã¤ã«ã®é åºã¨ãã¦æå¾ã«æ¸ãè¾¼ã¾ããã®ã 1 ã ã£ããããé常稼åæã«ã¯ 1 ã®è¨å®)
- sysconf é©ç¨ä¸ãkernel.nmi_watchdog ã« 0 ãæ¸ãè¾¼ãã æç¹ã§ tuned ãµã¼ãã¹ã¿ã¹ã¯ãèµ·åéä¸ã§ãã³ã°
- kernel.hung_task_timeout_secs ã«è¨å®ããæéãçµéãããã kernel.hung_task_panic=1 ã®è¨å®ã«ãããã£ã¦ã«ã¼ãã«ãããã¯çºçãããã®å¾ kdump ã«ããã«ã¼ãã«ã¯ã©ãã·ã¥ãã³ããä¿åãã¦ãµã¼ãåèµ·å
ã¨ããç¾è±¡ãèµ·ãã¦ãããã¨ããããã¾ããã
ã¡ãã£ã¨ããã§ nmi_watchdog ã«ã¤ãã¦èª¬æãå¿ è¦ã«ãªãã¾ãããnmi_watchdog ã¨ã¯ãã¼ãããã¯ã¢ãããã£ãã¯ã¿ã¨å¼ã°ããä»çµã¿ã§ããã«ã¼ãã«ã¢ã¼ãã§ãã¼ãã¦ã§ã¢å²ãè¾¼ã¿ç¦æ¢ã®ç¶æ ã§10ç§ãè¶ ããæéã«ã¼ããããç¶æ ããã¼ãããã¯ã¢ããã¨å®ç¾©ããã¦ãã¾ãããã³ã°ã¿ã¹ã¯ã¨ä¼¼ã¦ãã¦å°ãç´ããããã®ã§ããããã³ã°ã¿ã¹ã¯ã® D ç¶æ ã¯ã¿ã¹ã¯ã®å²ãè¾¼ã¿(主ã«ã·ã°ãã«ã«ãã)ãç¦æ¢ããã¦ããã ãã§ãã¼ãã¦ã§ã¢å²ãè¾¼ã¿ã¯æå¹ãªã®ã§ãD ç¶æ ã§å®è¡ä¸ã®ã¿ã¹ã¯ãã¹ã±ã¸ã¥ã¼ã©ã«ãã£ã¦ä¸æå®è¡ã䏿ããä»ã®ã¿ã¹ã¯ã« CPU ãæã渡ãããããã¼ãã¦ã§ã¢ã¤ãã³ãå¾ ã¡ã®ããã¹ãªã¼ãã㦠CPU ãæã渡ãããã¨ãã£ããã¨ãèµ·ããå¾ã¾ããããã¼ãããã¯ã¢ããã®å ´åã¯ãã¼ãã¦ã§ã¢å²ãè¾¼ã¿ãç¦æ¢ããç¶æ ã§ã«ã¼ãã«å ã§ã«ã¼ãããã®ã§ãã¹ã±ã¸ã¥ã¼ã©ã䏿ãããã¨ãã§ãããã¿ã¹ã¯ã ãã§ã¯ãªãã·ã¹ãã å ¨ä½ããã³ã°ãããããªç¶æ ã«ãªã£ãããã¾ããnmi_watchdog ã¯ãNMI (non-maskable interruptï¼ãã¹ã¯ã§ããªãå²ãè¾¼ã¿) ã¨ããç¦æ¢ä¸å¯è½ãªç¹æ®ãªå²ãè¾¼ã¿ã使ã£ã¦ãããæ¤ç¥ããè¨å®ã«ãã£ã¦ã¯ã«ã¼ãã«ãããã¯ãèµ·ãããã¦ãã³ã°ç¶æ ããã®å¾©æ§ããããããããã¨ãã§ããä»çµã¿ã§ãã
ã§ãnmi_watchdog ãæå¹ã«ããã¨ã·ã¹ãã ä¸ã®ãã¹ã¦ã® CPU ä¸ã§ watchdog ã«ã¼ãã«ã¹ã¬ãããèµ·åããã¾ããps ã³ãã³ãã§è¦ãã¨ããããªã¿ã¹ã¯ãåãã¦ããã®ãè¦ããããç¥ãã¾ããã
root 16 0.0 0.0 0 0 ? S 2022 0:00 [watchdog/0] root 19 0.0 0.0 0 0 ? S 2022 0:16 [watchdog/1] root 26 0.0 0.0 0 0 ? S 2022 0:16 [watchdog/2] root 32 0.0 0.0 0 0 ? S 2022 0:16 [watchdog/3] ... root 32 0.0 0.0 0 0 ? S 2022 0:16 [watchdog/31]
"[watchdog/N]" ã® N ã®é¨å㯠CPU ã³ã¢ã®çªå·ã表ãã¦ãã¾ãããã®ããã«ãã³ãã³ãåã«ç¸å½ããæååã [] ã§å²ã¾ãã¦ããã¿ã¹ã¯ã¯ãã¦ã¼ã¶ã¼ç©ºéã§åãã¦ãããã®ã§ã¯ãªããç´ç²ã«ã«ã¼ãã«å é¨ã§åãã¦ããã«ã¼ãã«ã¹ã¬ããã¨å¼ã°ãã¦ããã®ã§ãããkernel.nmi_watchdog=1 ã®è¨å®ãããã¨ããã¹ã¦ã® CPU ã³ã¢ã«å¯¾ãã¦1ã¤ãã¤ãwatchdog ã¹ã¬ãããèµ·åããã¾ãã
kernel.nmi_watchdog=1 ã§ããã¨ããã¤ã¾ã watchdog ã¹ã¬ãããåå¨ãã¦ããã¨ãã« 0 ãè¨å®ããã¨ãã¼ãããã¯ã¢ãããã£ãã¯ã¿ãç¡å¹ã«ããããããã®ã¹ã¬ãããçµäºãããã®ã§ãããã¹ã¬ãããçµäºããã kthread_stop() 颿°ã®èã¨ãªãé¨åã¯ä»¥ä¸ã®ããã«ãªã£ã¦ãã¾ãã
set_bit(KTHREAD_SHOULD_STOP, &kthread->flags); kthread_unpark(k); wake_up_process(k); wait_for_completion(&kthread->exited);
ä¸è¨ã¯ RHEL 9 kernel-5.14.0 ã® kernel/kthread.c:L646-L649 ã®æç²ã§ãããRHEL 7/8 ã§ãæ¬è³ªçã«ã¯å¤åããã¾ããããææ°ã® upstream kernel 6.2.5 (ä¸è¨ãªã³ã¯) ã§ããã¾ãå¤ãã£ã¦ãã¾ããã§ããã
ããã§è¡ã£ã¦ãããã¨ããã£ãã説æãã¾ãã¨
- ã¹ã¬ããã«å¯¾ãã¦çµäºãæç¤ºãããã©ã° KTHREAD_SHOULD_STOP ãã»ãããã¦
- ã¹ã¬ãããèµ·ããã¦
- ã¹ã¬ããã®çµäºãå¾ ã¤
ã¨ãããã¸ãã¯ã«ãªã£ã¦ãã¾ããã¤ã¾ããã¹ã¬ãããçµäºãããã«ãã¦ããä¸åº¦ãã®ã¹ã¬ãããå®è¡ããã¦èªçºçã«çµäºããå¿ è¦ãããä»çµã¿ã¨ããããã§ãã
ãã®é害äºä¾ã§ã¯ãCPU ã³ã¢ã®1ã¤ã§ãªã¢ã«ã¿ã¤ã ã¹ã±ã¸ã¥ã¼ãªã³ã°ããªã·ã¼ã§åä½ããã¢ããªã±ã¼ã·ã§ã³ã稼åã㦠CPU ã 100% å æãã¦ããç¶æ ã ã£ããããwatchdog ã¹ã¬ãããã¦ã§ã¤ã¯ã¢ããã§ããªãç¶æ³ã«ãªã£ã¦ãã¾ãããwatchdog ã¹ã¬ããã¯é常ã®ã¿ã¹ã¯ã¨åãããªã·ã¼ã使ãããã«ãªã£ã¦ãã¦ããªã¢ã«ã¿ã¤ã ã¹ã±ã¸ã¥ã¼ãªã³ã°ããªã·ã¼ã§ç¨¼åããã¿ã¹ã¯ã®æ¹ãåªå 度ãé«ããªã£ã¦ãã¾ãããã®ãããã¦ã§ã¤ã¯ã¢ããããã watchdog ã¹ã¬ããã¯ã©ã³ãã¥ã¼ã«å ¥ã£ã¦å®è¡å¾ ã¡ã«ãªã£ãã¾ã¾ããªã¢ã«ã¿ã¤ã ã¢ããªã±ã¼ã·ã§ã³ã CPU ãèªçºçã«æãæ¸¡ãã®ãæ°¸ä¹ ã«å¾ ã£ã¦ããå½¢ã¨ãªã£ã¦ãã¾ãããtuned ã® kernel.nmi_watchdog ã¸ã® 0 ã®æ¸ãè¾¼ã¿ã«ãã£ã¦å¼ã³åºããã kthread_stop() 颿°ã¯ãå®è¡å¾ ã¡ã¨ãªã£ãã¾ã¾çµäºãã§ããªãã¹ã¬ãããçµäºããã®ãæ°¸ä¹ ã«å¾ ã£ã¦ããããã®é D ç¶æ ãç¶ç¶ãã¦ããããã« tuned ã¿ã¹ã¯ããã³ã°ããã¨è¦ãªãããããã§ãããªããRHEL ã®ã¹ã±ã¸ã¥ã¼ãªã³ã°ããªã·ã¼ã«ã¤ãã¦è©³ããã¯ä¸è¨ãªã³ã¯ã®ããã¥ã¡ã³ãããåç §ãã ããã
æ¬é害ãçºçãããæ¡ä»¶ãããªã¢ã«ã¿ã¤ã ã¢ããªã±ã¼ã·ã§ã³ç¨¼åä¸ã§ã㤠kernel.nmi_watchdog=1 ã®è¨å®ã§ watchdog ã¹ã¬ãããå CPU ã³ã¢ä¸ã«åå¨ãã¦ããç¶æ ã«ããã¦ãkernel.nmi_watchdog=0 ãè¨å®ã㦠watchdog ã¹ã¬ãããçµäºããããã¨ãããã§ãããã¨ãã¯ã£ãããã¾ããã®ã§ãããã解決ããã«ã¯ tuned ãµã¼ãã¹ã®èµ·åä¸ã« nmi_watchdog ã®æå¹ã»ç¡å¹ç¶æ ã夿´ããªããã°ããã¯ãã§ããã¨ããããã§ãsysctl è¨å®ãã kernel.nmi_watchdog=0 ããã¹ã¦ã³ã¡ã³ãã¢ã¦ãã㦠kernel.nmi_watchdog=1 ã1ã¤ã ãæ®ãè¨å®ã¨ãã¦åç¾ãã¹ããè¡ã£ãã¨ãããtuned ã®ãã³ã°ãåé¿ã§ãããã¨ããããã¾ããã®ã§ãã客æ§ã«ãåãè¨å®ãé©ç¨ãã¦ããã ãããã«ä¾é ¼ãã¦è§£æ±ºãã¾ããã
CPU ãªã½ã¼ã¹ãä¸è¶³ãã¦ãã³ã°ã¿ã¹ã¯ã¨ã¿ãªãããäºä¾
ãã¡ãã¯ãåè¿°ã®äºä¾ã¨ã¯ã ãã¶è¶£ãç°ããã³ã°ã¿ã¹ã¯äºä¾ã§ãã³ã³ããå®è¡ç°å¢ã§çºçããäºè±¡ã«ãªãã¾ããOpenShift ãªã©ã³ã³ããå®è¡ç°å¢ã§ã¯ãåã³ã³ããã®ãªã½ã¼ã¹ (ã¡ã¢ãªã CPU ãªã©) ã«å¶éããããã®ã«ãLinux ã«ã¼ãã«ã® cgroups (Control Groups) ã¨ããæ©è½ãå©ç¨ããã¦ãã¾ãã赤帽ã¨ã³ã¸ãã¢ããã°ã§ã "cgroup" ããã㯠"cgroups" ã§æ¤ç´¢ããã¨ããããã¦ããå¤ãã®è¨äºã OpenShift ãåãã¨ããã³ã³ããæè¡ã®é¢é£è¨äºã§ãã
ã¾ããæ¬äºè±¡ã§ã¯ãã¢ããªã±ã¼ã·ã§ã³ä»¥å¤ã®éå¤ãªå¦ç (ä¾ãã°ãã¼ãã¦ã§ã¢å²ãè¾¼ã¿ã®å¦çããOS ã®æ§ã ãªç®¡çãªã©ãå®¶äºã«ãªãããã¦ããã¦ã¹ãã¼ãã³ã°ããªã©ã¨å¼ã°ãã¾ã) ã¯å®è¡ããªãããã«ç¹å®ã® CPU ã³ã¢ãäºç´ãã¦ã¢ããªã±ã¼ã·ã§ã³å°ç¨ã¨ãã¦ç½®ãã¦ãããisolcpus ãé¢ä¿ãã¦ãã¾ãã
åèè¨äº: 赤帽ã¨ã³ã¸ãã¢ããã° "ã¬ããããããèããNFVç°å¢åãã®ãã¥ã¼ãã³ã°"
ã³ã³ããå®è¡ç°å¢ã§ã¯ãã³ã³ãããªã½ã¼ã¹ã®å¶éã« cgroups ã¨ããæ©è½ãå©ç¨ããã¦ããã¨æ¸ãã¾ããããcgroups ã¯ä¸è¬ã® RHEL ã·ã¹ãã ã§ãæå¹ã«ãªã£ã¦ããã以ä¸ã®ãã㪠mount ã³ãã³ãã®åºå (æç²) ã«è¦è¦ãã®ããæ¹ãããããã®ã§ã¯ãªãã§ããããããã㯠RHEL 8 ã§ã®åºåä¾ã§ãã
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,net_cls,net_prio) cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpu,cpuacct) cgroup on /sys/fs/cgroup/hugetlb type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,hugetlb) cgroup on /sys/fs/cgroup/rdma type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,rdma) cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,devices) cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,perf_event) cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,blkio) cgroup on /sys/fs/cgroup/memory type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,memory) cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,cpuset) cgroup on /sys/fs/cgroup/pids type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,pids) cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,seclabel,freezer)
ãã®ããã«ãcgroups æ©è½ã¯ /proc ã /sys ã®ãããªçä¼¼ãã¡ã¤ã«ã·ã¹ãã ãçµç±ãã¦è¨å®ã«ã¢ã¯ã»ã¹ããããã«ãªã£ã¦ããããããã®ãã¦ã³ããã¤ã³ãã®ä¸ã«ãã¿ã¹ã¯ (ï¼ããã»ã¹ã»ã¹ã¬ãããããã¦ãã®æèã§ã¯ã³ã³ããã) ã®èµ·åã¨çµäºã«ä¼´ããåçã«ãã£ã¬ã¯ããªæ§é ã®ä½æãåé¤ãè¡ããã¾ããã¤ã¾ããã¿ã¹ã¯ã®èµ·åãçµäºãå¢ãã¦ããã«ãããã£ã¦ãããã ã /sys/fs/cgroup 以ä¸ã®ãã£ã¬ã¯ããªæ§é ã®ä½æãåé¤ã®å¦çãå¢å¤§ãã¦ããã¨ãããã¨ã§ããããã¦ããã®ãã㪠/sys/fs/cgroup 以ä¸ã®ãã£ã¬ã¯ããªæ§é ã®ç®¡çã¯å ¸åçãªãã¦ã¹ãã¼ãã³ã°ã®ä¸ç¨®ãªã®ã§ãå ã»ã©è§¦ãã isolcpus ã§äºç´ãã¦ããªãããã¦ã¹ãã¼ãã³ã°ç¨ã® CPU ã³ã¢ã§å®è¡ãããã¨ããã¨ãããéè¦ãªæå³ãæã¡ã¾ãã
ãã®äºè±¡ã§ã¯ããµã¼ãã«æè¼ããã CPU ã³ã¢ã®å¤§åã isolcpus ã§ã¢ããªã±ã¼ã·ã§ã³å°ç¨ã¨äºç´ãã¦ãããæ®ãå°ãªããã¦ã¹ãã¼ãã³ã° CPU ããããã管çãã»ãã¼ãã¨å®è¡ãããããªæ§æã¨ãªã£ã¦ãããã¨ãç½ããã¦ãã¾ãããé害çºçæã«ã¯ãã³ã³ããã®çµäºã«ä¼´ã /sys/fs/cgroup 以ä¸ã«ä½æããã¦ãããã£ã¬ã¯ããªæ§é ãåé¤ããéã«ãå¦çãå®è¡ãã¦ãã CPU ã®ã©ã³ãã¥ã¼ (run queue: ã«ã¼ãã«ã®ã¹ã±ã¸ã¥ã¼ã©ãå®è¡å¾ ã¡ã¿ã¹ã¯ã管çãããã¼ã¿æ§é ) ãé常ã«é·ããªã£ã¦ãããã¨ãããã£ã¦ãã¾ãã1åã® CPU ã®éãããæéããæ°å¤ãã®ã¿ã¹ã¯ã奪ãåã£ã¦ããã¨è¨ã£ã¦ãè¯ãããç¥ãã¾ããã
ãã®å ´åã¯ãã³ã°ããã¿ã¹ã¯ã¯ systemd ã§ãçµäºããã³ã³ããã«å¯¾å¿ãã /sys/fs/cgroup/memory é ä¸ã®ãã£ã¬ã¯ããªæ§é ãåé¤ãã¦ããã®ã§ãããå¦çãå®äºããåã«ã¿ã¤ã ã¹ã©ã¤ã¹ã使ãåã£ã¦ä»ã®å®è¡å¾ ã¡ã¿ã¹ã¯ã« CPU ãæã渡ããæ¬¡ã®ã¿ã¤ã ã¹ã©ã¤ã¹ãå¾ ã¤ãã¨ãããã¨ãç¹°ãè¿ãã¦ããã¨è¦ããã¾ããæåã®äºä¾ã§ãç´¹ä»ãããã¼ãããã¯ã¢ããã®ã¨ããã§ã触ãã¾ããããD ç¶æ ã¯ã¿ã¹ã¯ã¸ã®å²ãè¾¼ã¿ã¯ç¦æ¢ããã¾ãããOS ã¨ãã¦ã®åä½ãè¦ãã°å²ãè¾¼ã¿ãç¦æ¢ããã¦ã¯ãã¾ããã®ã§ãã¹ã±ã¸ã¥ã¼ã©ã«ãã D ç¶æ ã«ãã systemd ã¿ã¹ã¯ããä»ã®ã¿ã¹ã¯ã¸å®è¡ãç§»ãããããã®éãè¡ããã¾ãããã®ã±ã¼ã¹ã§ã¯ã夿°ã®ã¿ã¹ã¯ãåã CPU ä¸ã§å®è¡ãå¾ ã£ã¦ãããããä¸åº¦ CPU ãæã渡ãã¨æ¬¡ã« CPU ãå²ãå½ã¦ããã¦å®è¡ã§ããã¾ã§ãããªãã®éå®è¡å¾ ã¡ã§ãã£ãã¨æããã¾ãã
/sys/fs/cgroup ã¯çä¼¼ãã¡ã¤ã«ã·ã¹ãã (æ¬æ¥ã®ãã¼ã¿ã¹ãã¬ã¼ã¸ã§ã¯ãªããã«ã¼ãã«ã¸ã® API ãæä¾ããããã®ãã¡ã¤ã«ã·ã¹ãã ã¨ããæå³ã§æ¬ä¼¼) ã§ã¯ããã¾ããããã¡ã¤ã«ã·ã¹ãã ã¨ããè¤éãªãã¼ã¿æ§é ã管çããã«ã¼ãã«ã®ãµãã·ã¹ãã ã§ãã以ä¸ããã£ã¬ã¯ããªããã¡ã¤ã«ã®ä½æãåé¤ãªã©ã®æä½ã«ã¯ä»ã®ãã¡ã¤ã«ã·ã¹ãã ã¨åæ§ã«æä»å¶å¾¡ãå¿ è¦ã§ããsystemd ã¯ã·ã¹ãã ã³ã¼ã«çµç±ã§ãã£ã¬ã¯ããªã®åé¤ãã«ã¼ãã«ã«ä¾é ¼ããå¾ãæä»å¶å¾¡ã®ãã D ç¶æ ã¨ãªã£ã¦ã«ã¼ãã«ã®å¦çãå®äºããã®ãå¾ ã£ã¦ãã¾ãããã«ã¼ãã«ã®ãã£ã¬ã¯ããªåé¤å¦çã¯æ£å¸¸ã«é²è¡ãã¦ããã®ã§ãããä»ã®å¤æ°ã®ãã¦ã¹ãã¼ãã³ã°ã¿ã¹ã¯ã¨ CPU æéã奪ãåãç¶æ³ã ã£ãããå¦çã®å®äºã¾ã§ã« kernel.hung_task_timeout_secs ã«è¨å®ããæéãè¶ ããé·æéãè¦ãã¦ãã¾ãããã³ã°ã¿ã¹ã¯ã¨ãã¦æ¤ç¥ããã¦ã«ã¼ãã«ãããã¯ã«è³ã£ãã¨èãããã¾ãã
ç·©åçã¨ãã¦ã¯ã
- isolcpus ã«æå®ããã³ã¢æ°ãæ¸ããã¦ãã¦ã¹ãã¼ãã³ã° CPU ãå¢ãã
- kernel.hung_task_timeout_secs ã«æå®ããã¿ã¤ã ã¢ã¦ããå»¶é·ãã¦ãåãç¶æ³ã§ãã³ã°ã¿ã¹ã¯ãæ¤ç¥ãããªãããã«ãã
ã¨ãã£ããã¨ãèãããã¾ãããæåã«ãç´¹ä»ããäºä¾ã¨ã¯ç°ãªãçºçæ¡ä»¶ãåçã§åç¾ãé£ãããããç·©åçã¨ãã¦è¨å®å¤ã妥å½ã§ããã夿ããã«ã¯ãç¾å®ã«è¿ãè² è·ãã¹ãã宿½ãã¦æå¹æ§ã確èªããå¿ è¦ãããã¾ããã¾ããåè ã®å¯¾å¿ã¯ãµã¼ãã®ãã£ãã·ã㣠(åæã«å®è¡ã§ããã¢ããªã±ã¼ã·ã§ã³ã³ã³ããæ°) ã«å½±é¿ãä¸ããã®ã§ã1å°ã®ãµã¼ãã ãã®åé¡ã§ã¯ãªãã·ã¹ãã å ¨ä½ã¸ã®å½±é¿ãèæ ®ããå¿ è¦ãããã対å¿ããã«ãã¦ãæ éã«è¡ãå¿ è¦ãããã§ãããã
ã·ã¹ãã ãæ§ç¯ããéãã¢ããªã±ã¼ã·ã§ã³æ§è½ãæé©åãããããã§ããã ãå¤ãã®ãã¼ãã¦ã§ã¢è³æºãã¢ããªã±ã¼ã·ã§ã³ã®å®è¡ã«æ¯ãåãããã®ã¯èªç¶ãªãã¨ã§ããããã¦ã¹ãã¼ãã³ã°ã¿ã¹ã¯ã OS ã®ç¨¼åã«ã¯éè¦ãªå¦çã§ãã®ã§ãã·ã¹ãã ã®å®å®ç¨¼åã«ã¯ã¢ããªã±ã¼ã·ã§ã³å®è¡ã¨ãã¦ã¹ãã¼ãã³ã°ã«æ¯ãåããè³æºã®ãã©ã³ã¹ã大å¤éè¦ã§ãããã¨ããæè¨ãå¾ãããäºä¾ã¨ãªãã¾ããã
ããã³
ã¡ãã£ã¨é·ãè¨äºã¨ãªã£ã¦ãã¾ãã¾ããããLinux ã«ã¼ãã«ã®æ§ã ãªæ©è½ãæ¦å¿µãç»å ´ãã¦ãã¹ã¦ã解説ãããã¦ããªãã®ã§çè§£ãé£ããé¢ãããããç¥ãã¾ãããããã³ã°ã¿ã¹ã¯ã¨ã¯ä½ããã¾ããOS ãã°ã§ã¯ãªãåå ã«ãã£ã¦ããã³ã°ã¿ã¹ã¯ãçºçããäºä¾ãéãã¦ãã·ã¹ãã ã®å®å®ç¨¼åã®ããã«ã·ã¹ãã ãæ§æã»è¨å®ãå ¨ä½çã«æ¤è¨ããå¿ è¦ããããã¨ãç¥ã£ã¦ããã ããã幸ãã§ãã