PGµç¾º

ÐÂÎŶ¯Ì¬
µ±Ç°Î»ÖãºÊ×Ò³ > ÐÂÎŶ¯Ì¬

eBPF¼¼Êõʵ¼ù°×ƤÊ龫Ñ¡£º»ùÓÚeBPFµÄTCP¼à¿Ø¼¼Êõ

2025-04-04

TCP¼à¿ØÃæÁÙµÄÌôÕ½

´óÁ¿Êµ¼ÊÒµÎñÊôÓÚÇëÇó-ÏìÓ¦µÄͨÐÅģʽ£¬±ÈÈçÊý¾Ý¿â¡¢WebÓ¦Óõȡ£¶ÔÕâЩӦÓöøÑÔ£¬¶Ëµ½¶ËµÄÁ¬½ÓÊý¾ÝÊÇÖØÒªµÄ¼à¿ØÖ¸±ê¡£ÓÈÆä¶ÔÔÆÉÏÓû§¶øÑÔ£¬Æä¸ÐÖªµ½µÄÔÆÓ¦ÓõÄÑÓ³ÙÊÇÖն˵ÄÑÓ³Ù£¬Ò²¾ÍÊÇÕû¸öÍøÂç·¾¶ÉϵÄÑÓ³Ù¡£ÀíÏëÇé¿öÏ£¬ÒªÇóͳ¼Æµ½Â·¾¶ÉÏÿ¸ö½Úµã´¦ÀíÑÓ³ÙÒÔ¼°ÍøÂçÉÏËùÓÐÑÓ³ÙµÄ×ܺÍ£¬ÒÔ׼ȷʶ±ðÍøÂçÒì³££¬¶¨Î»ÍøÂçÎÊÌâ¡£

È»¶ø£¬´«Í³µÄTCP¼à¿Ø·½·¨´æÔÚÒ»¶¨¾ÖÏÞÐÔ£¬ÄÑÒÔÓ¦¶ÔÔÆ³¡¾°´ó¹æÄ£ÍøÂçÏ£¬¶Ëµ½¶ËTCP³£Ì¬»¯¼à¿ØµÄÐèÒª¡£

²É¼¯µ½µÄÐÅÏ¢ÓÐÏÞ£º´«Í³TCP¼à¿Ø¹¤¾ßÍùÍù½öÌṩÁ¬½ÓÁ£¶ÈµÄÐÅÏ¢£¬¹ÊÖ»ÄܸÐÖªµ½Á¬½ÓÕûÌå״̬£¬±ÈÈçÊÕ·¢Êý¾ÝÁ¿¡¢RTT¡¢ÓµÈû´°¿ÚµÈ£¬ÄÑÒÔ»ñÈ¡ÇëÇóÁ£¶ÈµÄ¼à¿ØÐÅÏ¢£»

ÒýÈë½Ï¸ßµÄ¶îÍâÐÔÄܸºÔØ£º×¥°üÊÇÁíÒ»ÖÖ³£ÓõÄÍøÂç¼à¿Ø·½Ê½£¬ËäÈ»¸Ã·½Ê½Äܹ»»ñÈ¡µ½Ï൱¶àµÄÐÅÏ¢£¬µ«ÊÇÔËÐÐʱÒýÈë½Ï´ó¿ªÏú£¬Ó¦ÓÃÖиü¶à×÷Ϊµ÷ÊÔÊֶΣ¬¶ø²»ÄÜÂú×㳣̬»¯¼à¿ØµÄÒªÇó£»

¶ÔÓû§ÒµÎñÂß¼­ÓÐÇÖÈ룺ÓÐÒ»Àà¸ú×Ù·½Ê½£¬ÈëÇÖʽµØÔÚÒµÎñ´úÂëÖÐÌí¼ÓÂñµã£¬¼Ç¼¸÷¸ö½Úµã״̬ÐÅÏ¢£¬Í¨¹ý»ã×Ü·ÖÎö£¬»ñÈ¡¸÷½×¶ÎºÄʱµÈÐÅÏ¢¡£µ«ÊÇÕâÖÖ·½Ê½ÒÀÀµÒµÎñÂß¼­ÊÊÅ䣬ʵÓÃÐÔ²»×ã¡£

ÏÖÓеÄTCP¼à¿Ø¹¤¾ßÖ÷ÒªÓУº

