LinuxÄÚºËͨ¹ýһϵÁи´ÔÓ¶ø¸ßЧµÄ»úÖÆ£¬ÊµÏÖÁ˶ÔÄÚ´æ×ÊÔ´µÄÁé»î·ÖÅäÓë¹ÜÀí
±¾ÎĽ«ÉîÈë̽ÌÖLinuxÄں˷ÖÅäÄÚ´æµÄ»úÖÆ¡¢²ßÂÔÒÔ¼°ÓÅ»¯·½·¨£¬°ïÖú¶ÁÕ߸üºÃµØÀí½âÕâÒ»¸´ÔÓ¶ø¾«Ï¸µÄϵͳ
Ò»¡¢LinuxÄÚºËÄÚ´æ·ÖÅä»úÖÆ LinuxÄÚºËÄÚ´æ·ÖÅäÖ÷ÒªÒÀÀµÓÚ¶àÖÖº¯ÊýºÍ»úÖÆ£¬ÒÔÂú×㲻ͬ³¡¾°ÏµÄÄÚ´æÐèÇó
1.Óû§¿Õ¼äÄÚ´æ·ÖÅä -malloc()º¯Êý£ºÕâÊÇC±ê×¼¿âÌṩµÄÄÚ´æ·ÖÅ亯Êý£¬ÓÃÓÚÔÚ¶ÑÇø·ÖÅäÖ¸¶¨´óСµÄÄÚ´æ¿Õ¼ä
µ±ÄÚ´æ¹»ÓÃʱ£¬mallocÖ±½Ó´ÓC¿â»º´æ·ÖÅ䣻µ±»º´æ²»×ãʱ£¬»áͨ¹ýϵͳµ÷ÓÃbrkÏòÄÚºËÉêÇëÄÚ´æ
-calloc()º¯Êý£ºÓëmallocÀàËÆ£¬µ«calloc»á·ÖÅä²¢³õʼ»¯ÄÚ´æÎª0£¬ÊÊÓÃÓÚÐèÒªÇåÁãµÄÄÚ´æ·ÖÅ䳡¾°
-realloc()º¯Êý£ºÓÃÓÚµ÷Õû֮ǰͨ¹ýmalloc»òcalloc·ÖÅäµÄÄÚ´æ¿éµÄ´óС£¬¿ÉÒÔÀ©´ó»òËõСÒÑ·ÖÅäµÄÄÚ´æÇøÓò
-alloca()º¯Êý£¨·Ç±ê×¼¿âº¯Êý£©£ºÔÚÕ»É϶¯Ì¬·ÖÅäÄڴ棬ÓŵãÊÇÎÞÐèÊÖ¶¯ÊÍ·Å£¬µ«È±µãÊÇ¿ÉÄܵ¼ÖÂÕ»Òç³ö
´ËÍ⣬Óû§¿Õ¼ä»¹¿ÉÒÔʹÓþ²Ì¬´æ´¢Çø¡¢È«¾Ö±äÁ¿ºÍ¾Ö²¿¾²Ì¬±äÁ¿µÈ·½Ê½½øÐÐÄÚ´æ·ÖÅ䣬ÕâЩ·½Ê½ÓɱàÒëÆ÷×Ô¶¯¹ÜÀí£¬ÉúÃüÖÜÆÚ´Ó³ÌÐò¿ªÊ¼µ½½áÊø
2.Äں˿ռäÄÚ´æ·ÖÅä -kmalloc()º¯Êý£ºÓÃÓÚÔÚÄں˶ÑÖзÖÅäÖ¸¶¨´óСµÄÄÚ´æ¿é£¬²¢·µ»Ø·ÖÅäÄÚ´æµÄÖ¸Õë
kmallocÊÊÓÃÓÚÐèÒª¿ìËÙ·ÖÅäС¿éÄÚ´æµÄ³¡¾°
-vmalloc()º¯Êý£ºÓëkmalloc²»Í¬£¬vmallocÔÚÄÚºËÐéÄâÄڴ棨vmallocÇøÓò£©ÖзÖÅäÄڴ棬¿ÉÒÔ¿çÔ½ÎïÀíÒ³±ß½ç
ÓÉÓÚÐèҪά»¤Ò³±íµÈ¶îÍ⿪Ïú£¬vmallocµÄÐÔÄÜÏà¶Ô½ÏµÍ£¬µ«ÊÊÓÃÓÚ·ÖÅä´ó¿éÄÚ´æ»òÐèÒªÁ¬ÐøÐéÄâµØÖ·¿Õ¼äµÄ³¡¾°
-get_free_pages()ºÍ__get_free_page()º¯Êý£ºÓÃÓÚ·ÖÅäÌØ¶¨ÊýÁ¿µÄÁ¬ÐøÎïÀíÒ³£¨ÒÔ2µÄÃÝΪµ¥Î»£©ºÍµ¥¸öÎïÀíÒ³
ÕâЩº¯Êý·µ»ØÒ»¸öÖ¸ÏòÁ¬ÐøÎïÀíÒ³ÃæµÄÖ¸Õ룬ÊÊÓÃÓÚÐèÒªÎïÀíÁ¬ÐøÄÚ´æµÄ³¡¾°
-dma_alloc_coherent()º¯Êý£ºÎªÉ豸Çý¶¯³ÌÐòÌṩDMA£¨Ö±½ÓÄÚ´æ·ÃÎÊ£©²Ù×÷µÄÄÚ´æ·ÖÅä
ͨ¹ýµ÷ÓÃdma_alloc_coherent£¬¿ÉÒÔ»ñµÃÒ»¿é±»É豸·ÃÎÊËùÐèµÄÎïÀíÁ¬ÐøÄڴ棬²¢·µ»ØÒ»¸öÂß¼µØÖ·¹©É豸ʹÓÃ
-kfree()¡¢vfree()ºÍdma_free_coherent()º¯Êý£º·Ö±ðÓÃÓÚÊÍ·Åͨ¹ýkmalloc¡¢vmallocºÍdma_alloc_coherent·ÖÅäµÄÄÚ´æ
¶þ¡¢LinuxÄÚºËÄÚ´æ·ÖÅä²ßÂÔ LinuxÄÚºËÔÚ·ÖÅäÄÚ´æÊ±£¬×ñÑһϵÁвßÂÔÒÔÈ·±£ÄÚ´æ×ÊÔ´µÄÓÐЧÀûÓúÍϵͳµÄÎȶ¨ÐÔ
1.»º´æ²ßÂÔ LinuxÄÚºËͨ¹ýά»¤Ò»ÏµÁлº´æ£¨ÈçÒ³»º´æ¡¢inode»º´æºÍdentry»º´æ£©À´¼õÉÙ¶Ô´ÅÅ̵ķÃÎÊ£¬Ìá¸ßϵͳÐÔÄÜ
ÕâЩ»º´æ»áÕ¼ÓÃÒ»²¿·ÖÄÚ´æ×ÊÔ´£¬µ«ÔÚϵͳÐèҪʱ£¬¿ÉÒÔͨ¹ý»ØÊÕ»úÖÆÊͷŲ¿·Ö»º´æÒÔÂú×ãÆäËûÄÚ´æÐèÇó
2.ÐéÄâÄÚ´æ¹ÜÀí LinuxÄÚºËʹÓÃÐéÄâÄÚ´æ¼¼Êõ½«ÎïÀíÄÚ´æÓëÐéÄâµØÖ·¿Õ¼ä·ÖÀ룬ʵÏÖÄÚ´æµÄ°´Ðè·ÖÅäºÍ¶¯Ì¬¹ÜÀí
ͨ¹ýÐéÄâÄÚ´æ¼¼Êõ£¬LinuxÄں˿ÉÒÔÖ§³Ö±ÈÎïÀíÄÚ´æ¸ü´óµÄµØÖ·¿Õ¼ä£¬²¢ÔÚ±ØÒªÊ±Í¨¹ý½»»»£¨swapping£©ºÍ·ÖÒ³£¨paging£©»úÖÆ½«²¿·ÖÄÚ´æÒ³Ãæ½»»»µ½´ÅÅÌÉÏ
3.ÄÚ´æ¹ýÁ¿Ê¹ÓòßÂÔ µ±ÏµÍ³ÄÚ´æ²»×ãʱ£¬LinuxÄں˻á²ÉȡһϵÁдëÊ©À´Ó¦¶ÔÄÚ´æ¹ýÁ¿Ê¹ÓõÄÇé¿ö
ÕâЩ´ëÊ©°üÀ¨»ØÊÕ»º´æ¡¢É±ËÀµÍÓÅÏȼ¶½ø³ÌÒÔ¼°Ê¹Óý»»»¿Õ¼äµÈ
ͨ¹ýÕâЩ´ëÊ©£¬LinuxÄں˿ÉÒÔÈ·±£ÏµÍ³µÄÎȶ¨ÔËÐУ¬±ÜÃâÄÚ´æÐ¹Â©ºÍ±ÀÀ£µÈÎÊÌâ
Èý¡¢LinuxÄÚºËÄÚ´æ·ÖÅäÓÅ»¯ LinuxÄÚºËÄÚ´æ·ÖÅäµÄÓÅ»¯Éæ¼°¶à¸ö·½Ã棬°üÀ¨µ÷ÕûVM²ÎÊý¡¢ÅäÖôóÒ³Ö§³Ö¡¢ÓÅ»¯NUMAÄÚ´æ·ÖÅäÒÔ¼°µ÷ÕûÄÚ´æ¹ýÁ¿Ê¹ÓòßÂÔµÈ
1.µ÷ÕûVM²ÎÊý LinuxÄÚºËÌṩÁ˶à¸öVM²ÎÊýÀ´µ÷ÕûÄÚ´æ¹ÜÀíµÄÐÐΪ
ÀýÈ磬ͨ¹ýµ÷Õûswappiness²ÎÊý£¬¿ÉÒÔ¼õÉÙ¶Ô½»»»¿Õ¼äµÄÒÀÀµ£¬Ìá¸ßϵͳµÄÏìÓ¦ËÙ¶È
´ËÍ⣬»¹¿ÉÒÔͨ¹ýÅäÖôóÒ³Ö§³ÖÀ´¼õÉÙTLBʧЧ£¬½øÒ»²½Ìá¸ßÐÔÄÜ
2.ÓÅ»¯NUMAÄÚ´æ·ÖÅä ÔÚNUMA£¨Non-Uniform Memory Access£©¼Ü¹¹ÖУ¬ÄÚ´æ·ÃÎÊËÙ¶È¿ÉÄÜÒòÄÚ´æÎ»ÖöøÒì
Òò´Ë£¬ÔÚNUMAϵͳÖÐÓÅ»¯ÄÚ´æ·ÖÅäÊǷdz£ÖØÒªµÄ
LinuxÄÚºËÌṩÁËNUMA¸ÐÖªµÄÄÚ´æ·ÖÅä»úÖÆ£¬¿ÉÒÔ¸ù¾ÝÄÚ´æµÄλÖúͷÃÎÊËÙ¶ÈÀ´ÓÅ»¯ÄÚ´æ·ÖÅ䣬Ìá¸ßϵͳµÄÐÔÄÜ
3.µ÷ÕûÄÚ´æ¹ýÁ¿Ê¹ÓòßÂÔ µ±ÏµÍ³ÄÚ´æ²»×ãʱ£¬LinuxÄں˻á²ÉȡһϵÁдëÊ©À´Ó¦¶ÔÄÚ´æ¹ýÁ¿Ê¹ÓõÄÇé¿ö
È»¶ø£¬ÕâЩĬÈÏ´ëÊ©¿ÉÄܲ¢²»×ÜÊÇ×îÓŵÄ
Òò´Ë£¬¿ÉÒÔͨ¹ýµ÷ÕûÏà¹Ø²ÎÊýºÍ²ßÂÔÀ´ÓÅ»¯ÄÚ´æ¹ýÁ¿Ê¹ÓÃʱµÄÐÐΪ
ÀýÈ磬¿ÉÒÔÅäÖÃoom_killer£¨Out-Of-Memory Killer£©À´É±ËÀµÍÓÅÏȼ¶½ø³ÌÒÔÊÍ·ÅÄÚ´æ×ÊÔ´£¬»òÕßͨ¹ýµ÷Õûoom_adj²ÎÊýÀ´ÉèÖýø³ÌµÄÓÅÏȼ¶ºÍoom_score_adj²ÎÊýÀ´µ÷Õû½ø³ÌµÄOOM·ÖÊý
4.ʹÓÃÄÚ´æ·ÖÎö¹¤¾ß ΪÁ˸üÓÐЧµØÓÅ»¯ÄÚ´æ·ÖÅäºÍ¹ÜÀí£¬¿ÉÒÔʹÓÃһЩÄÚ´æ·ÖÎö¹¤¾ßÀ´¼à¿ØºÍ·ÖÎöϵͳµÄÄÚ´æÊ¹ÓÃÇé¿ö
ÀýÈ磬¿ÉÒÔʹÓÃperf¹¤¾ß½øÐÐÐÔÄÜ·ÖÎö£¬ÆôÓúͷÖÎöftraceÈÕÖ¾£¬»òÕßʹÓÃeBPF½øÐи߼¶ÐÔÄÜ·ÖÎö
ÕâЩ¹¤¾ß¿ÉÒÔ°ïÖúʶ±ðÄÚ´æÐ¹Â©¡¢ÄÚ´æË鯬µÈÎÊÌ⣬²¢ÌṩÏàÓ¦µÄÓÅ»¯½¨Òé
ËÄ¡¢½áÂÛ LinuxÄں˵ÄÄÚ´æ·ÖÅä»úÖÆÊÇÒ»¸ö¸´ÔÓ¶ø¾«Ï¸µÄϵͳ£¬Í¨¹ý¶àÖÖº¯ÊýºÍ»úÖÆÊµÏÖÁ˶ÔÄÚ´æ×ÊÔ´µÄÁé»î·ÖÅäÓë¹ÜÀí
ΪÁËÓÅ»¯ÄÚ´æ·ÖÅäºÍÌá¸ßϵͳÐÔÄÜ£¬ÐèÒªÁ˽âÕâЩ»úÖÆ²¢²ÉÈ¡ÏàÓ¦µÄÓÅ»¯´ëÊ©
ͨ¹ýµ÷ÕûVM²ÎÊý¡¢ÅäÖôóÒ³Ö§³Ö¡¢ÓÅ»¯NUMAÄÚ´æ·ÖÅäÒÔ¼°µ÷ÕûÄÚ´æ¹ýÁ¿Ê¹ÓòßÂԵȷ½·¨£¬¿ÉÒÔ½øÒ»²½Ìá¸ßLinuxϵͳµÄÎȶ¨ÐÔºÍÐÔÄÜ
ͬʱ£¬Ê¹ÓÃÄÚ´æ·ÖÎö¹¤¾ß¿ÉÒÔ°ïÖúʶ±ðºÍ½â¾öÄÚ´æÏà¹ØÎÊÌ⣬ΪϵͳµÄÓÅ»¯ÌṩÓÐÁ¦Ö§³Ö