1.linuxä¸ Redhat Centos ubuntu Fedora çåºå«
2.centosådebianåªä¸ªå¥½ï¼
3.runc hang 导致 Kubernetes 节点 NotReady
4.å¦ä½ä»ç¡¬çå®è£
FREEBSD
5.GKI: 通用内核映像
6.深入理解 slab cache 内存分配全链路实现
linuxä¸ Redhat Centos ubuntu Fedora çåºå«
1.é½è¯´redhatæ¯linuxç代åè¯ï¼ä¹å°±æ¯è¯´redhatçlinux被大å¤æ°äººè®¤å¯ã
å¯æ¯ï¼RedHat.Enterprise.Linux.5 ä¸ redhat linux 9.0 è¿æredhat fedora core ä¸è ä¹é´çå ·ä½å ³èååºå«æ¯ä»ä¹ï¼ centosåæ¯ä»åªååºæ¥çï¼æä»¬å ¬å¸ç¨çå°±æ¯centosï¼è¿ä¸ªå¥½åï¼å¥½å¨åªéï¼
redhatæåçåå ï¼åå²æ ä¹ ï¼å¹´å°±å¼å§ålinuxï¼å ¬å¸è¿è¥ï¼æä¾å®æ´ç解å³æ¹æ¡ï¼æ´ä¸ä¸ï¼èä¸ådebianæ¯ç¤¾åºå½¢å¼çï¼ç¬årpmå ï¼ä½¿linuxå®è£ 软件åå¾é常ç®åï¼å å»ç¼è¯ç麻ç¦ã
redhatå¨åè¡ç9.çä¹åï¼å°±ä¸å延ç»ä»¥åçå¼å代å·ï¼èæ¯ä»¥RedHat.Enterprise.Linuxå½åï¼ç®ç§°rhelï¼å³redhatä¼ä¸çï¼ç°å¨å·²ç»å¼åå°5ï¼rhel好åæ¯ä»3å¼å§ï¼éè¦å®¢æ·è´ä¹°licenseï¼å³æ³è·å¾ç³»ç»çåç»æ´æ°ä¸æå¡æ¯éè¦ä»è´¹çï¼å¯ä»¥å è´¹æ´æ°å¤©ï¼èä¸å¦æä¸æ³äº«åæ´æ°ï¼ç³»ç»ä¹æ¯å¯ä»¥å 费使ç¨çãï¼ï¼èå ¶ä¸ªäººæ¡é¢å è´¹ç交ç»redhat社åºå¨åï¼è¿ä¸ªç¤¾åºæ¯å¯ä»¥è·å¾redhatå ¬å¸æ¯æçï¼è¿ä¸ªç¤¾åºåå¸ççæ¬å°±æ¯fedoraï¼ç´è¯ä¹æ¯ä¸ç§ç·å£«å¸½åï¼ï¼ä¸å¹´ä¸¤ä¸ªçæ¬ï¼ç°å¨å·²ç»åè¡å°ï¼fedoraä¸ç´æ¯rhelçä¸ä¸ªå®éªåºï¼æ¯ä¸ªçæ¬æéç¨ç软件ï¼å æ ¸ä¸åºçæ¬å ä¹é½æ¯ææ°çï¼å èé 置起æ¥æäºå°é¾ï¼ä¸è¿åºäºredhatçåºç¡ï¼ä½¿ç¨fedoraç人ä»ç¶å å¾å¤§çæ¯ä¾ãcentosæ¯å°rhelå次ç¼è¯ï¼å»æredhatæ å¿ï¼å¹¶æ社åºåå¸çlinuxçæ¬ï¼æ以ï¼centosä¸rhelå ä¹æ¯æ²¡æåºå«çï¼ä¸»è¦çåºå«å°±æ¯ä¸ç¨ä»è´¹å³å¯ä½¿ç¨ï¼ä»rhelçè§åº¦æ¥è¯´ï¼centosæ¯é常éåä¼ä¸ä½¿ç¨çã
2.æ®ææç¥ï¼redhatæ¯linuxçåè¡ååï¼é¤æ¤ä¹å¤è¿æubuntu,内核内核debian,suse,redflagçï¼æ¢ç¶linuxæ¯å è´¹çï¼ä¸ºä»ä¹ä¼æè¿ä¹å¤å ¬å¸ä¸é¨ålinuxçåè¡çæ¬å¢ï¼ä¸èµé±ä¸ºä»ä¹è¿è¦åå¢ï¼èä¸æè§å¾ä»ä»¬è¯å®è½ä»ä¸è·åå©ççï¼ä½æä¸ç¥éè¿å ¶ä¸çç«è »ãæç½çæåç»æå¤è®²è®²è¿ä¸ªã
å¦æåè¡çæ¬æ¯å¯ä»¥çå©çï¼é£linuxå æ ¸çä½è linusè½å¾å°ä»ä¹å¥½å¤å¢ï¼
linuxå æ ¸çæ¯æ¬¡å级é½æ¯linusè¿ä¸ªæåçä½è ä¸ç´å¨æçåï¼æ¯æ¬¡å级è±è´¹ç人åç©åï¼å¯¹è¿ä¸ªä½è æä½ç»çºªä¸çåæ¥åï¼
linuxçå©æ¹å¼ï¼linux个人æ¡é¢çæ¯å¯ä»¥å è´¹è·å¾å¹¶ä½¿ç¨çï¼ä½åredhatä¼ä¸çï¼redflag红æä¼ä¸çï¼æ¯éè¦è´ä¹°æå¡çï¼ä¼ä¸ç主è¦é对çæ¯é¶è¡ï¼æ¿åºï¼æè 大åä¼ä¸è¿ç§å¯¹äºç¨³å®æ§åå®å ¨è¡è¦æ±è¾é«çè¡ä¸ï¼æ¯èµ·æè´µçunixï¼linuxè¿æ¯æéè·¯çã个人æ¡é¢çä¹å¹¶ä¸æ¯æ å©å¯å¾çï¼è³å°å¾å¤linux社åºä¸ä¼èµé±ï¼å 为为社åºå·¥ä½ç人é½æ¯åå¸å¨ä¸çåå°çï¼å¼ålinuxä¹æ¯å©ç¨ä¸ä½æ¶é´æ¥åçï¼ä¸ä¸ºäºè·å¾æ¥é ¬ï¼åªä¸ºäºä¸ä»½æ§çèå·¥ä½ï¼ç¤¾åºçlinuxçæ¬åå¸åï¼ç¨æ·å¯ä»¥è´ä¹°linuxå®è£ å çï¼è½ç¶å çå¾ä¾¿å®ï¼æ¯èµ·å¾®è½¯çç³»ç»ï¼ï¼ä½ç±äºææ¬å ä¹ä¸º0ï¼æ以è¿æ¯æçä½çãåæï¼ç°å¨å¸é¢ä¸æå¾å¤é¢è£ ubuntuçç¬è®°æ¬éå®ï¼æ¯å¦dellï¼é£ä¹æ´å°è¯å®è¦ä»ç»ubuntuè´¹ç¨çï¼å½ç¶ï¼è¿ä¸ªè´¹ç¨è¦æ¯é¢è£ vistaä½å¾å¤ã
ç°å¨linuxçå æ ¸åºè¯¥æ¯GNUå¨åï¼èä¸æ¯linusã
3.ä¸é¢è¯´äºè¿ä¹å¤åè¡çæ¬çlinuxï¼è¯·é®åªå ç§æ¯è¾å¥½ï¼å¥½å¨åªéï¼æ¯ä¸æ¯æ ¹æ®linuxçç¨éä¸åï¼éæ©linuxççæ¬ä¹åºææä¸åå¢ï¼éº»ç¦å ·ä½è¯´è¯´å个çæ¬çé¿å¤ä¸ç¼ºç¹ã
redhatä¼ä¸çï¼rhelï¼ï¼éåä¼ä¸ä½¿ç¨ï¼åºè²ç稳å®æ§åå ¼å®¹æ§è¡¨ç°å¨æ¯ä¸ªçæ¬é½ä½¿ç¨äºæ¯è¾æççåºä¸å æ ¸ï¼å¹¶ä¸å¯¹ä¸äºå¤§åçEDA软件é½é¢å è¿è¡äºæµè¯å®è£ ï¼æ¯å¦cadenceï¼æ以æ¯è¾éååæå¡å¨åå·¥ä½ç«ï¼ä½ä¸éåå½ä¸ªäººæ¡é¢ï¼å 为ä¸è´ä¹°licenseï¼å°±ä¸è½äº«åå°ä¸°å¯çæ´æ°ï¼èä¸ç±äºå æ ¸ä¸åºé½æ¯è¾ä¿å®ï¼æç¹è·ä¸ä¸linuxçåå±é度ï¼ä»¥è³äºå¾å¤å¨±ä¹è½¯ä»¶å®è£ èµ·æ¥é常å°é¾ãcentosä¸rhel类似ã
fedoraï¼åé¢å·²ç»è¯´äºï¼è¿ä¸ªçæ¬æ¯æ¬¡åè¡é½æ¯è¾åè¿ï¼ä»¥è³äºå¾å¤é©±å¨ç¨åºé½ä¸è½å¾å¥½çé ç½®ï¼ä½ææ°çfedoraè¿æ¯å¾ä¿å®å稳å®çãyu软件æºåºäºrpmå 管çï¼å®è£ 软件å¾æ¹ä¾¿ã
ubuntuï¼åºäºdebianï¼æ¡é¢ç¯å¢ä»¥gnome为主ï¼æ¯ç®åææµè¡çlinux个人æ¡é¢ï¼å®çä¼ç¹æ¯é 置起æ¥é常ç®åï¼å®è£ å®ç³»ç»ä¹åï¼åªè¦ç¡¬ä»¶ä¸æ¯å¤ªæ°ï¼åºæ¬ä¸ç¨è¿è¡å ¶ä»é ç½®ï¼ç¡¬ä»¶é½å¯ä»¥è¯å«å¹¶å®è£ 好驱å¨ãèä¸å ¶aptæ´æ°æºæå¡å¨ä¸ç软件é常丰å¯ï¼åªè¦æä¸æ¡å½ä»¤ï¼å°±å¯ä»¥èªå¨ä»ç½ç»ä¸è½½å®è£ æé软件ãubuntuå®è£ æ¹ä¾¿ï¼çè³äºå¯ä»¥ä½¿ç¨wubiå°linuxå®è£ å¨windowsååºãubuntuè¿æå¾å¤è¡ççæ¬ï¼å æ¬Kubuntuï¼æ¡é¢éç¨KDEï¼è¾ä¸ºå丽ï¼ï¼xubuntuï¼éç¨xfceï¼è¦æ±é ç½®è¾ä½ï¼ï¼eubuntuï¼é¢åå¿ç«¥åæè²ï¼ï¼ç¨æ·å¯ä»¥æ ¹æ®éæ±ï¼å好ï¼å硬件é ç½®è¿è¡éæ©ã
suseï¼è¢«èªä¸ºææ¼äº®çlinuxåè¡çæ¬ï¼å½ç¶ï¼å ¶æ¬è´¨åå ¶ä»çæ¬é½æ¯ä¸æ ·çï¼åªæ¯å¨çªå£ç¾å·¥ä¸å¼åè ä¸äºä¸å®å夫ï¼èä¸è·å¾å丽çåæ¶å½ç¶ä¹éè¦ä»åºæ´é«çç³»ç»èµæºå ç¨ãå ¶ä»çlinuxçæ¬éè¿ä¸äºæ¹é ï¼å®å ¨æ¯å¯ä»¥å®ç°suseçææçã
redflagï¼ä¸ç§é¢å¼åçlinuxçæ¬ï¼ä¸»è¦é¢åæ¿åºç¨æ·ï¼å ¶ä¸ªäººæ¡é¢çå è´¹ï¼è¿ä¸ªçæ¬çç¾å·¥ä¸ä¸windowsé常æ¥è¿ï¼æ¯ä½¿ç¨è çå ¥é¨é¾åº¦éä½ï¼ä½å®é ä¸æ¡é¢ä¹æ¯åºäºKDEçï¼å¾å¹³å¸¸ã
puppyï¼ä¸ä¸ªé常å°å·§çlinuxçæ¬ï¼å®è£ éåå¤Mï¼å´å æ¬äºå¾å½¢æ¡é¢ï¼æµè§å¨ï¼åå ¬ç常ç¨ç软件ï¼ç³»ç»è¿è¡æ¶é½åå¨ä¸å åä¸ï¼æ®è¯´å®è£ å¨Uçä¸çpuppyï¼å¨ç³»ç»å¯å¨åï¼å¯ä»¥å°Uçæ¿æï¼ç³»ç»ä¾ç¶å¯ä»¥è¿è¡ã
4.æ对linuxçç®åäºè§£ï¼å个åè¡çæ¬ä½¿ç¨çlinuxå æ ¸é½æ¯åä¸ä¸ªãåªä¸è¿å¯è½éçåçæ¬çåè¡æ¶é´ä¸åï¼éç¨çå æ ¸çæ¬ä¼ä¸åãä¸ç¥éç解ç对åï¼
linuxçå æ ¸ç®åè¿å¨é£éçåå±ï¼ç°å¨å¸¸è§çæ¯2.Xçæ¬ï¼X为å¥æ°ï¼ä¸ºä¸ç¨³å®çï¼x为å¶æ°ä¸ºç¨³å®çï¼æ¯å¦rheléç¨ç2.4åç®åææ°çï¼å¾å¤ä¸ªäººæ¡é¢éç¨ç2.6ãä¸åçlinuxåè¡çæ¬éç¨çå æ ¸ä¸å°½ç¸åï¼æ¯å¦fedoraä¸è¬é½æ¯éç¨ææ°çå æ ¸ã
5.ä¹æ以ä¼æè¿ä¹å¤é®é¢ï¼æ¯å 为ææ¤æ¶ç大è对linuxçç解é常混乱ï¼å¯¹äºæä½ç³»ç»çç解åªææ£ççwindowsåçççwindowsçç®åç解ãææ¶å ä¸è°ççé®é¢ï¼å°±æ£çèè¨ï¼æç¥élinuxé¨åçæ¬æ¯æ¶è´¹çï¼å¤§é¨åå¯è½æ¯å è´¹çï¼ä¸ºä»ä¹ä¼åºç°æ¶è´¹ä¸å 费两ç§ç°è±¡ï¼ ä½ä¸ºä¼ä¸çº§çæå¡å¨åºç¨ï¼å è´¹çæ¬çlinuxæ¯å¦å¯ä»¥åºä»å¾äºï¼å è´¹çæ¯ä¸æ¯æ¯æ¶è´¹çæ§è½å®å ¨ä¸è¦å·®å¥½å¤ï¼ï¼ï¼ï¼å ·ä½è¯´è¯´å è´¹åæ¶è´¹çlinuxï¼è°è°äºè ä¹é´çåºå«ã
åé¢å·²ç»æå°ä¸äºäºï¼è³äºå è´¹çï¼å¦æéç¨è¾ä¸ºä¿å®çæçççæ¬ï¼ç¨³å®æ§åºè¯¥æ¯å¯ä»¥ä¿è¯çï¼å®å ¨æ¹é¢ï¼ä¸æ¯å¾äºè§£ï¼ä»æåä½ä½¿ç¨çrhleæ¥çï¼ä¸æ®élinux个人æ¡é¢å¹¶æ 大çåºå«ã
6.OpenSourceä¸Freeï¼æ¶è´¹çlinuxçæ¬ï¼æ¯ä¸æ¯å°±ä¸ç®å¼æºçæ纵系ç»äºå¢ï¼æ¶è´¹çlinuxè¯å®ä¸ä¼å¼æºï¼æ¯ä¸æ¯ï¼å 为å¦æå¼æºäºï¼äººå®¶é½ç¥éä½ çæºä»£ç äºï¼å¼åå就没åæ³æ¶è´¹åä»ä»¬çåè¡çæ¬çlinuxäºãä¸ç¥éç解ç对åï¼è¯·å ·ä½è¯´è¯´"å¼æºä¸å è´¹"
æ¿redhatæ¥è¯´ï¼ä»ä»¬æ¢ææ¶è´¹çrhelï¼ä¹æåç¼è¯rhelå¾å°ç并ä¸æ¯å¼æºçcentosï¼ä½¿ç¨é£ä¸ªå®å ¨åå³äºç¨æ·èªæ¿ãè¿æ ·æ¥çï¼å¼æºä¸å è´¹çåºå«ä» å¨äºå¼æºçä¸è¥¿ï¼å¨éµå®gnuåè®®çåºç¡ä¸ï¼ä»»ä½äººé½å¯ä»¥å¾å°ç¨åºçæºä»£ç ï¼å¹¶å¯ä»¥èªå·±ä¿®æ¹ï¼å¹¶å¯ä»¥ååå¸ï¼èå è´¹çå°±åªè½å 费使ç¨ï¼èä¸å¯ä¿®æ¹äºã
7.å¦æå¯ä»¥çè¯ï¼åä»ç»ä¸ä¸linuxçå¦ä¹ æ¹æ³ï¼ålinux好çå ¥é¨ä¹¦ç±ãå¨æ¥å¸¸å·¥ä½å½ä¸ï¼linuxçåºç¨ä¼æå¾å¤è§è²ï¼æ主è¦æ¯æ³å¦ä¹ LAMPæ¶æä¸çWEBå¼åï¼ä¸ç¥éåºè¯¥ä¾§éå¦ä¹ linuxåªäºåºç¨ï¼åªäºæ¯LAMPç¨åºåå¿ é¡»çç»ææ¡çLINUXææ¯ï¼å¨æ±èåºèLAMPç¨åºåçèä½ï¼ä¸è¬é¢è¯èæ ¸linuxæ¹é¢é½æ¯åªäºæè½ï¼
ï¼ä¸æï¼
请åè
centosådebianåªä¸ªå¥½ï¼
DebianVSCentOSåªä¸ªæ´å¥½
éè¿ä»¥ä¸æ个人认为:ä»å®å ¨ä¸è¯´CentOS,rhel,oracle-LinuxDebian
ä»æ§è½ä¸é说ä¹æ¯CentOS,rhel,oracle-LinuxDebian
å ¶æ¬¡ï¼éè¿è§å¯debainå æ ¸æºç åCentOSå æ ¸æºç 大å°ï¼æ们å¯ä»¥çå°Debianå æ ¸æMï¼èCentOSå æ ¸åè¾¾å°äºM为ä»ä¹å¢ï¼è¿æ¯æå åä¸ç¯æç« ä¸
åæè¿çï¼Debianæ¯èªç±å æ ¸ï¼éé¢å»é¤äºå¾å¤no-freeåºä»¶é©±å¨ï¼åè½ä»£ç ï¼èCentOS
åæ¯ç»§æ¿äºrhelçç¹ç¹ï¼å¾å°ä¸çå¾å¤ç¡¬ä»¶ååçæå©æ¯æï¼ä¸ç®¡æ¯freeè¿æ¯no-freeçå ¨é¨å å«å¨å æ ¸æºä»£ç ä¸ï¼èä¸å¨èæå(kvm)é¨ç½²ä¸ä¹æ¯å¤äºé¢å¯¼å°ä½ç,å ¶ä¸ä¹ä¸ä¹ä¸äºè¿æ¥å¾å被Debian,æè æ åå æ ¸é纳ç代ç ï¼è¿æ ·å°±å¯¼è´äº:
硬件æ¯æç¹å«æ¯èæåCentOS,rhel,oracle-LinuxDebian(freebsd)
è¿æï¼ä¸ä¸ªå°±æ¯éè¿ç¼è¯å æ ¸æ们åç°ï¼é»è®¤æ åµä¸ï¼CentOSå¼å¯çå æ ¸
é项é½æ¯é常ä¿å®çï¼èDebianåå¾æ¶é«¦ï¼æä»ä¹æ°ç©æå°±ä¸ï¼æ¯å¦Debianå¼å¯äºå ååé slubå æ ¸å°ºå¯¸ä¼åOsèCentOSè¿æ¯ä½¿ç¨ä¹ ç»èéªçslabåO2..........
é»è®¤å æ ¸é ç½®æ§è½æµè¯DebianCentOS,rhel,oracle-Linux
æåæ们æ¥è¯´è¯´ï¼ä»ä»¬åèªçåºç¨è½¯ä»¶æ¯ææ°éï¼ä»å®æ¹åå¸çå®è£ dvdï¼åªæä¸å¼ 3.4Gï¼ä¸å¯ä»¥çåºCentOSrhelæ¯ä¸é¨æ¥åæå¡å¨ï¼vpsæ¥ç¨çï¼å å«ç软件ç¸å¯¹debainå®è£ dvd(8å¼ dvd)æ¥è¯´æ¯å°åªåå°ãææ¾ç»å°±yuminstallnginxç»ææ失败äº
æ以为ææéãç»æçç没æï¼è¦èªå·±äºå¤å»å æºï¼æç¥éæå¾å¤ç¬¬ä¸æ¹ç软件æºå¯ä»¥ä½¿ç¨ï¼ä½æ¯åä»å®æ¹æ¯æä¸è¯´æ¯å¾å°äºï¼è¿ä¹è¡¨æäºCentOSéè¦ç¨éï¼è¿æ¯ä»¥æå¡å¨ä¸ºä¸»ï¼æ¡é¢å强å¯ä»¥å§ï¼èDebianå¢æ4ä¸å¤ç§è½¯ä»¶ï¼æ¶µçäºå¼åï¼æ¡é¢ï¼æå¡å¨è½¯ä»¶ï¼ççå ä¹ä½ 说è½ç¨å°çææ软件é½æï¼èä¸aptå 管çä¹æ¯yum强å¾å¤ï¼ä»¥æ¤ï¼æ个人å¤æï¼
å¼åæ¹ç¯å¢ï¼éç¨æ§DebianCentOS,rhel,oracle-Linux
好äºæ¥ä¸ªæ»ç»å§ï¼å¦æä¸æ¯çççç³»ç»å®å¶ä¼åç人ï¼æç建议æ¯ï¼
1ï¼å¦æä½ æ¯å¼åè ï¼åçççæ§è½è¿½æ±è æè æ¯vpsä¸çæå¡å¨è¯·ä½¿ç¨Debianï¼
2,å¦æä½ æ¯vpsä¾åºåï¼çµååå¡ï¼ä½¿ç¨äºå¾å¤åhp,ibmç大åçæå¡å¨ï¼èä¸è¦æ±å¾é«ç稳å®æ§ï¼å®å ¨æ§ï¼æå»ºè®®ä½ ä½¿ç¨rhel家æï¼æå°ç¨%å·¦å³çæ§è½æ失ï¼ä¸æ¯å¾å¤§çæç¨æ§æ失ï¼æ¢æ¥å®å ¨ç¨³å®è¿æ¯å¼å¾çï¼
centosdebianåªä¸ªå¯¹armæ¯æ好
CentOSåDebiané½æ¯æARMæ¶æï¼ä½å®ä»¬å¨å¯¹ARMçæ¯ææ¹é¢ææä¸åï¼å ·ä½åå³äºæ¨çéæ±ãä¸è¬èè¨ï¼Debianæ¯æ´æ©æ¯æARMæ¶æçåè¡çä¹ä¸ï¼å¹¶ä¸ç¤¾åºæ¯æä¹æ´å¥½ï¼å æ¤å¨ARM设å¤ä¸çå ¼å®¹æ§å¯è½æ´å¥½ãå¦ä¸æ¹é¢ï¼CentOSå¨ARMæ¶æä¸çæ¯æä¹è¶æ¥è¶å¥½ï¼ç¹å«æ¯å¨RaspberryPiç设å¤ä¸çæ¯ææ¹é¢è¡¨ç°ä¸éãå æ¤ï¼æ¨éè¦æ ¹æ®æ¨çå ·ä½éæ±æ¥éæ©CentOSæDebianã
debianæ¯è¾centosåªä¸ªå¿«debianå¿«
å®è¿å æ¬å¨å ¶å®æ¹åå¨åºä¹å¤çéGPL软件ã以éµå®å ¶æä¾å 费软件çååã
1ã主è¦è½¯ä»¶çæ¬
DebianStableWheezyå·²æ¥æè¿äºè½¯ä»¶çæ¬ã
Apache-2.2.
PHP-5.4.4
MySQL-5.5.
PostgreSQL-9.1.9
2ãå级
å°Debianä»ä¸ä¸ªç¨³å®çæ¬å级å°ä¸ä¸ç¨³å®çæ¬å¾å®¹æãæä½ä¹æ¯è¾ç®åã
3ã稳å®æ§
Debian被认为æ¯æ¯è®¸å¤å ¶ä»åè¡çæ´ç¨³å®çLinuxåè¡çã对äºä¼ä¸èè¨ãè¿æ¯ä¸ä¸ªä¸éçéæ©ãå 为该çæ¬ä¸çé误导è´çå¼éæ´å°ãå®è¿ä¸ºä¿®è¡¥å®å ¨æ¼æ´æä¾äºæ¶é´ãå æ¤è¿äºåè¡çé常æ¯å ¶ä»Linuxåè¡ççåè¡çæ´å®å ¨ã
4ãæç¨æ§
é常认为DebianLinuxåè¡çæ¯åå¦è æ´éåLinuxä¸å®¶ãå®ä»ä¸å¼å§å°±åå®æ¨å¯¹Linuxå¼åæä¸å®çäºè§£ãå®è£ ç¨åºä¸ºç¨æ·æä¾äºå¯¹å ¶é ç½®çæ´é«ç¨åº¦çæ§å¶åèªå®ä¹ã
以ä¸å°±æ¯DebianåCentOSçåºå«ã对äºéè¦å®å ¨æ§å¶çæç»éªçç¨æ·ãDebianå¯è½æ´å¥½ï¼å¯¹äºæ³è¦æ´ç¨³å®åå®å ¨çLinuxåè¡ççä¼ä¸ãCentOSå¯è½æ´å¥½ã
为ä»ä¹éæ©CentOSèä¸æ¯Debian?æ们è¿è¡çä¸äºå ¨çæ大çäºèç½çè¥è¿ï¼å æ¤æ们对å¯é æ§å稳å®æ§é常éè§ï¼æ¯æ们ç第ä¸è¦å¡ã为æ¤ï¼æ们åªä½¿ç¨Linuxæ¥æ¯æ顾客çç³»ç»ãä½æ¯ï¼æ们åºè¯¥ä½¿ç¨åªä¸ä¸ªLinuxçåè¡çï¼çæ¡æ¯ï¼CentOSã为ä»ä¹å¢ï¼\x0d\\x0d\ä½ä¸ºä¸ä¸ªåºå¤§çç³»ç»è¿è¥åï¼å¨å¾é¿çä¸æ®µæ¶é´éï¼æ们éè¦å¨å¤ç§å¤§åç³»ç»ä¸æ¾å°ä¸ä¸ªå¯é çï¼å¯é¢æµçç³»ç»ï¼æ们éè¦ä»ä¸çä¸æ强大ç软件ä¾åºååå¼æºé¡¹ç®ä¸è·å¾å¼ºæåçæ¯æã对äºé£äºæ常ç¨çç³»ç»ï¼æ们éè¦ææ¡£ï¼å·¥å ·åå ¨çæ§èµæºã\x0d\\x0d\æ£å å¦æ¤ï¼RedHat/CentOSç³»ååè¡çæ£æ¯æ们çéæ©ãä»ä»¬è½å¤æ»¡è¶³ä»¥ä¸ææéæ±ï¼èä¸é®é¢ç¸å¯¹è¾å°ãé¿æ稳å®ï¼è¿ä½¿å¾æ们è½å¤ä¸ºæåä¸ä¸çè¿è¡äºä¸åé ç½®ãæå¡ååºç¨çç³»ç»æä¾ä¸ç级çç»´æ¤ã\x0d\\x0d\RedHatâsEnterpriseLinux\x0d\(RHEL)æ¯é»éæ åçä¼ä¸åè¡çãå®æ¯äºå¹´å·¦å³æ´æ°ä¸æ¬¡ï¼å¨ç³»ç»ç稳å®æ§ï¼åç»æ§åå®å ¨æ§ä¸æçæ大çä¼å¿ãæ¯å½æ°ç主çæ¬åè¡åï¼æ¯å¦\x0d\5.x亦ææè¿ç6.xï¼ææçæ¬å代ç é½å°ä¿çä¸åï¼åªæå®å ¨é®é¢ææ¯ä¸»è¦çbugï¼ä¾å¦åé¨ï¼ç«¯å£ä¹ç±»çé®é¢ï¼ä¼éè¿åå¸æ°çåçæ¬æ¥ä¿®å¤ã\x0d\\x0d\CentOSæ¯RHELåè¡ç对åºçå¼æºçæ¬ï¼é常å¨RedHatçåå¸åå°±ä¼å¾å¿«åè¡ãæ们使ç¨CentOSçåå å¨äºRHELåè¡ççæ åæ¯ææå¡è´¹ç¨é常é«ï¼å¤§çº¦æ¯å°æå¡å¨ç¾å å·¦å³ï¼å¯¹äºæ们å¾å¤æ¥ææ°åå°çè³ä¸ç¾å°æå¡å¨çç¨æ·æ¥è¯´ï¼è¿æ¯å¿ é¡»è¦æ§å¶çææ¬ã\x0d\\x0d\RHEL/CentOSç³»ç»æ两个æ½å¨çé®é¢ã\x0d\\x0d\é¦å ï¼ä¸æ¦ç¡®å®äºä¸»çæ¬ï¼,é¤äºå®å ¨é®é¢å严éæ éä¼è¢«ä¿®å¤ä»¥å¤ï¼å ¶ä»å 容å°ä¸ä¼åä»»ä½æ¹åãè¿è½ç¶å¯¹ç¨³å®æ§æ\x0d\好å¤ï¼ä½æ¯å¯¹è®¸å¤æå¡ä¸å©ãæ¯å¦MySQLåPHPæå¡ï¼å®ä»¬å¨è¿äºå¹´çCentOS/RHEL主çæ¬åå¸å¨æä¸ä¼è¿è¡ç¹éçå¼åå大éçä¿®æ¹ãä¾\x0d\å¦ï¼MySQL5.0æ¯å½åRHEL/CentOS主çæ¬æé»è®¤ä½¿ç¨ççæ¬ï¼ä½æ¯å½åMySQLå·²ç»æ´æ°å°5.1å5.5çæ¬äºã\x0d\\x0d\幸è¿çæ¯ï¼è¿ä¸ªé®é¢è¢«Yum软件å 管çå¨è½»æå°è§£å³äºãå¦æ¤ä»¥æ¥ï¼é£äºä¸»è¦ç软件ï¼ä¾å¦å½åRHEL/CentOSä¸å®é çç»ä»¶ï¼å æ¬å æ ¸åææå·¥\x0d\å ·çä»ç¶æ¥èªåè¡çï¼ä½æ¯é£äºéå ç软件ï¼ä¾å¦Nginxï¼Apacheï¼PHPï¼JavaåMySQLççæ¥èªæ´æ°ç软件æºä¾å¦Fedoraï¼\x0d\æè ç´æ¥ä»å¼ååè·åæ´æ°ççæ¬ä¾å¦MySQLãå¨æ们è¿éï¼æ们æèªå·±ä¸ç¨çå®è£ éåæ¥å ¨èªå¨çå¤çææè¿äºäºæ ã\x0d\\x0d\å ¶æ¬¡ï¼CentOSçåè¡ä¼æ»åäºRedHatçåè¡ï¼å æ¬å ³é®çè¡¥ä¸åä¿®å¤ãè¿å¨RHEL6.xçåè¡å¨æä¸å°¤ä¸ºæ¾èãä½æ¯æ ¹æ®æ们çç»éªï¼è¿æ²¡ä»ä¹å¥½æ å¿çï¼å¯¹æ们æ¥è¯´æ°¸è¿ä¸ä¼æ为é®é¢ã\x0d\\x0d\å¾å¤äººè¯¢é®æ们为ä»ä¹ä¸ç¨åºäºDebiançç³»ç»ï¼ä¾å¦Debianæè Ubuntuæå¡å¨ãå¦æå¨å«æ éæ©çæ åµä¸ï¼æ们çç¡®ä¼æ¯æè¿ä¸ªå»ºè®®ï¼ä½æ¯æ ¹æ®æ们çç»éªæ¥çï¼è¿äºç³»ç»å¹¶ä¸å¦RHEL/CentOSæ¥ç稳å®åå¯é ã\x0d\\x0d\æ们认为ï¼è¿å¨æç§ç¨åº¦ä¸æ¯ç±äºä»ä»¬è¿å¿«çåå±åå个çæ¬ãç»åä¹é´è¾å°çæµè¯ä¸ä¸æçæ导è´çãç¶è尽管ä»ä»¬é常æµè¡ï¼ä½æ¯ä¸»è¦çæå¡åå项ç®é½\x0d\ä»ç¶é¦éRHEL/CentOSç³»ç»ï¼å 为è¿æ ·ä»ä»¬å°±å¯ä»¥ä¸ºä¼ä¸é¡¾å®¢æä¾æå¡ï¼ï¼å¯¹OracleåMySQLæ´æ¯å¦æ¤ï¼ãé¤æ¤ä¹å¤ï¼åºäºDebiançç³»ç»æ许å¤å æ ¸å稳å®æ§é®é¢ï¼å°¤å ¶æ¯å¨æ们çäºè®¡ç®æå¡ä¸ã\x0d\\x0d\对æ们èè¨ï¼å¯ä¸ä½¿ç¨Debian/Ubuntuçåå æ¯ï¼\x0d\\x0d\âå®ä»¬è½å¤ä¸ºä¸ä¸ªç³»ç»æä¾å¿ è¦çç¹æ®æå¡æ¶ï¼å°¤å ¶æ¯å½ä¸äºé©±å¨ç¨åºæè ä¸äºIOåç³»ç»éè¦ä¸ç§æ°çå æ ¸çæ¶åâãä¾å¦ï¼ext4æ件系ç»æå¨æè¿çå æ ¸ä¸æ¥å¿çæ¹åçï¼ç°å¨ï¼ææè¿ä¸åé½å å«å¨äºRHEL/CentOS6.xä¸ã\x0d\\x0d\å½ç¶ï¼å¤æ°Linuxå¼åè é½ä½¿ç¨çæ¯Ubuntuçæ¡é¢çï¼èä¸å¯ä»¥ç解çæ¯ï¼ä»ä»¬æ´å¾åå¨å¼åç产æ¶ä½¿ç¨ç¸åçç³»ç»ï¼å¹¶ä¸è¿è½ä½¿ç¨å¾å¤æ趣çå·¥å ·ãä½æ»ä½ä¸æ¥è¯´ï¼æ们ä¾ç¶è®¤ä¸ºRHEL/CentOSæ¯ä¸ä¸ªæ´ä¼è¶çé¨ç½²å¹³å°ï¼å¹¶ä¸å·²ç»æåå¤ä¸ªå®¢æ·æåå°è½¬å使ç¨CentOSä½ä¸ºç产ç¯å¢å¹¶ä¸æ²¡æä»»ä½é®é¢ï¼ä½è¿ä»ç¶æ¯è°å·¨çä»»å¡ã\x0d\\x0d\æ»çæ¥è¯´ï¼ä½ å°æ´ä¹äºçå°ä¸ä¸ªè¯å¥½ç®¡ççCentOSç³»ç»ãæ们ææåä¸ä¸å°æå¡å¨ä½¿ç¨CentOSå¹³å°ï¼èæ¯å¹´å¹³ååªæä¸å°æå¡å¨å´©æºãæ们ä¹å¾é¾æ³è±¡å®ç«å¦æ¤ç½è§ï¼æ以ï¼æä¸ä¸ªä¼ç§ãè¿ æ·ãå¯é çå¹³å°å§ï¼
CentOSDebianUbuntuåªä¸ªç³»ç»å¥½ï¼æç« ç®å½CentOSDebianCentOSä¸Debianåªä¸ªå¥½ï¼Ubuntuä¹°VPSæ¶æCentOSãDebianãUbuntuä¸ç§æä½ç³»ç»å¯ä»¥éæ©ï¼Linuxä¸åªç§ç³»ç»æ´å¥½æ¯å¾å¤æ°äººé½ä¼éå°çé®é¢ï¼å¨æ¤ï¼æ们åæä¸ä¸UbuntuãCentOSåDebianåèªçæ§è½å使ç¨ç»éªãåæå¡å¨çå¾å°ä¼ç¨Ubuntuï¼æ以æ们æååæè¿ä¸ªãå æ¥çç使ç¨çè¾é«çCentOSåDebianãCentOSå¾å¤åä¸æ§å ¬å¸æå¡å¨é½æ¯ä½¿ç¨CentOSç³»ç»ï¼CentOSç®çº¦ï¼å½ä»¤è¡ä¸ç人æ§ååå¾æ¯è¾å¥½ï¼ç¨³å®ï¼æç强大çè±æææ¡£ä¸å¼å社åºçæ¯æãç¸å¯¹debianæ¥è¯´ï¼CentOSç¥æ¾ä½ç§¯å¤§ä¸ç¹ï¼æ¯ä¸ä¸ªé常æççLinuxåè¡çãDebianDebianæ´éåäºä½ä¸ºæå¡å¨çæä½ç³»ç»ï¼å®æ¯Ubuntuè¦ç¨³å®å¾å¤ãDebianæ´ä¸ªç³»ç»åºç¡æ ¸å¿é常å°ï¼ä¸ä» 稳å®ï¼èä¸å ç¨ç¡¬ç空é´å°ï¼å ç¨å åå°ãMçVPSå³å¯ä»¥æµç è¿è¡Debianï¼èCentOSåä¼ç¥æ¾ååãä½æ¯ç±äºDebiançåå±è·¯çº¿ï¼ä½¿å®ç帮å©ææ¡£ç¸å¯¹äºCentOSç¥å°ï¼ææ¯èµæä¹å°ä¸äºãCentOSä¸Debianåªä¸ªå¥½ï¼å¨å½å æå¡å¨ä¸ï¼ä½¿ç¨CentOSçè¦å¤äºDebianï¼èå½å¤åDebianç¨å¤äºãéæ©Debianæ¯å 为å®æ¯æ大ç社åºåè¡çï¼æçä¸¥æ ¼çç»ç»æ¥ç»´æ¤ï¼æçæåä¸ä¸ä¸ªè¶ 级é»å®¢å¨è´¡ç®ï¼èä¸æçæ大ç软件ä»åºï¼ç°å¨å·²ç»è¾¾å°å¤ä¸ªï¼æç大éçææ¡£èµæºãèCentOSçæ´æ°æ¯è¾æ ¢ï¼è½¯ä»¶åºè½¯ä»¶çæ¬è¿äºéæ§ï¼è½è¯´ç¨³å®ä½æ¯æ æ³åæ¥åºVPSç硬件ç¹æ§ãè½ç¶ä¹æ社åºï¼ä½æ¯å®æ²¡æåºå®çç»ç»æ¥ç®¡çï¼æ²¡ææ¶å ¥æ¥æºãå¦å¤ï¼Debian
6æ¶åå°WEBæå¡å¨ç软件å é½æ´æ°å°äºæ¯è¾æ°ç稳å®çæ¬ï¼å¹¶ä¸åå©aptå½ä»¤ç´æ¥å®è£ é常快æ·ãéæ©CentOS大å¤æ¯å 为系ç»ç稳å®åå¯é æ§ï¼Debianåå±è¿å¿«ï¼å个çæ¬ãç»åä¹é´æµè¯è¾å°ç¨æ¾ä¸æçï¼ç³»ç»æ许å¤å æ ¸å稳å®æ§é®é¢ãDebianå¾æ¶é«¦ï¼æä»ä¹æ°ç©æå°±ä¸ï¼èCentOSå¼å¯çå æ ¸é项é½æ¯é常ä¿å®ãæ以ï¼ä»å®å ¨ã稳å®è§åº¦åºåï¼ä¸»è¦çæå¡åå项ç®é½ä»ç¶é¦éCentOSç³»ç»ãä¸é¢çä¸äºå ·ä½çæ¯è¾ï¼ä»å®å ¨ä¸è¯´CentOSDebianä»æ§è½ä¸é说CentOSDebian硬件æ¯æç¹å«æ¯èæåCentOSDebiané»è®¤å æ ¸é ç½®æ§è½æµè¯DebianCentOSåå¼ç¯å¢éç¨æ§DebianCentOSæåï¼å¦æä½ æ¯å¼åè åçççæ§è½è¿½æ±è æè æ¯VPSä¸çæå¡å¨å»ºè®®ç¨Debianï¼å¦ææ¯VPSä¾åºåãçµååå¡ç½ç«ï¼è¦æ±å¾é«ç稳å®æ§ãå®å ¨æ§ï¼å建议éç¨CentOSãå¦å¤ï¼å¯¹äºåç©è ï¼å¦æVPSé 置太ä½ï¼OPENVZå åå¨M以ä¸ï¼æè XENæ¶æå åå¨M以ä¸ï¼å»ºè®®éç¨Debianï¼å¦å建议éç¨CentOSï¼ä»¥è·åæ´å¤çå¨çº¿å¸®å©ä¸æ¯æï¼è®©èªå·±å ¥é¨æ´è½»æ¾ãUbuntuUbuntuè¿äºå¹´ç使ç¨çææå¢å ï¼å®ç¨æ·çé¢æ¼äº®ã管çç³»ç»å®åã软件æºæ¯æ强大ãææ¯ç¤¾åºä¸°å¯ï¼å¯¹ç¡¬ä»¶çå ¼å®¹æ§ä¹ä¸éãç¶èï¼æå¡å¨æ´éè¦ç并éè¿äºï¼æ以å³å®äºå®æ´éåäºæ¡é¢æä½ç³»ç»ï¼å¨èªå·±çµèä¸å®è£ æ许è¦æ¯æå¡å¨ä¸æ´éåä¸äºã对äºLinuxï¼ubuntuç³»ç»èµæºæ¶èä¸ä¸ç¨³å®åªè½è¢«æ¯å»æ鸡èãæå¡å¨éè¦çåªæ¯ä¸ä¸ªç®çº¦ã稳å®ãæç¨çç³»ç»èå·²ï¼Ubuntuæ¯è¾é¸¡èè¿æä¸ä¸ªåå å°±æ¯å¯¹NGINXçæ¯æ太弱ï¼èNginxæ§è½è¦è¿è¿é«äºApacheãæ以ï¼å¯¹äºæ°æï¼åºæ¬åºè¯¥éæ©CentOSç³»ç»èéDebianåUbuntuãå¨ç¡®å®éæ©CentOSåï¼æ们è¿éè¦ç¡®å®æ¯ç¨ä½ç³»ç»è¿æ¯ä½ç³»ç»ãå¨æ¤ï¼ç¬¨é¸ç建议æ¯ï¼å¦æä½ ç¨çVPSæ¯é常ççé ç½®ï¼é£ä½ ç¨ä½æ¯è¾åéï¼ä½å¦ææå¡å¨ä¸è¬ï¼è¿æ¯èèå®å®çç¨ä½å§ï¼
runc hang 导致 Kubernetes 节点 NotReady
Kubernetes 1..3 OS: CentOS 7.9. Kernel: 5.4.-1.el7.elrepo.x_ Docker: ..6
线上告警提示集群中存在 2-3 个 K8s 节点处于 NotReady 的状态,并且 NotReady 状态一直持续。源码源码问题的下载解决可以通过两种方法,我们先来看看 A 方案。内核内核
针对 docker hang 住这样的源码源码现象,通过搜索资料后发现了以下两篇文章里也遇到了相似的下载javahmap源码分析问题。这两篇文章都提到了是内核内核由于 pipe 容量不够导致 runc init 往 pipe 写入卡住了,将 /proc/sys/fs/pipe-user-pages-soft 的源码源码限制放开,就能解决问题。下载查看问题主机上 /proc/sys/fs/pipe-user-pages-soft 设置的内核内核是 。所以将它放大 倍 echo > /proc/sys/fs/pipe-user-pages-soft,源码源码然而 kubelet 还是下载没有恢复正常,pleg 报错日志还在持续,内核内核runc init 程序也没有退出。源码源码考虑到 runc init 是下载 kubelet 调用 CRI 接口创建的,可能需要将 runc init 退出才能使 kubelet 退出。通过文章中的说明,只需要将对应的 pipe 中的内容读取掉,runc init 就能退出。尝试了几个后,runc init 果然退出了。再次检查,节点状态切换成 Ready,pleg 报错日志也消失了,观察一天也没有出现节点 NotReady 的情况,问题(临时)解决。
对解决方案 A 的疑问,虽然问题解决了,但是仔细读 /proc/sys/fs/pipe-user-pages-soft 参数的说明文档,发现这个参数跟本次问题的根本原因不太对得上。pipe-user-pages-soft 含义是淘宝详情源码编辑对没有 CAP_SYS_RESOURCE CAP_SYS_ADMIN 权限的用户使用 pipe 容量大小做出限制,默认最多只能使用 个 pipe,一个 pipe 容量大小为 k。这里就有疑问:为什么容器 root 用户 pipe 容量会超过限制。
定位问题最直接的方法,就是阅读源码。先查看下 Linux 内核跟 pipe-user-pages-soft 相关的代码。线上内核版本为 5.4.-1,切换到对应的版本进行检索。在创建 pipe 时,内核会通过 too_many_pipe_buffers_soft 检查是否超过当前用户可使用 pipe 容量大小。如果发现已经超过,则将容量大小从 个 PAGE_SIZE 调整成 2 个 PAGE_SIZE。通过机器上执行 getconf PAGESIZE 可以获取到 PAGESIZE 是 字节,也就是说正常情况下 pipe 大小为 字节,但是由于超过限制,pipe 大小被调整成 字节,这就有可能出现数据无法一次性写入 pipe 的问题。
找到问题根本原因的第一步,往往是在线下环境复现问题。由于线上环境已经通过方案 A 做了紧急修复,因此,需要找到一种必现的手段。功夫不负有心人,在 issue 中找到了相同的问题,并且可以通过以下方法复现。执行命令之后,立刻就出现 runc init 卡住的情况。通过 lsof -p 查看 runc init 打开的文件句柄情况,可以看到 fd4、fd5、奇迹mu 1.03 源码fd6 都是 pipe 类型,其中,fd4 和 fd6 编号都是 ,是同一个 pipe。如何来获取 pipe 大小来实际验证下「疑问 2」中的猜想呢?Linux 下没有现成的工具可以获取 pipe 大小,但是内核开放了系统调用 fcntl(fd, F_GETPIPE_SZ)可以获取到,代码如下。编译好之后,查看 pipe 大小情况如下。重点看下 fd4 和 fd6,两个句柄对应的是同一个 pipe,获取到的容量大小是 = 2 * PAGESIZE。所以的确是因为 pipe 超过软限制导致 pipe 容量被调整成了 2 * PAGESIZE。
对解决方案 A 疑问的探索,对解决方案 B 的考虑,线上应该如何做修复呢?是否需要把 docker 所有组件都升级呢?如果把 dockerd/containerd/runc 等组件都升级的话,就需要将业务切走然后才能升级,整个过程相对比较复杂,并且风险较高。因此考虑是否可以单独升级 runc?因为在 Kubernetes v1. 版本中还没有弃用 dockershim,因此运行容器整个调用链为:kubelet → dockerd → containerd → containerd-shim → runc → container。不同于 dockerd/containerd 是后台运行的服务端,containerd-shim 调用 runc,实际是调用了 runc 二进制来启动容器。因此,只需要升级 runc,对于新创建的容器,就会使用新版本的 runc 来运行容器。
通过测试环境验证,的经营类游戏 源码确不会出现 runc init 卡住的情况了。最终,逐步将线上 runc 升级成 v1.1.1,并将 /proc/sys/fs/pipe-user-pages-soft 调整回原默认值。runc hang 住的问题圆满解决。
总结,本次故障的原因是,操作系统对 pipe-user-pages-soft 有软限制,但是由于容器 root 用户的 UID 与宿主机一致都是 0,内核统计 pipe 使用量时没有做区分,导致当 UID 为 0 的用户 pipe 使用量超过软限制后,新分配的 pipe 容量会变小。而 runc 1.0.0-rc 正好会因为 pipe 容量太小,导致数据无法完整写入,写入阻塞,进而 runc init 卡住,kubelet pleg 状态异常,节点 NotReady。修复方案是 runc 通过 goroutine 及时读取 pipe 内容,防止写入阻塞。
å¦ä½ä»ç¡¬çå®è£ FREEBSD
1)isoemu(å¼å¯¼ISOéåç¨)
2)èæå 驱,ç¨DAEMON Tools
å ·ä½æ¥éª¤:
1: åæ:ä½ çç³»ç»å·²ç»å®è£ éwindowsçæä½ç³»ç»ä»¥åå¯ä»¥ä¸ç½
2: ä¸è½½è¾ å©è½¯ä»¶ISOEMU,以åfreebsd5.4ç5.4-RELEASE-i-bootonly åªå å«å¯å¨æ件
5.4-RELEASE-i-disc1 å®è£ ç1 5.4-RELEASE-i-disc2 å®è£ ç2,è¿ä¸ä¸ªå®è£ æ件è¿éå¯
以ä¸è½½ftp: //ftp.freebsdchina.org/pub/FreeBSD/releases/i/ISO-IMAGES/5.4/
3: ç¨èæå 驱ædisc1éåæ件éé¢ç5.4-RELEASEæ件夹(MBå·¦å³)æåå¤å¶å°ä¸»ååº(ä¼°
计é»è¾ååºè¿ä¸æ¯æ,æ好æ¯æ¾å¨ä½ çå¯å¨ååº,æ¯æNTFSæ ¼å¼),disc1çpackagesæååºæ¥æ¾
å°5.4-Release,ç¶åèædisc2éåæ件,å¤å¶éé¢çpackagesæ件夹(MBå·¦å³)å°åæä»
disc1å¤å¶åºæ¥ç5.4-RELEASEæ件夹éé¢,æ示æ件åç¸åæè¦çå°±æ¯.
4: ä¿®æ¹åæå¤å¶è¿æ¥ç5.4-RELEASE\packagesçINDEXæ件,ç¨ååæ¿æå¼,æ¥æ¾æ¿æ¢ç®
æ "||1"æ¿æ¢æ"|"æ¥æ¾"||2"æ¿æ¢æ"|",ä¹åä¿å.
5: æä¸è½½äºçisoemu解åå°æ ¹ååº(ä¸éæ¾å¨æ件夹),å³å«æboot.iniæ件çé£ä¸ªååº(éé¢
å å«äºä¸ä¸ªè¯´ææ件,详ç»è¯´æäºå个æ件çç¨éå使ç¨æ¹æ³),ä¹åç¼è¾isoemu.iniæ¾
å°"isogrub.iso"æ¹ä¸ºä½ çå¯å¨éåæ件å,æè¿éç¨"freebsd.iso",ä¿åéåº.
6: æ5.4-RELEASE-i-bootonlyå¯å¨éåæ件å¤å¶å°å®æ¾äºisoemuçååº,并æ¹å
为"freebsd.iso"ä¸ä¸é¢å¯¹åº
7: ä¿®æ¹boot.iniæ件,å¨ä¸é¢å å ¥ä¸è¡c:\ieldr="Load IsoEmu Final SV"
8: åå¤å夫å®æ,ç°å¨å¯ä»¥éæ°å¯å¨æºå¨,éæ©å¯å¨load IsoEmu Final SV,isoemuå°±å¼å§èªå¨
å è½½freebsd.isoæ件读åå¯å¨ä¿¡æ¯,æ¥çå°±æ¯çæçå¼å¯¼å æ ¸ççé¢.
ä¸æ¥çæ¥éª¤ç¸ä¿¡å¤§å®¶é½çæ,ä¸ç¥éçå¯ä»¥å»ççHANDBOOK .ä½ å¯ä»¥éæ©ä»ç¡¬çå®è£ ,å¦æä¸æ³
å¤å¶ä¸è½½é£ä¹å¤æ件æè ä½ æ¯å±åç½å¯ä»¥éæ©ä»ç½ä¸å®è£ ,å¯ä»¥çç¥æ¥éª¤2,3,åªå¯å¨
SYSINSTALLç³»ç»å®è£ ç¨åºä»å ¶ä»åªä»å®è£ ç³»ç»
ä¸ä¼å®è£ ç,å¯ä»¥ççæ以åçå®è£ æ¹æ³
ååºçæ¶åå¯ä»¥æä¸é¢ç说ææ¥
æç»å¸¸å»ºç«çæ件系ç»ç次åºæ¯Mçrootï¼1Gçswapï¼Mç
/var/tmpï¼3Gç/usrï¼å ¶ä½ç空é´çç»/homeã
å ¸åå°ï¼ä½ åºè¯¥æ交æ¢åºå¤§å°å®ä¸º2åçå å大å°ãå¦æä½ æ²¡æå¾å¤å åï¼é£æ ·çè¯ï¼ä½ å°é
è¦æ´å¤ç交æ¢åºç©ºé´ãä¸å»ºè®®å°äº¤æ¢åºå®å¨å°äºMï¼å½ä½ ç¡®å®äº¤æ¢åºå¤§å°çæ¶åï¼ä½ è¦èè
å°å°æ¥å¯è½è¦æ©å å åãå æ ¸çVM(èæå å)æ¢é¡µç®æ³æ§è½æ¯å对交æ¢åºè³å°æ¯å å大å°2å
çæ¡ä»¶è¿è¡ä¼åçãé 置太å°ç交æ¢åºä¼å¯¼è´VM页é¢æ«æçä½æçï¼å½å åæ©å åï¼éä¹ä¹ä¼
导è´é®é¢ãæåå¨ä¸ä¸ªæå¤ä¸ªSCSI硬çç大系ç»ä¸(æè æå¤ä¸ªIDEç£çå·¥ä½å¨å¤ä¸ªIDE æ§å¶å¨
ä¸)ï¼æ们强ç建议å¨æ¯ä¸ªé©±å¨å¨ä¸é 置交æ¢ååºï¼æ¯ä¸ªäº¤æ¢ååºç大å°åºè¯¥æ¯å ä¹ä¸æ ·çï¼
å æ ¸è½å¤çä»»æ大å°ç交æ¢åºï¼ä½æ¯å é¨æ°æ®ç»ææ¾å¤§å°æ大ååºç4å大å°ãä¿æ交æ¢ååº
åæ ·ç大å°å 许å æ ¸ä¼åå°å°äº¤æ¢ç©ºé´äº¤ååå¸å¨N个ç£çä¸ãä¸è¦æ å¿è¿æ ·åæç¹è¿ä»½ï¼äº¤
æ¢åºæ¯UNIXçææï¼çè³äºä½ è½ç¶é常ä¸ç¨é£ä¹å¤äº¤æ¢åºï¼å¨è¢«è¿«éæ°å¯å¨ä¹åï¼å®ä¹å¯ä»¥ç»
ä½ æ¶é´å»ä»ä¸ä¸ªåºè½¨çç¨åºä¸æç³»ç»æ¢å¤è¿æ¥ã
ææ ·ä¸ºä½ ç/varååºå®å¤§å°ä¸»è¦ä¾èµäºä½ å°ææ ·ä½¿ç¨è¿å°æºå¨ãè¿ä¸ªååºä¸»è¦åæ¾é®ç®±ï¼æå°
ç¼å²åºåæ¥å¿æ件ãæäºäººçè³äºæ/var/logä½ä¸ºä¸ä¸ªç¬ç«çååº(ä½æ¯é¤éæç¹å«çæ åµï¼
è¿æ ·åä¸å¼å¾ï¼åªä¼æµªè´¹ä¸ä¸ªååºID)ãå¦æä½ è¿å°æºå¨ä¸»è¦ç¨åé®ä»¶ææå°æå¡å¨ï¼æè è¿
è¡ä¸ä¸ªå¤§è®¿é®éçWEB æå¡å¨ï¼ä½ åºè¯¥èèæè¿ä¸ªååºå»ºçæ´å¤§ä¸ç¹ï¼å¯è½1Gææ´å¤ãå¾å®¹æ
ä½ä¼°æ¥å¿æ件çåå¨éæ±ã
ç¡®å®/var/tmpç大å°ä¾èµäºä½ å°éè¦ææ ·ä½¿ç¨ä½ ç临æ¶æ件ãMæ¯å»ºè®®çæå°ç尺寸ã注æ
sysinstallå°å»ºç«ä¸ä¸ª/tmpç®å½ï¼ä½æ¯é常æ/tmpä½ä¸º/var/tmpçè¿æ¥æ¯ä¸ªå¥½æ³¨æã为临æ¶æ
件建ç«ä¸ä¸ªååºæ两个éè¦çåå : é¦å ï¼å®åå°äºç³»ç»å´©æºåæ件系ç»æåçå¯è½æ§ï¼åå°±
æ¯åå°ä¸ä¸ªåºè½¨ç¨åºå¡«æ»¡[/var]/tmpæ¶å½±åå ¶ä»éè¦åç³»ç»(mailï¼loggingçç) çæºä¼ãå¡«
满[/var]/tmpæ¯ç»å¸¸åççé®é¢ã
å¨ä»¥å/tmpå/var/tmpæ¯ä¸åçä¸è¥¿ï¼ä½æ¯å¼å ¥/var(å /var/tmp)æ¯è¢«ç¨åºåå¼èµ·ç大迷æ
ï¼ä»å¤©çç¨åºé´æ使ç¨ä¸ä¸ªæå¦ä¸ä¸ªï¼å®ä»¬ä¸¤è åç没æåºå«ãæ以æå®ä»¬åæä¸ä¸ªä¸´æ¶ç®å½
æ¯æéççï¼ç¶èï¼å½ä½ å¤ç/tmpæ¶ï¼æä¸ä»¶äºæ æ¯ä½ ä¸æ³åçï¼å°±æ¯æ/tmpé©»çå¨æ ¹ååºä¸
ï¼å¯¼è´æ ¹ååºè¢«å¡«æ»¡æå´©æºåéå¯æ¶æ件系ç»æåï¼
/usrååºåæ¾å¤§éç¨äºæ¯æç³»ç»çæ件ï¼åç®å½/usr/localåæ¾å¤§éä»ports(7)å®è£ çæ件ï¼
å¦æä½ ä¸é£ä¹å¤ä½¿ç¨portsï¼ä¹ä¸å°ç³»ç»æºä»£ç (/usr/src)åæ¾å¨æºå¨ä¸ï¼ä½ å¯ä»¥ä¸º/usrèç
1Gçç£ç空é´ï¼ç¸åï¼å¦æä½ å®è£ 大éçports(ç¹å«æ¯çªå£ç®¡çåLinux仿ç)å»ºè®®ä½ è³å°2Gç
/usrï¼å¦æä½ è¿è¦å°ç³»ç»æºä»£ç æ¾å¨æºå¨ä¸ï¼æä»¬å»ºè®®ä½ 3Gç/usrï¼ä¸è¦ä½ä¼°æéç空é´ï¼å®
ä¼æ ¢æ ¢ç¬èµ·æ¥ï¼è®©ä½ 大åä¸æï¼
/homeååºåæ¾ç¨æ·èªå·±çæ°æ®ï¼å¯ä»¥æä½ä¸ç空é´çç»è¿ä¸ªååºï¼
为ä»ä¹è¦ååº? 为ä»ä¹ä¸å»ºä¸ä¸ªå¤§ç/ååºå°±è¡äº? é£æ ·æå°±ä¸éè¦èèååºå¤§å°é®é¢ãæå
个åå æ¾ç¤ºè¿ä¸æ¯ä¸ªå¥½æ³¨æãé¦å ï¼æ¯ä¸ªååºé½æä¸åçæä½ç¹å¾ï¼åå¼å®ä»¬æå©äºæ件系ç»
å对è¿äºç¹å¾è°æ´å®èªå·±ï¼ä¾å¦ï¼æ ¹å/usrååºä¸»è¦æ¯è¯»æä½ï¼åªæå°éçåï¼è大éç读å
åå¯ä»¥åçå¨/varå¨/var/tmpãæå°çä½æ¯å ·ææ´ç¹å¿çåæä½çååºåå¼ï¼å°±ä¸ä¼å½±å读æ
ä½å± å¤çååºï¼åå°±æ¯ï¼æåæä½å± å¤çååºé è¿ç£çå¤ä¾§(ä¾å¦ï¼ä¸æ¯å¨ä¸ä¸ªå¤§ååºåï¼è
æ¯ååºè¡¨å)æå©äºå¯¹ä½ ç»å¸¸éè¦çååºå¢å æ§è½ãä½ å¯è½ä¹éè¦å¨å¤§ååºä¸çI/Oæ§è½ï¼ä½æ¯
å®ä»¬æ¯é£æ ·ç大以è³äºæå®ä»¬ç§»å°ç£çå¤ä¾§ä¹ä¸ä¼æ¾èå¢å æ§è½ï¼ä½æ¯æ/var移å°ç£çå¤ä¾§ä¼
ææ¾èçä¸åï¼
5.4é»è®¤ä½¿ç¨xorg,èä¸å®è£ è¿ç¨ä¸ä¼æ示å®è£ å设置æ¡é¢ç¯å¢,å®æå®è£ éå¯ç³»ç»,åè¿è¡
sysinstallç¨åºè¿è¡å®è£ æ¡é¢,ä¹å¯ä»¥éè¿portæ¥å®è£ ,ç±ä½ å欢.å¦å¤è¿è¦è¿è¡xorgcfg -
GKI: 通用内核映像
革新Android内核管理:通用内核映像 (GKI) 的崛起 Android世界的新篇章正在书写,GKI——通用内核映像的出现,如同一剂良药,解决了困扰已久的内核碎片化问题。GKI以AOSP通用内核为基础,构建出一个单一、强大的二进制文件,消除了SoC和板级支持的冗余,为系统独立更新提供了稳定而高效的接口。它的核心特点在于:基础稳固: GKI基于ACK,针对多平台和长期支持(LTS)版本,爬取病毒源码广泛测试确保功能的稳定性和兼容性,不包含专有代码,致力于提供持久的性能和维护效率。
逐步引入: GKI自Android v5.4开始分阶段推出,与Treble无缝对接,设备只需将启动映像和系统映像刷入特定分区,即可享受GKI带来的兼容性提升。
兼容与扩展: GKI要求所有产品内核共享KMI,供应商有机会扩展,但必须保证兼容性。目标是提升性能,减少维护负担,确保用户空间的稳定性。
进入GKI 2.0时代,Android S及更高版本和5.x及以上内核的设备受益于GKI,无需供应商映像改动即可享受内核更新。GKI基于ACK的KMI分支,以-的形式标识,如android-5.4,严格控制KMI的稳定性和功能扩展。 例如,新功能添加必须通过稳定接口,驱动程序与GKI内核的协同运行至关重要。构建过程中,供应商需确保模块兼容,KMI只包含公开维护的稳定符号,新接口的引入意味着稳定,但不允许随意改动。 构建时需使用AOSP提供的Clang工具链,通过预提交测试确保KMI的稳定性。对GKI配置的管理必须谨慎,以保持ABI稳定性。GKI内核由Google提供并用于兼容性测试,boot分区包含通用组件和GKI模块,采用v3启动头文件。后续引导加载程序和DTB需分开存放,确保系统启动的高效和兼容性。 对于GKI合作伙伴,特别是芯片厂商,可能需要树外补丁。在提交时,务必遵循贡献准则,首先尝试将更改迁移到android-mainline,然后扩展到其他分支。源代码改动需关联Buganizer问题,确保配置更改不会影响已冻结的KMI配置。 在处理核心内核变更时,务必有明确的理由和影响分析。补丁应与驱动程序关联,并明确其目的和益处。如果无法直接发送到Linux上游,务必提交问题说明原因。更新KMI时,需考虑供应商模块的符号更新,利用extract_symbols脚本处理符号变更。 GKI的出现,标志着Android内核管理步入了一个全新的阶段,它将助力开发者和设备制造商创造更高效、稳定且兼容的系统环境,为用户带来前所未有的体验。深入理解 slab cache 内存分配全链路实现
本文基于内核5.4版本探讨slab cache内存分配的全链路实现。在深入理解slab cache架构图之后,我们将从内核源码角度拆解实现细节。首先,slab cache如何进行内存分配?以内核从task_struct_cachep中申请task_struct对象为例,解析内存分配流程。 内核使用fork()系统调用创建进程时,需要管理task_struct结构,为此设置专属slab cache(task_struct_cachep)。接下来,我们将聚焦于如何在slab cache中分配内存。 内核通过fork.c文件中的dup_task_struct函数为进程申请并初始化task_struct对象。同时,kmem_cache_alloc_node函数指示slab cache从指定的NUMA节点分配对象。slab cache的快速分配路径
slab cache初始进入快速分配路径(fastpath),首先尝试从cpu本地缓存(kmem_cache_cpu->freelist)获取对象。在获取kmem_cache_cpu结构时,需确保它是当前执行进程的cpu缓存。在配置了CONFIG_PREEMPT的情况下,允许优先级更高的进程抢占当前cpu,导致进程调度到其他cpu执行。此时,用于快速分配的对象可能与当前cpu的缓存不一致,内核通过循环判断tid一致性以防止此情况。 内核从cpu缓存slab中获取第一个空闲对象。若无空闲对象或NUMA节点不匹配,则进入慢速分配路径(slowpath)。slab cache的慢速分配路径
在慢速路径(slowpath)中,内核关闭中断并重新获取cpu本地缓存,防止进程在中断关闭前被抢占。随后,检查本地cpu缓存的slab容量,确保有空闲对象。若本地缓存为空,跳转至new_slab分支,进入慢速路径。若非空,内核再次检查kmem_cache_cpu->freelist,以防止进程中断后其他进程释放对象到缓存中。若此时有空闲对象,则直接从kmem_cache_cpu->freelist分配。若无空闲对象,则检查slab本身的freelist。分配内存流程
内核在redo分支确认本地cpu缓存无空闲对象后,开始分配内存。首先在本地cpu缓存查找,若无空闲对象,则转至NUMA节点缓存的partial列表。在partial列表中查找可分配的slab,将其提升为本地cpu缓存,并更新kmem_cache_cpu->freelist,分配内存对象。 若所有列表均为空,内核将跨NUMA节点查找,并尝试申请新slab。在成功申请slab后,内核填充相关属性,初始化freelist链表,并根据配置选择顺序或随机方式初始化。slab freelist初始化
slab freelist初始化有两种方式:顺序或随机。顺序初始化根据内存地址顺序串联空闲对象,而随机初始化则以随机顺序连接。顺序初始化有助于直观理解,而随机初始化则用于安全考虑,避免预测。 内核按照kmem_cache->size指定尺寸划分物理内存页,使用setup_object函数初始化内存区域并进行内存布局。在完成对象内存区域初始化后,slab freelist指针指向第一个初始化的空闲对象,重复此过程直至所有空闲对象串联,最后设置freelist的末尾为null。总结
通过本文的探讨,我们深入了解了slab cache内存分配的完整流程,包括快速和慢速路径、slab对象初始化和内存页详细初始化。理解了这些关键点有助于深入掌握slab cache的内存管理机制。Linux SPI-NAND 驱动开发指南
Linux SPI-NAND 驱动开发指南概述 1.1 目的 本指南旨在详细介绍Sunxi SPINand mtd/ubi驱动,为驱动和应用开发者提供便利。 1.2 适用范围 适用于所有sunxi平台的NAND MTD/UBI驱动开发。 1.3 参与人员 包括NAND模块开发者和应用开发者在内的相关人员。关键概念
MTD:Linux子系统中的内存技术设备,负责Flash驱动部分。 UBI:基于MTD的子系统,管理NAND特性,屏蔽底层细节。 坏块:由制造工艺和设备性质导致的不可用存储单元。开发流程
3.1 结构设计 NAND MTD/UBI驱动由5个核心组件构成,如图所示: 3.2 源码位置 驱动代码位于Linux 5.4内核的mtd/awnand/spinand目录下。关键数据定义
flash设备信息:包含型号、ID、芯片内部结构等详细参数。
chip操作接口:如读写、擦除、ecc处理和缓存管理等。
操作请求结构:定义了操作的目标页面和数据结构。
UBI ECC header:存储擦除计数器等信息。
UBI VID header:逻辑和物理块映射的详细描述。
接口说明
3.4.1 MTD层接口:包括 erase、read、read_oob、write、write_oob、检查坏块和标记坏块等。 3.4.2 物理层接口:针对芯片级别的读写、擦除和坏块操作。模块配置
4.1 U-Boot配置:涉及特定菜单项,如图所示。 4.2 内核配置:涉及UBI、NAND和SPI相关配置,如SPI设备、DMA和SID设置。 4.3 env.cfg:在构建过程中,通过添加特定变量来定制驱动环境。