netstat£º¿ÉÏÔʾ¸÷ÖÖÍøÂçÐÅÏ¢£¬°üÀ¨ÍøÂçÁ¬½Ó¡¢Â·Óɱí¡¢½Ó¿Úͳ¼ÆÐÅÏ¢¡¢Á¬½ÓÐÅÏ¢µÈ¡£¶ÔTCP²ã£¬Äܹ»ÏÔʾÁ¬½Ó״̬¡¢ÊÕ·¢¶ÓÁÐÊý¾Ý£¬Í³¼Æ¶ª°üÊýÁ¿ÓëÔ­ÒòµÈ¡£½ö²É¼¯µ½Á¬½ÓÁ£¶ÈµÄÐÅÏ¢¡£

ss£ºÊÇÒ»¸öÓÃÓÚ²é¿´ÍøÂçÌ×½Ó×Ö״̬µÄ¹¤¾ß£¬¿ÉÒÔ»ñÈ¡µ½¶àÖÖTCPÁ¬½ÓµÄÐÅÏ¢¡£°üÀ¨ËÄÔª×é¡¢Á¬½Ó״̬¡¢´°¿Ú´óС¡¢ÖØ´«ÐÅÏ¢µÈ¡£ÓënetstatÀàËÆ£¬Ò²½öÕë¶ÔÁ¬½ÓÁ£¶È¡£

tcpdump£ºÊÇÒ»ÖÖÊý¾Ý°ü·ÖÎö¹¤¾ß£¬Äܹ»×¥È¡ÍøÂçÊý¾Ý°ü£¬²É¼¯Êý¾Ý°üµÄÊÕ·¢Ê±¼ä´ÁÐÅÏ¢ÓëÊý¾Ý°üÄÚÈÝ¡£¸Ã·½Ê½»áÒýÈë½Ï´óµÄÐÔÄÜ¿ªÏú¡£

socket timestamp£ºÄܹ»ÔÚ¼à¿ØTCP socketµÄÊÕ·¢°üʱ¼ä´Á£¬ÅäºÏÓ¦Óòà²É¼¯Ê±¼ä£¬Äܹ»»ñÈ¡µ½Õû¸öͨÐÅ·¾¶ÉϵÄÑÓ³Ù¡£¸Ã·½Ê½ÐèÒªÓû§ÐÞ¸ÄÒµÎñÂß¼­ÊÊÅä¡£

»ùÓÚeBPFµÄTCPÈ«Á´Â·¼à¿Ø¼¼Êõ

ΪÁ˿˷þÁË´«Í³TCP¼à¿Ø·½Ê½µÄȱÏÝ£¬ÁúòáÉçÇø»ùÓÚeBPF¿ª·¢ÊµÏÖÁËÒ»ÖֵͿªÏú¡¢¿É³£Ì¬»¯µÄÇëÇó-ÏìӦģʽµÄ TCP ʱÑÓ¼à¿Ø¹¤¾ßtcprt£¬tcprtÄܹ»ÔÚTCP²ã£¬ÃæÏòÁ´Â·¡¢TCPÁ¬½Ó¡¢Ó¦ÓýøÐÐʵʱ¼à¿Ø£¬Îª¹ÊÕÏÕï¶Ï¡¢ÐÔÄÜÓÅ»¯Ìṩ·ÖÎöÒÀ¾Ý¡£ÔÚWeb·þÎñ¡¢MySQLÊý¾Ý¿â·þÎñµÈ³¡¾°ÖоßÓÐÓ¦ÓüÛÖµ¡£

tcprt»ùÓÚeBPFµÄtracepointºÍsockops»úÖÆÊµÏÖ£¬Í¨¹ý¶ÔTCPÁ¬½ÓÊÕ·¢°ü״̬µÄ¸ú×Ù£¬¼à¿ØÓ¦Óõġ°ÇëÇó¡±Óë¡°ÏìÓ¦¡±´¦Àí״̬£¬²¢²É¼¯Ïà¹ØµÄÍøÂç²ÎÊý£¬°üÀ¨ÇëÇóÔÚЭÒéÕ»ÖнÓÊÕµÄʱ¼ä£¬¼°·þÎñ½ø³Ì´¦Àí¹ý³ÌÖеĺÄʱµÈÊý¾ÝÐÅÏ¢¡£×îÖÕÒÔÈÕÖ¾ÐÎʽ´«µÝµ½Óû§¿Õ¼ä¡£

1.png

ͼ£ºtcprtÐÅÏ¢²É¼¯Ê¾Òâͼ

