¶øÔÚLinuxϵͳµÄºËÐÄÖ®ÖУ¬ÄÚ´æ¹ÜÀí»úÖÆÎÞÒÉÊÇÈ·±£Æä׿ԽÐÔÄܵĹؼüËùÔÚ
ÒªÉîÈëÀí½âÕâÒ»¸´ÔÓ¶ø¾«Ï¸µÄ»úÖÆ£¬Ò»±¾È¨Íþ¡¢Ï꾡µÄ¡°LinuxÄÚ´æÊé¼®¡±ÎÞÒÉÊÇÿλϵͳ¹ÜÀíÔ±¡¢¿ª·¢ÈËÔ±¼°¼ÆËã»ú¿ÆÑ§°®ºÃÕߵıر¸Á¼°é
±¾ÎĽ«»ùÓÚÕâÑùÒ»±¾¼ÙÉèµÄÀíÏëÊé¼®£¬´øÄúÉîÈë̽Ë÷LinuxÄÚ´æ¹ÜÀíµÄ°ÂÃØ£¬½ÒʾÆä±³ºóµÄÔÀíÓëʵ¼ù
Ò»¡¢ÒýÑÔ£ºÎªºÎѧϰLinuxÄÚ´æ¹ÜÀí LinuxÄÚ´æ¹ÜÀí²»½ö½öÊDzÙ×÷ϵͳ¿Î³ÌÖеÄÒ»¸öÕ½ڣ¬ËüÊÇÁ¬½ÓÓ²¼þ×ÊÔ´ÓëÈí¼þÓ¦ÓõÄÇÅÁº£¬Ö±½Ó¹ØÏµµ½ÏµÍ³µÄÏìÓ¦ËÙ¶È¡¢Îȶ¨ÐÔÒÔ¼°¶àÈÎÎñ´¦ÀíµÄÄÜÁ¦
ÕÆÎÕLinuxÄÚ´æ¹ÜÀí£¬Òâζ×ÅÄܹ»¸üºÃµØµ÷ÓÅϵͳÐÔÄÜ£¬½â¾öÄÚ´æÐ¹Â©¡¢Ë鯬»¯µÈÎÊÌ⣬ÉõÖÁΪ¿ª·¢¸ßЧӦÓõ춨¼áʵµÄ»ù´¡
Òò´Ë£¬ÎÞÂÛÊdzöÓÚÖ°Òµ·¢Õ¹µÄÐèÒª£¬»¹ÊǶԼÆËã»ú¿ÆÑ§Éî²ã´Î̽Ë÷µÄÐËȤ£¬Ñ§Ï°LinuxÄÚ´æ¹ÜÀí¶¼ÊÇÒ»Ï¾ß¼ÛÖµµÄͶ×Ê
¶þ¡¢LinuxÄÚ´æ¹ÜÀí»ù´¡¼Ü¹¹ 2.1 ÐéÄâÄÚ´æÓëÎïÀíÄÚ´æ Ò»ÇÐʼÓÚÐéÄâÄÚ´æµÄ¸ÅÄî
Linuxͨ¹ýÐéÄâÄÚ´æ¼¼Êõ£¬ÎªÃ¿¸ö½ø³ÌÌṩÁËÒ»¸ö¶ÀÁ¢µÄµØÖ·¿Õ¼ä£¬Õâ¼È±£»¤Á˽ø³Ì¼äµÄÊý¾Ý²»±»Ï໥¸ÉÈÅ£¬ÓÖʵÏÖÁËÎïÀíÄÚ´æµÄ³éÏ󻯹ÜÀí
ÊéÖлáÏêϸ½éÉÜÐéÄâÄÚ´æµØÖ·µ½ÎïÀíÄÚ´æµØÖ·µÄÓ³Éä¹ý³Ì£¬°üÀ¨·Ö¶Î£¨segmentation£©ºÍ·ÖÒ³£¨paging£©»úÖÆ£¬ÒÔ¼°ÈçºÎͨ¹ýÒ³±í£¨page table£©ÊµÏÖ¿ìËÙ²éÕÒ
2.2 ÄÚ´æ·ÖÅäÓë»ØÊÕ LinuxÄÚºËͨ¹ýһϵÁÐËã·¨ºÍÊý¾Ý½á¹¹£¬Èç»ï°éϵͳ£¨buddy system£©¡¢slab·ÖÅäÆ÷¡¢kmalloc/kzallocµÈ£¬¸ßЧµØ¹ÜÀí×ÅÎïÀíÄÚ´æµÄ·ÖÅäÓë»ØÊÕ
ÊéÖн«ÉîÈëÆÊÎöÕâЩ»úÖÆµÄ¹¤×÷ÔÀí£¬°üÀ¨ËüÃÇÈçºÎƽºâÄÚ´æÊ¹ÓõÄЧÂÊÓëË鯬ÎÊÌ⣬ÒÔ¼°ÈçºÎͨ¹ýµ÷ÕûÄں˲ÎÊýÀ´ÓÅ»¯ÄÚ´æ·ÖÅä²ßÂÔ
Èý¡¢½ø³ÌÓëÄÚ´æ¹ÜÀí 3.1 ½ø³ÌµÄÄÚ´æ²¼¾Ö ÿ¸öLinux½ø³Ì¶¼ÓÐ×Ô¼ºÌض¨µÄÄÚ´æ²¼¾Ö£¬°üÀ¨´úÂë¶Î¡¢Êý¾Ý¶Î¡¢¶ÑÇø¡¢Õ»ÇøÒÔ¼°Î´Ó³ÉäÇøÓò
ÊéÖлáÏêϸ²ûÊöÕâÐ©ÇøÓòµÄ×÷Óá¢ÌصãÒÔ¼°ËüÃÇÖ®¼äµÄÏ໥×÷Ó㬰ïÖú¶ÁÕßÀí½â½ø³ÌÈçºÎÔÚÄÚ´æÖÐ×éÖ¯×ÔÉí
3.2 ÄÚ´æÓ³ÉäÎļþÓë¹²ÏíÄÚ´æ LinuxÌṩÁËÄÚ´æÓ³ÉäÎļþ£¨mmap£©ºÍ¹²ÏíÄڴ棨shm£©µÈ»úÖÆ£¬Ê¹µÃÎļþÄÚÈÝ¿ÉÒÔÖ±½ÓÓ³Éäµ½½ø³ÌµÄµØÖ·¿Õ¼ä£¬¶à¸ö½ø³Ì¿ÉÒÔ¹²Ïíͬһ¿éÎïÀíÄÚ´æÇøÓò£¬¼«´óµØÌá¸ßÁËÊý¾Ý´«ÊäЧÂʺÍÄÚ´æÀûÓÃÂÊ
ÊéÖн«ÉîÈë½²½âÕâЩ»úÖÆµÄʵÏÖÔÀí¡¢Ó¦Óó¡¾°¼°×¢ÒâÊÂÏî
ËÄ¡¢¸ß¼¶ÄÚ´æ¹ÜÀí¼¼Êõ 4.1 ½»»»¿Õ¼äÓëÄÚ´æÑ¹Ëõ µ±ÎïÀíÄÚ´æ²»×ãʱ£¬Linux»áÀûÓý»»»¿Õ¼ä£¨swap£©½«²¿·Ö²»»îÔ¾µÄÄÚ´æÒ³Ãæ½»»»µ½´ÅÅÌÉÏ£¬ÒÔÊÍ·ÅÎïÀíÄÚ´æ¸ø¸üÐèÒªµÄ½ø³Ì
´ËÍâ£¬Ëæ×ÅÄں˰汾µÄ¸üУ¬ÄÚ´æÑ¹Ëõ¼¼Êõ£¨ÈçzRAM£©Ò²Öð½¥³ÉΪ»º½âÄÚ´æÑ¹Á¦µÄÓÐЧÊÖ¶Î
ÊéÖн«È«Ãæ½éÉÜÕâЩ¼¼ÊõµÄ¹¤×÷ÔÀí¡¢ÅäÖ÷½·¨¼°ÐÔÄÜÓ°Ïì
4.2 ÄÚ´æÈ¥ÖØ£¨KSM£©Óë͸Ã÷´óÒ³£¨THP£© Õë¶ÔÌØ¶¨Ó¦Óó¡¾°£¬Linux»¹ÌṩÁËÄÚ´æÈ¥ÖØ£¨Kernel Same-page Merging, KSM£©ºÍ͸Ã÷´óÒ³£¨Transparent Hugepages, THP£©µÈ¸ß¼¶ÌØÐÔ
KSMͨ¹ýºÏ²¢ÏàͬÄÚÈݵÄÄÚ´æÒ³ÃæÀ´¼õÉÙÄÚ´æÕ¼Ó㬶øTHPÔòͨ¹ýÔö¼ÓÒ³Ãæ´óСÀ´Ìá¸ßÄÚ´æ¹ÜÀíµÄЧÂÊ
ÊéÖн«ÉîÈë½âÎöÕâÐ©ÌØÐÔµÄʵÏÖϸ½Ú¡¢ÊÊÓó¡¾°¼°ÅäÖü¼ÇÉ
Îå¡¢ÄÚ´æµ÷ÓÅÓë¹ÊÕÏÕï¶Ï 5.1 ÐÔÄÜ¼à¿ØÓë·ÖÎö¹¤¾ß Á˽âϵͳÄÚ´æÊ¹ÓÃÇé¿öµÄµÚÒ»²½ÊÇʹÓÃ¼à¿Ø¹¤¾ß
ÊéÖн«½éÉÜÖîÈç`top`¡¢`htop`¡¢`vmstat`¡¢`free`¡¢`sar`ÒÔ¼°¸üרҵµÄ`perf`ºÍ`sysstat`Ì×¼þµÈ¹¤¾ß£¬°ïÖú¶ÁÕßʵʱ¼à¿ØÄÚ´æÊ¹ÓÃÇé¿ö£¬Ê¶±ðDZÔÚµÄÐÔÄÜÆ¿¾±
5.2 ÄÚ´æÐ¹Â©¼ì²âÓëÐÞ¸´ ÄÚ´æÐ¹Â©Êǵ¼ÖÂϵͳ²»Îȶ¨ºÍÐÔÄÜϽµµÄÖØÒªÔÒòÖ®Ò»
ÊéÖн«½ÌÊÚÈçºÎʹÓÃ`valgrind`¡¢`AddressSanitizer`µÈ¹¤¾ß¼ì²âÄÚ´æÐ¹Â©£¬²¢ÌṩʵÓõĴúÂëÓÅ»¯½¨Ò飬°ïÖú¿ª·¢Õß±àд¸ü¼Ó½¡×³µÄ´úÂë
5.3 ÄÚ´æË鯬»¯ÓëÓÅ»¯²ßÂÔ ÄÚ´æË鯬»¯Êdz¤ÆÚÔËÐеÄϵͳ²»¿É±ÜÃâµÄÎÊÌâ
ÊéÖн«Ì½ÌÖÄÚ´æË鯬»¯µÄ³ÉÒò¡¢Ó°ÏìÒÔ¼°ÈçºÎͨ¹ýÄں˲ÎÊýµ÷Õû¡¢ÄÚ´æ·ÖÅä²ßÂÔÓÅ»¯µÈÊÖ¶ÎÀ´»º½âÕâÒ»ÎÊÌâ
Áù¡¢ÊµÕ½°¸ÀýÓëδÀ´Ç÷ÊÆ 6.1 ʵս°¸Àý·ÖÎö ÀíÂÛѧϰ֮Í⣬ÊéÖл¹½«Í¨¹ýһϵÁÐʵս°¸Àý£¬Èç·þÎñÆ÷ÄÚ´æÓÅ»¯¡¢Ç¶ÈëʽϵͳÄÚ´æ¹ÜÀíÌôÕ½¡¢ÈÝÆ÷»¯»·¾³ÖеÄÄÚ´æ¸ôÀëÓëÏÞÖÆµÈ£¬Õ¹Ê¾ÈçºÎ½«ÀíÂÛ֪ʶӦÓÃÓÚ½â¾öʵ¼ÊÎÊÌâ
6.2 LinuxÄÚ´æ¹ÜÀíµÄδÀ´ Ëæ×ż¼ÊõµÄ²»¶Ï½ø²½£¬LinuxÄÚ´æ¹ÜÀíÒ²ÔÚ³ÖÐøÑݽø
ÊéÖн«Õ¹ÍûLinuxÄÚ´æ¹ÜÀíµÄδÀ´Ç÷ÊÆ£¬°üÀ¨³Ö¾ÃÄڴ棨PMEM£©µÄÖ§³Ö¡¢¸ü¼ÓÖÇÄܵÄÄÚ´æ»ØÊÕ²ßÂÔ¡¢ÒÔ¼°ÃæÏòÒì¹¹¼ÆËã»·¾³µÄÄÚ´æ¹ÜÀíÓÅ»¯µÈ
½áÓï ×ÛÉÏËùÊö£¬Ò»±¾È«Ãæ¶øÉîÈëµÄ¡°LinuxÄÚ´æÊé¼®¡±²»½öÊÇÀí½âLinux²Ù×÷ϵͳÄں˹¤×÷ÔÀíµÄÔ¿³×£¬¸üÊÇÌáÉýϵͳÐÔÄÜ¡¢½â¾ö¸´ÔÓÎÊÌâµÄÀûÆ÷
Ëü²»½öÄܹ»Âú×ãרҵÈËÊ¿¶Ô¼¼Êõϸ½ÚµÄ×·Çó£¬Ò²ÄÜΪ³õѧÕß´ò¿ªÒ»ÉÈͨÍù¼ÆËã»ú¿ÆÑ§ÉîåäÊÀ½çµÄ´óÃÅ
ÔÚÕâ¸ö³äÂúÌôÕ½Óë»úÓöµÄʱ´ú£¬ÕÆÎÕLinuxÄÚ´æ¹ÜÀíµÄ¾«Ë裬ÎÞÒɽ«Îª¸öÈ˵ÄÖ°Òµ·¢Õ¹ºÍ¼¼Êõ̽Ë÷֮·ÆÌÉè¼áʵµÄ»ùʯ
ÈÃÎÒÃÇһ̤ͬÉÏÕâ¶Î³äÂúÖÇ»ÛÓë·¢ÏÖµÄÂọ́¬Ì½Ë÷LinuxÄÚ´æ¹ÜÀíµÄÎÞÏÞ¿ÉÄÜ