Linux 2.6ÄÚºËÖÐеÄËø»úÖÆ RCU
ÔÎÄÍøÖ·£ºhttp://www.ibm.com/developerworks/cn/linux/l-rcu/
±¾ÎÄÏêϸµØ½éÉÜÁË Linux 2.6 ÄÚºËÖÐеÄËø»úÖÆ RCU(Read-Copy Update) µÄʵÏÖ»úÖÆ£¬Ê¹ÓÃÒªÇóÓëµäÐÍÓ¦Óá£
Ò»¡¢ ÒýÑÔ
ÖÚËùÖÜÖª£¬ÎªÁ˱£»¤¹²ÏíÊý¾Ý,ÐèҪһЩͬ²½»úÖÆ,Èç×ÔÐýËø(spinlock)£¬¶ÁÐ´Ëø(rwlock)£¬ËüÃÇʹÓÃÆðÀ´·Ç³£¼òµ¥,¶øÇÒÊÇÒ»ÖÖºÜÓÐЧµÄͬ²½»úÖÆ£¬ÔÚUNIXϵͳºÍLinuxϵͳÖеõ½Á˹㷺µÄʹÓᣵ«ÊÇËæ×żÆËã»úÓ²¼þµÄ¿ìËÙ·¢Õ¹£¬»ñµÃÕâÖÖËøµÄ¿ªÏúÏà¶ÔÓÚCPUµÄËÙ¶ÈÔڳɱ¶µØÔö¼Ó£¬ÔÒòºÜ¼òµ¥£¬CPUµÄËÙ¶ÈÓë·ÃÎÊÄÚ´æµÄËٶȲî¾àÔ½À´Ô½´ó£¬¶øÕâÖÖËøÊ¹ÓÃÁËÔ×Ó²Ù×÷Ö¸ÁËüÐèÒªÔ×ӵطÃÎÊÄڴ棬Ҳ¾Í˵»ñµÃËøµÄ¿ªÏúÓë·Ã´æËÙ¶ÈÏà¹Ø£¬ÁíÍâÔڴ󲿷ַÇx86¼Ü¹¹ÉÏ»ñÈ¡ËøÊ¹ÓÃÁËÄÚ´æÕ¤(Memory Barrier)£¬Õâ»áµ¼Ö´¦ÀíÆ÷Á÷Ë®ÏßÍ£ÖÍ»òˢУ¬Òò´ËËüµÄ¿ªÏúÏà¶ÔÓÚCPUËٶȶøÑÔ¾ÍÔ½À´Ô½´ó¡£±í1Êý¾ÝÖ¤Ã÷ÁËÕâÒ»µã¡£
±í1ÊÇÔÚ700MHzµÄ±¼ÌÚIII»úÆ÷ÉϵĻù±¾²Ù×÷µÄ¿ªÏú£¬ÔڸûúÆ÷ÉÏÒ»¸öʱÖÓÖÜÆÚÄܹ»Ö´ÐÐÁ½ÌõÕûÊýÖ¸Áî¡£ÔÚ1.8GHzµÄ±¼ÌÚ4»úÆ÷ÉÏ, Ô×Ó¼Ó1Ö¸ÁîµÄ¿ªÏúÒª±È700MHzµÄ±¼ÌÚIII»úÆ÷Âý75ÄÉÃë(ns)£¬¾¡¹ÜCPUËÙ¶È¿ìÁ½±¶¶à¡£
ÕâÖÖËø»úÖÆµÄÁíÒ»¸öÎÊÌâÔÚÓÚÆä¿ÉÀ©Õ¹ÐÔ£¬ÔÚ¶à´¦ÀíÆ÷ϵͳÉÏ£¬¿ÉÀ©Õ¹ÐԷdz£ÖØÒª£¬·ñÔò¸ù±¾ÎÞ·¨·¢»ÓÆäÐÔÄÜ¡£Í¼1±íÃ÷ÁËLinuxÉϸ÷ÖÖËøµÄÀ©Õ¹ÐÔ¡£
ͼ 1 LinuxµÄ4ÖÖËø»úÖÆµÄÀ©Õ¹ÐÔͼ 1 LinuxµÄ4ÖÖËø»úÖÆµÄÀ©Õ¹ÐÔ
×¢£ºrefcnt±íʾ×ÔÐýËøÓëÒýÓüÇÊýÒ»ÆðʹÓá£
¶ÁÐ´ËørwlockÔÚÁ½¸öCPUµÄÇé¿öÏÂÐÔÄÜ·´µ¹±ÈÒ»¸öCPUµÄ²î£¬ÔÚËĸöCPUµÄÇé¿öÏ£¬refcntµÄÐÔÄÜÒª¸ßÓÚrwlock£¬refcnt´óÔ¼ÊÇÀíÂÛÐÔÄܵÄ45%£¬¶ørwlockÊÇÀíÂÛÐÔÄܵÄ39%,×ÔÐýËõspinlockµÄÐÔÄÜÃ÷ÏÔºÃÓÚrefcntºÍrwlock£¬µ«ËüÒ²Ö»´ïµ½ÁËÀíÐÔÐÔÄܵÄ57%£¬brlock£¨Big Reader Lock£©ÐÔÄÜ¿ÉÒÔÏßÐÔÀ©Õ¹¡£BrlockÊÇÓÉRedhatµÄIngo MolnarʵÏÖµÄÒ»¸ö¸ßÐÔÄܵÄrwlock£¬ËüÊÊÓÃÓÚ¶ÁÌØ¶à¶øÐ´ÌØÉÙµÄÇé¿ö£¬¶ÁÕß»ñµÃbrlockµÄ¿ªÏúºÜµÍ£¬µ«Ð´Õß»ñµÃËøµÄ¿ªÏú·Ç³£´ó£¬¶øÇÒËüÖ»Ô¤¶¨ÒåÁ˼¸¸öËø£¬Óû§ÎÞ·¨Ëæ±ã¶¨Ò岢ʹÓÃÕâÖÖËø£¬ËüÒ²ÐèҪΪÿ¸öCPU¶¨ÒåÒ»¸öËø×´Ì¬Êý×飬Òò´ËÕâÖÖËø²¢Ã»Óб»×÷ΪrwlockµÄÌæ´ú·½°¸¹ã·ºÊ¹Óã¬Ö»ÊÇÔÚÒ»Ð©ÌØ±ðµÄµØ·½Ê¹Óõ½¡£
ÕýÊÇÔÚÕâÖÖ±³¾°Ï£¬Ò»¸ö¸ßÐÔÄܵÄËø»úÖÆRCUºôÖ®Óû³ö£¬Ëü¿Ë·þÁËÒÔÉÏËøµÄȱµã£¬¾ßÓкܺõÄÀ©Õ¹ÐÔ£¬µ«ÊÇÕâÖÖËø»úÖÆµÄʹÓ÷¶Î§±È½ÏÕ£¬ËüÖ»ÊÊÓÃÓÚ¶Á¶àдÉÙµÄÇé¿ö£¬ÈçÍøÂç·ÓɱíµÄ²éѯ¸üС¢É豸״̬±íµÄά»¤¡¢Êý¾Ý½á¹¹µÄÑÓ³ÙÊÍ·ÅÒÔ¼°¶à¾¶I/OÉ豸µÄά»¤µÈ¡£
RCU²¢²»ÊÇеÄËø»úÖÆ£¬ËüÖ»ÊǶÔLinuxÄں˶øÑÔÊÇеġ£ÔçÔÚ¶þÊ®ÊÀ¼Í°
Ïà¹ØÎĵµ£º
Ð¶ÔØmysql
1¡¢²éÕÒÒÔǰÊÇ·ñ×°ÓÐmysql
ÃüÁrpm -qa|grep -i mysql
¿ÉÒÔ¿´µ½mysqlµÄÁ½¸ö°ü£º
mysql-4.1.12-3.RHEL4.1
mysqlclient10-3.23.58-4.RHEL4.1
2¡¢É¾³ýmysql
ɾ³ýÃüÁrpm -e --nodeps °üÃû
( rpm -ev mysql-4.1.12-3.RHEL4.1 )
3¡¢É¾³ýÀϰ汾mysqlµÄ¿ª·¢Í·ÎļþºÍ¿â
ÃüÁrm -fr /usr/lib/mysql
r ......
ÄÚÈÝÌáÒª
¡¡¡¡±¾ÎÄÒÔRedHat9.0ºÍi386ƽ̨ΪÀý£¬ÆÊÎöÁË´ÓÓû§´ò¿ªµçÔ´Ö±µ½ÆÁÄ»³öÏÖÃüÁîÐÐÌáʾ·ûµÄÕû¸öLinuxÆô¶¯¹ý³Ì¡£²¢ÇÒ½éÉÜÁËÆô¶¯ÖÐÉæ¼°µ½µÄ¸÷ÖÖÎļþ¡£
¡¡¡¡ÔĶÁLinuxÔ´´úÂ룬ÎÞÒÉÊÇÉîÈëѧϰLinuxµÄ×îºÃ·½·¨¡£ÔÚ±¾ÎĶÔLinuxÆô¶¯¹ý³ÌµÄ½éÉÜÖУ¬ÎÒÃÇÒ²³¢ÊÔ´ÓÔ´´úÂëµÄÊÓ½ÇÀ´¸üÉîÈëµÄÆÊÎöLinuxµÄÆô¶¯¹ý³Ì£¬ËùÒÔÆäÖÐÒ²¼òµ¥Éæ ......
¹¦ÄÜ˵Ã÷£º½¨Á¢»òÐ޸ı¸´æÎļþ£¬»òÊÇ´Ó±¸´æÎļþÖгéÈ¡Îļþ¡£
Óï¡¡¡¡·¨£ºar[-dmpqrtx][cfosSuvV][a<³ÉÔ±Îļþ>][b<³ÉÔ±Îļþ>][i<³ÉÔ±Îļþ>][±¸´æÎļþ][³ÉÔ±Îļþ]
²¹³ä˵Ã÷£ºar¿ÉÈÃÄú¼¯ºÏÐí¶àÎļþ£¬³ÉΪµ¥Ò»µÄ±¸´æÎļþ¡£ÔÚ±¸´æÎļþÖУ¬ËùÓгÉÔ±Îļþ½Ô±£ÓÐÔÀ´µÄÊôÐÔÓëȨÏÞ¡£
²Î¡¡¡¡Êý£º
¡¡Ö¸Áî²ÎÊý
¡ ......
Îå¡¢ ipt_do_table()º¯Êý£¬Êý¾Ý°üµÄ¹ýÂË
5.1 ipt_entry Ïà¹Ø½á¹¹ ip_tables.h
ipt_entry½á¹¹Ç°ÃæÓйýÁË£¬ÔÙ¿´Ò»±é
struct ipt_entry
{
struct ipt_ip ip;
/* ËùҪƥÅäµÄ±¨ÎĵÄIPÍ·ÐÅÏ¢ */
unsigned int nfcache;
/* λÏòÁ¿£¬±êʾ±¾¹æÔò¹ØÐÄ ......