ÉÏͼչʾÁËtcprt»®·ÖÒµÎñÁ÷Á¿µÄ¸÷¸ö½×¶Î¡£¿Í»§¶Ë£¨Client£©Ïò·þÎñ¶Ë£¨Server£©·¢Ë͵ĵÚN¸öÇëÇó£¨request£©±íʾΪReqN¡£¸ÃÇëÇóÓÉReqN-1ºÍReqN-2Á½¸öÊý¾Ý°ü×é³É¡£·þÎñ¶ËÊÕµ½µÚÒ»¸ö°üµÄʱ¼ä±»¼Ç¼ΪT0£¬µÚ¶þ¸ö°üµÄʱ¼ä±»¼Ç¼ΪT1¡£·þÎñ¶ËÊÕµ½ÇëÇóºó½øÐд¦Àí£¬Íê³É´¦Àíºó»áÏò¿Í»§¶Ë·¢ËÍÁ½¸öÏìÓ¦µÄÊý¾Ý°üRspN-1ºÍRspN-2£¬·þÎñ¶Ë·¢Ë͵ÚÒ»¸ö°üµÄʱ¼ä±»¼Ç¼ΪT2¡£¿Í»§¶ËÊÕµ½ÏìÓ¦°üºó»á·¢ËÍÈ·ÈÏÐÅÏ¢ACK¸ø·þÎñPGµç¾º¹ÙÍø£¬·þÎñ¶ËÊÕµ½×îºóÒ»¸öACKµÄʱ¼ä±»¼Ç¼ΪT3¡£

tcprt»ùÓÚÒÔÉϵÄʱ¼äµãµÄ¼Ç¼£¬¿ÉÒԲɼ¯µ½ÒÔÏÂÐÅÏ¢£º

£¨1£©upload_time£ºÓû§ÇëÇóÉÏ´«ËùʹÓõÄʱ¼ä£»

£¨2£©process_time£º·þÎñ¶ËµÄ´¦Àíʱ¼ä¡£·þÎñ¶Ë´ÓÊÕµ½×îºóÒ»¸öÇëÇóµÄÊý¾Ý°ü¿ªÊ¼£¬µ½·þÎñ¶ËÏò¿Í»§¶Ë¿ªÊ¼·¢ËÍÏìÓ¦µÄÊý¾Ý°üΪֹ£¬Õâ¶Îʱ¼äΪ·þÎñ¶ËµÄ´¦Àíʱ¼ä£»

£¨3£©download_time£ºÊý¾ÝÏÂÔØÊ±¼ä¡£´Ó·þÎñ¶Ë¿ªÊ¼Ïò¿Í»§¶Ë·¢ËÍÏìÓ¦µÄÊý¾Ý°ü¿ªÊ¼£¬µ½·þÎñ¶ËÊÕµ½¿Í»§¶Ë×îºóÒ»¸öACKΪֹ£¬Õâ¶Îʱ¼äΪÊý¾ÝÏÂÔØÊ±¼ä¡£¶ÔÓÚÏÂÔØ±È½Ï´óµÄÊý¾ÝÏìÓ¦£¬¸ÃÐÅÏ¢µÄ»ñÈ¡½ÏÎªÖØÒª¡£´ËÍ⣬tcprt»¹ÊÕ¼¯ÇëÇó´¦Àí¹ý³ÌÖеÄTCPÁ¬½ÓRTT¡¢ÂÒÐò¡¢Êý¾ÝÁ¿µÈÐÅÏ¢¡£

tcprtͨ¹ýÃüÁîÐУ¬Ìṩ¿ª¹Ø¹¦ÄÜ£¬²¢ÌṩÅäÖÃÎļþÒÔ±ãÓû§ÅäÖùýÂËÌõ¼þ¡£ÅäÖÃÎļþλÓÚ/etc/tcprt-bpf/tcprt.yaml£¬ÔÊÐíÅäÖùýÂ˶˿ڻò¶Ë¿Ú·¶Î§¡£tcprtÆô¶¯ºó£¬»á½«¼à¿Ø½á¹ûÒÔdebugfsµÄ·½Ê½Êä³öµ½/sys/kernel/debug/tcp-rt·¾¶ÏµÄrt-network-log*ΪÃû³ÆµÄÎļþÖС£ÎļþÃû³ÆµÄºó׺ΪCPUÄں˵ÄÐòºÅ¡£

