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 住这样的源码源码现象,通过搜索资料后发现了以下两篇文章里也遇到了相似的下载飞翔网站源码问题。这两篇文章都提到了是内核内核由于 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、摔跤网站源码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:在构建过程中,通过添加特定变量来定制驱动环境。