From owner-freebsd-net Thu Feb 14 2:17: 1 2002 Delivered-To: freebsd-net@freebsd.org Received: from hale.inty.net (hale.inty.net [195.92.21.144]) by hub.freebsd.org (Postfix) with ESMTP id 408EC37B400 for ; Thu, 14 Feb 2002 02:16:45 -0800 (PST) Received: from inty.hq.inty.net (inty.hq.inty.net [213.38.150.150]) by hale.inty.net (8.11.3/8.11.3) with ESMTP id g1EAGZN51164 for ; Thu, 14 Feb 2002 10:16:35 GMT Received: from tariq ([10.0.1.156]) by inty.hq.inty.net (8.12.1/8.12.1) with SMTP id g1EAGXYl031552 for ; Thu, 14 Feb 2002 10:16:34 GMT From: "Tariq Rashid" To: Subject: RE: squeeze more performance out of natd? - some gprof stats Date: Thu, 14 Feb 2002 10:19:51 -0000 Message-ID: MIME-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2910.0) Importance: Normal X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000 In-Reply-To: X-Sender-IP: 10.0.1.156 X-INT-DeliveryDone: g1EAGXYl031552 X-suppress-rcpt-virus-notify: yes X-Skip-Virus-Check: yes X-Virus-Checked: 11031 Sender: owner-freebsd-net@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.org attached are some gprof stats - it seems that sendto() is taking most of the time... does this mean that nothing can be done about it? what affects the speed of sendto() returning... i have the following boosted kernel params: net.local.stream.sendspace: 8192 net.local.stream.recvspace: 8192 net.local.dgram.recvspace: 4096 net.inet.tcp.sendspace: 16384 net.inet.tcp.recvspace: 16384 net.inet.udp.recvspace: 41600 net.inet.raw.recvspace: 8192 and the ulimit -a shows a healthy max proc /fds... the kernel option maxusers is set to 1024. cpu time (seconds) unlimited file size (blocks) unlimited data seg size (kbytes) 524288 stack size (kbytes) 65536 core file size (blocks) unlimited resident set size (kbytes) unlimited locked-in-memory size (kb) unlimited processes 16403 file descriptors 32808 socket buffer size (kb) unlimited i do note that sometimes the SendNeedIcmpFrag is called after sendto() - i guess thats due to the sendto() not happening atomically at that particular time. my earlier thoughts that it migt be select() don't seem to be reflected by the gprof output below? any advice from those with more profiling experience would be gratefully recieved. the top bit of gprof attched... --------------- gprof natd natd.gmon ------------------------------ called/total parents index %time self descendents called+self name index called/total children [1] 99.9 0.23 24.49 main [1] 0.14 23.19 94551/94551 DoAliasing [2] 1.04 0.00 94552/94552 select [7] 0.00 0.08 1/1 ParseArgs [19] 0.04 0.00 189104/189104 bzero [28] 0.00 0.00 1/1 SetAliasAddressFromIfName [67] 0.00 0.00 1/2 PacketAliasSetMode [66] 0.00 0.00 1/1 PacketAliasInit [79] 0.00 0.00 1/1 printf [89] 0.00 0.00 2/4 socket [119] 0.00 0.00 2/3 siginterrupt [126] 0.00 0.00 2/3 signal [128] 0.00 0.00 1/1 openlog [150] 0.00 0.00 1/1 _bind [658] 0.00 0.00 1/1 _shutdown [663] 0.00 0.00 1/27362 __error_unthreaded [639] ----------------------------------------------- 0.14 23.19 94551/94551 main [1] [2] 94.3 0.14 23.19 94551 DoAliasing [2] 0.05 20.19 94551/94551 FlushPacketBuffer [3] 1.16 0.00 94551/94551 recvfrom [5] 0.05 0.91 50094/50094 PacketAliasOut [8] 0.04 0.79 44457/44457 PacketAliasIn [9] ----------------------------------------------- 0.05 20.19 94551/94551 DoAliasing [2] [3] 81.8 0.05 20.19 94551 FlushPacketBuffer [3] 20.19 0.00 94551/94552 _sendto [4] ----------------------------------------------- 0.00 0.00 1/94552 send [70] 20.19 0.00 94551/94552 FlushPacketBuffer [3] [4] 81.6 20.19 0.00 94552 _sendto [4] ----------------------------------------------- 1.16 0.00 94551/94551 DoAliasing [2] [5] 4.7 1.16 0.00 94551 recvfrom [5] ----------------------------------------------- 94551 SendNeedFragIcmp [6] 0.08 0.44 44457/94551 PacketAliasIn [9] 0.09 0.50 50094/94551 PacketAliasOut [8] [6] 4.5 0.17 0.94 94551+94551 SendNeedFragIcmp [6] 0.02 0.36 50094/50094 FindUdpTcpOut [14] 0.02 0.31 44457/44457 FindUdpTcpIn [17] 0.05 0.00 94551/94551 GetAckModified [26] 0.04 0.00 94551/94551 GetAliasAddress [29] 0.02 0.00 50094/50094 ProxyCheck [33] 0.02 0.00 50094/50594 GetAliasPort [32] 0.02 0.00 50094/50094 GetStateOut [34] 0.02 0.00 44457/44957 GetOriginalPort [35] 0.02 0.00 44457/44457 GetProxyAddress [36] 0.01 0.00 44457/44457 GetProxyPort [37] 0.01 0.00 44457/44957 GetOriginalAddress [44] 0.01 0.00 50094/50094 SetStartSeq [45] 0.01 0.00 44457/44457 GetStateIn [49] 0.01 0.00 44457/44457 GetFlags [52] 0.00 0.00 500/500 SetStateOut [61] 0.00 0.00 500/500 SetStateIn [101] 94551 SendNeedFragIcmp [6] ----------------------------------------------- 1.04 0.00 94552/94552 main [1] [7] 4.2 1.04 0.00 94552 select [7] ----------------------------------------------- 0.05 0.91 50094/50094 DoAliasing [2] [8] 3.9 0.05 0.91 50094 PacketAliasOut [8] 0.09 0.50 50094/94551 SendNeedFragIcmp [6] 0.05 0.25 50094/94552 HouseKeeping [12] 0.01 0.00 50094/50094 GetDefaultAliasAddress [39] 0.00 0.00 50094/50094 SetDefaultAliasAddress [53] 0.00 0.00 50094/94551 ClearCheckNewLink [47] ----------------------------------------------- 0.04 0.79 44457/44457 DoAliasing [2] [9] 3.4 0.04 0.79 44457 PacketAliasIn [9] 0.08 0.44 44457/94551 SendNeedFragIcmp [6] 0.05 0.22 44457/94552 HouseKeeping [12] 0.00 0.00 44457/94551 ClearCheckNewLink [47] ----------------------------------------------- [10] 2.7 0.30 0.37 95949+99575 [10] 0.26 0.37 96449+98083 FindNewPortGroup [11] 0.04 0.00 99075 DifferentialChecksum [27] ----------------------------------------------- 98083 FindNewPortGroup [11] 500 DifferentialChecksum [27] 0.00 0.00 1/95949 PacketAliasSetAddress [78] 0.00 0.00 1/95949 PacketAliasUninit [63] 0.00 0.00 8/95949 PacketAliasRedirectPort [72] 0.00 0.00 388/95949 HouseKeeping [12] 0.00 0.00 500/95949 FindAliasAddress [54] 0.14 0.17 44457/95949 FindUdpTcpIn [17] 0.16 0.20 50594/95949 FindUdpTcpOut [14] [11] 2.5 0.26 0.37 96449+98083 FindNewPortGroup [11] 0.00 0.37 1008/1010 PunchFWHole [15] 0.00 0.00 1016/1047 malloc [58] 0.00 0.00 1016/1045 free [59] 99075 DifferentialChecksum [27] 98083 FindNewPortGroup [11] ----------------------------------------------- 0.00 0.00 1/94552 PacketAliasUninit [63] 0.05 0.22 44457/94552 PacketAliasIn [9] 0.05 0.25 50094/94552 PacketAliasOut [8] [12] 2.3 0.10 0.47 94552 HouseKeeping [12] 0.46 0.00 94551/94554 gettimeofday [13] 0.00 0.00 388/95949 FindNewPortGroup [11] ----------------------------------------------- 0.00 0.00 1/94554 PacketAliasInit [79] 0.00 0.00 2/94554 time [77] 0.46 0.00 94551/94554 HouseKeeping [12] [13] 1.9 0.46 0.00 94554 gettimeofday [13] ----------------------------------------------- 0.02 0.36 50094/50094 SendNeedFragIcmp [6] [14] 1.5 0.02 0.36 50094 FindUdpTcpOut [14] 0.16 0.20 50594/95949 FindNewPortGroup [11] 0.00 0.00 500/500 FindAliasAddress [54] ----------------------------------------------- 0.00 0.00 2/1010 PacketAliasCheckNewLink [62] 0.00 0.37 1008/1010 FindNewPortGroup [11] [15] 1.5 0.00 0.37 1010 PunchFWHole [15] 0.37 0.00 28664/28664 _setsockopt [16] 0.00 0.00 500/44957 GetOriginalPort [35] 0.00 0.00 500/50594 GetAliasPort [32] 0.00 0.00 500/44957 GetOriginalAddress [44] 0.00 0.00 500/500 GetDestAddress [100] 0.00 0.00 2/3 memset [123] ----------------------------------------------- 0.37 0.00 28664/28664 PunchFWHole [15] [16] 1.5 0.37 0.00 28664 _setsockopt [16] ----------------------------------------------- 0.02 0.31 44457/44457 SendNeedFragIcmp [6] [17] 1.3 0.02 0.31 44457 FindUdpTcpIn [17] 0.14 0.17 44457/95949 FindNewPortGroup [11] ----------------------------------------------- [18] 0.3 0.00 0.08 4+9 [18] 0.00 0.08 12 ParseOption [20] 0.00 0.00 1 ReadConfigFile [81] ----------------------------------------------- 0.00 0.08 1/1 main [1] [19] 0.3 0.00 0.08 1 ParseArgs [19] 0.00 0.08 4/4 ParseOption [20] 0.00 0.00 4/4 strncat [120] ----------------------------------------------- 8 ReadConfigFile [81] 0.00 0.08 4/4 ParseArgs [19] [20] 0.3 0.00 0.08 12 ParseOption [20] 0.00 0.08 8/8 SetupPortRedirect [21] root@exoserver.tariq11:/# gprof /sbin/natd natd.gmon | less /usr/share/misc/gprof.callg: No such file or directory None granularity: each sample hit covers 4 byte(s) for 0.00% of 24.73 seconds granularity: each sample hit covers 4 byte(s) for 0.00% of 24.73 seconds called/total parents index %time self descendents called+self name index called/total children [1] 99.9 0.23 24.49 main [1] 0.14 23.19 94551/94551 DoAliasing [2] 1.04 0.00 94552/94552 select [7] 0.00 0.08 1/1 ParseArgs [19] 0.04 0.00 189104/189104 bzero [28] 0.00 0.00 1/1 SetAliasAddressFromIfName [67] 0.00 0.00 1/2 PacketAliasSetMode [66] 0.00 0.00 1/1 PacketAliasInit [79] 0.00 0.00 1/1 printf [89] 0.00 0.00 2/4 socket [119] 0.00 0.00 2/3 siginterrupt [126] 0.00 0.00 2/3 signal [128] 0.00 0.00 1/1 openlog [150] 0.00 0.00 1/1 _bind [658] 0.00 0.00 1/1 _shutdown [663] 0.00 0.00 1/27362 __error_unthreaded [639] ----------------------------------------------- 0.14 23.19 94551/94551 main [1] [2] 94.3 0.14 23.19 94551 DoAliasing [2] 0.05 20.19 94551/94551 FlushPacketBuffer [3] 1.16 0.00 94551/94551 recvfrom [5] 0.05 0.91 50094/50094 PacketAliasOut [8] 0.04 0.79 44457/44457 PacketAliasIn [9] ----------------------------------------------- 0.05 20.19 94551/94551 DoAliasing [2] [3] 81.8 0.05 20.19 94551 FlushPacketBuffer [3] 20.19 0.00 94551/94552 _sendto [4] ----------------------------------------------- 0.00 0.00 1/94552 send [70] 20.19 0.00 94551/94552 FlushPacketBuffer [3] [4] 81.6 20.19 0.00 94552 _sendto [4] ----------------------------------------------- 1.16 0.00 94551/94551 DoAliasing [2] [5] 4.7 1.16 0.00 94551 recvfrom [5] ----------------------------------------------- 94551 SendNeedFragIcmp [6] 0.08 0.44 44457/94551 PacketAliasIn [9] 0.09 0.50 50094/94551 PacketAliasOut [8] [6] 4.5 0.17 0.94 94551+94551 SendNeedFragIcmp [6] 0.02 0.36 50094/50094 FindUdpTcpOut [14] 0.02 0.31 44457/44457 FindUdpTcpIn [17] 0.05 0.00 94551/94551 GetAckModified [26] 0.04 0.00 94551/94551 GetAliasAddress [29] 0.02 0.00 50094/50094 ProxyCheck [33] 0.02 0.00 50094/50594 GetAliasPort [32] 0.02 0.00 50094/50094 GetStateOut [34] 0.02 0.00 44457/44957 GetOriginalPort [35] 0.02 0.00 44457/44457 GetProxyAddress [36] 0.01 0.00 44457/44457 GetProxyPort [37] 0.01 0.00 44457/44957 GetOriginalAddress [44] 0.01 0.00 50094/50094 SetStartSeq [45] 0.01 0.00 44457/44457 GetStateIn [49] 0.01 0.00 44457/44457 GetFlags [52] 0.00 0.00 500/500 SetStateOut [61] 0.00 0.00 500/500 SetStateIn [101] 94551 SendNeedFragIcmp [6] ----------------------------------------------- 1.04 0.00 94552/94552 main [1] [7] 4.2 1.04 0.00 94552 select [7] ----------------------------------------------- 0.05 0.91 50094/50094 DoAliasing [2] [8] 3.9 0.05 0.91 50094 PacketAliasOut [8] 0.09 0.50 50094/94551 SendNeedFragIcmp [6] 0.05 0.25 50094/94552 HouseKeeping [12] 0.01 0.00 50094/50094 GetDefaultAliasAddress [39] 0.00 0.00 50094/50094 SetDefaultAliasAddress [53] 0.00 0.00 50094/94551 ClearCheckNewLink [47] ----------------------------------------------- 0.04 0.79 44457/44457 DoAliasing [2] [9] 3.4 0.04 0.79 44457 PacketAliasIn [9] 0.08 0.44 44457/94551 SendNeedFragIcmp [6] 0.05 0.22 44457/94552 HouseKeeping [12] 0.00 0.00 44457/94551 ClearCheckNewLink [47] ----------------------------------------------- intY has automatically scanned this email with Sophos Anti-Virus (www.inty.com) To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message