tcprt½«Ò»¶ÔÇëÇó-ÏìÓ¦ÊÓ×÷Ò»¸öTASK£¬ÆäÌṩµÄ¼à¿ØÐÅÏ¢Ö÷Òª°üÀ¨£º

  • TASK¿ªÊ¼Ê±¼ä£¬¿ªÊ¼Ê±¼äµÄÃ벿·Ö£»

  • TASK¿ªÊ¼Ê±¼ä£¬¿ªÊ¼Ê±¼äµÄ΢Ã벿·Ö£»

  • TCPÁ¬½ÓµÄ¶Ô¶ËIPµØÖ·£»

  • TCPÁ¬½ÓµÄ¶Ô¶Ë¶Ë¿Ú£»

  • TCPÁ¬½ÓµÄ±¾µØIPµØÖ·£»

  • TCPÁ¬½ÓµÄ±¾µØ¶Ë¿Ú£»

  • TASK·¢Ë͵ÄÊý¾ÝÁ¿£¬µ¥Î»£ºByte£»

  • TASK×ܺÄʱ¡£¼´µÚÒ»¸öÇëÇósegmentµ½´ïÓë×îºóÒ»¸öÏìÓ¦µÄsegment±»ackÖ®¼äµÄʱ¼ä¼ä¸ô£¬µ¥Î»£º¦Ìs£»

  • TASK×îСµÄTCP RTT£¨Round Trip Time£©£¬µ¥Î»£º¦Ìs£»

  • TASKÖØ´«·¢Ë͵ÄTCP±¨ÎĶΣ¨TCP segment£©ÊýÁ¿£»

  • TASKÐòºÅ£¬TCP½¨Á¢ºóµÄµÚÒ»¸öTASKÐòºÅΪ1£»

  • TASK·þÎñÑÓʱ£¬¼´×îºóÒ»¸öÇëÇóµÄsegmentµ½´ïÓëµÚÒ»¸öÏìÓ¦µÄsegment·¢ËÍÖ®¼äµÄʱ¼ä¼ä¸ô£¬µ¥Î»£º¦Ìs£»

  • TASKÉÏËÍÑÓʱ¡£¼´µÚÒ»¸öÇëÇósegmentµ½´ïÓë×îºóÒ»¸öÇëÇósegmentµ½´ïÖ®¼äµÄʱ¼ä¼ä¸ô£¬µ¥Î»£º¦Ìs£»

  • TASK½ÓÊÕµÄÊý¾ÝÁ¿£¬µ¥Î»£ºByte£»

  • TASK¹ý³ÌÊÇ·ñ·¢Éú½ÓÊÕÂÒÐò£¬²ÎÊýֵ˵Ã÷£º1±íʾ·¢Éú£»0±íʾûÓз¢Éú£»

  • TASK¹ý³ÌÖÐTCPʹÓõÄ×î´ó±¨Îij¤¶È£¨MSS£©£¬µ¥Î»£ºByte¡£

tcprt ¹¤¾ßÒÑ¿ªÔ´µ½AnolisÉçÇø£¬Ö§³ÖÔÚ Anolis OSÄں˰汾5.10-17¼°ÒÔÉϰ汾µÄϵͳÖа²×°Ê¹Óã¬ÊµÏÖ¶ÔTCPÁ¬½Ó״̬µÄ¾«Ï¸»¯¼à¿Ø¡£

´úÂë²Ö¿âµØÖ·£ºhttps://gitee.com/anolis/tcprt

°×ƤÊ飺https://openanolis.cn/assets/static/eBPF_technical_practice_v2.pdf

²úÆ·
²úÆ·½éÉÜ
²úÆ·°¸Àý
²úÆ·ÏÂÔØ
½â¾ö·½°¸
ÐÐÒµ½â¾ö·½°¸
CentOSÍ£·þÓ¦¶Ô
Éú̬ºÏ×÷
Éú̬ºÏ×÷²éѯ
·þÎñÖ§³Ö
·þÎñÌåϵ
¼¼ÊõÎĵµ
·þÎñ¼¤»îÓë²éѯ
°²È«¹«¸æ
½Ì¿¼ÖÐÐÄ
¿Î³Ìѧϰ
¿¼ÊÔÈÏÖ¤
Ö¤Êé²éѯ

¹Ø×¢ÎÒÃÇ

Copyright ? 2024 PGµç¾ºÐÅÏ¢ ³ICP±¸13028953ºÅ-12

ÊÛǰ×Éѯ

ÊÛºó·þÎñ

»Øµ½¶¥²¿

»Øµ½¶¥²¿

ÊÛǰ×Éѯ
ÊÛºó·þÎñ
¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