HEADS UP: DCCP debugging

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I've been partying and working on an OSTRA rebirth, this time based on
my current work on DWARF tools, so to give just a heads up, here is the
current stage, explanations below:

1. build the kernel as usual + select CONFIG_DEBUG_INFO to insert
debugging information, the resulting kernel will be larger but otherwise
the same, the debug information, just like with any other project built
with 'gcc -g' will be in separate ELF sections.

2. Run ctracer, the tool I'm writing, available at
http://www.kernel.org/git/?p=linux/kernel/git/acme/pahole.git;a=summary

ctracer --recursive -dir net/dccp/ --glob "*.ko" --kprobes vmlinux sock > ctracer.c

'--recursive --dir net/dccp/' --glob "*.ko"' will tell ctracer to
consider just the files in the net/dccp/ subtree

'--kprobes vmlinux' its just for ctracer to find the needed structs and
function prototypes for the kprobes routines and for the current trace
relay agent, a lame one that just uses plain printk, but will be
replaced by something along the lines of what is used in blktrace, or
just the same, perhaps, haven't checked yet.

finally 'sock' tells ctracer that we're interested only in functions
that receives as one of its parameter a pointer to struct sock.

The resulting ctracer.c file is available at:
http://oops.ghostprotocols.net:81/acme/sock_ctracer.c

Then, using the instructions in Documentation/kprobes.txt, we build the
resulting kernel module, ctracer.c, for reference the makefile is very
simple:

----------------- 8< ------------------
[acme@newtoy ctracer_example]$ cat Makefile
obj-m := ctracer.o
KDIR := /pub/scm/linux/kernel/git/acme/linux-2.6/
PWD := $(shell pwd)
default:
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
[acme@newtoy ctracer_example]$
----------------- 8< ------------------

Then we load the DCCP modules:

[root@qemu ~]# modprobe dccp_ccid3
[   86.873785] CCID: Registered CCID 3 (ccid3)
[root@qemu ~]# modprobe dccp_ipv4

And then the ctracer.ko module, that will complain about some symbols
not being found, i.e. I haven't loaded ccid2.ko, dccp_ipv6.ko nor the
dccpprobe.ko (that I hope to turn moot after I finish this work):

[root@qemu ~]# insmod ./ctracer.ko
[   94.835016] register_jprobe(ccid2_hc_tx_packet_recv) failed, returned -22
[   94.906545] register_kretprobe(ccid2_hc_tx_packet_recv) failed, returned -22
[   94.991244] register_jprobe(ccid2_hc_tx_packet_sent) failed, returned -22
[   95.072229] register_kretprobe(ccid2_hc_tx_packet_sent) failed, returned -22
[   95.154525] register_jprobe(ccid2_hc_tx_send_packet) failed, returned -22
[   95.236687] register_kretprobe(ccid2_hc_tx_send_packet) failed, returned -22
[   95.315511] register_jprobe(ccid2_hc_tx_init) failed, returned -22
[   95.389672] register_kretprobe(ccid2_hc_tx_init) failed, returned -22
[   95.473402] register_jprobe(ccid2_hc_tx_exit) failed, returned -22
[   95.559145] register_kretprobe(ccid2_hc_tx_exit) failed, returned -22
[   95.642080] register_jprobe(ccid2_hc_rx_packet_recv) failed, returned -22
[   95.725702] register_kretprobe(ccid2_hc_rx_packet_recv) failed, returned -22
[   95.820803] register_jprobe(ccid2_hc_tx_dec_pipe) failed, returned -22
[   95.903664] register_kretprobe(ccid2_hc_tx_dec_pipe) failed, returned -22
[   95.986252] register_jprobe(ccid2_hc_tx_kill_rto_timer) failed, returned -22
[   96.071975] register_kretprobe(ccid2_hc_tx_kill_rto_timer) failed, returned -22
[   96.151152] register_jprobe(ccid2_start_rto_timer) failed, returned -22
[   96.243973] register_kretprobe(ccid2_start_rto_timer) failed, returned -22
[   96.327091] register_jprobe(ccid2_change_l_ack_ratio) failed, returned -22
[   96.413197] register_kretprobe(ccid2_change_l_ack_ratio) failed, returned -22

This soft lockup is harmless so far, something related to qemu +
kprobes, still have to investigate, but has not prevented me from
testing what I have so far:

[  106.611513] BUG: soft lockup detected on CPU#0!
[  106.625659]  [<c01150d8>] update_process_times+0x28/0x70
[  106.641645]  [<c010508b>] timer_interrupt+0x2b/0x50
[  106.648264]  [<c0128205>] handle_IRQ_event+0x25/0x50
[  106.655091]  [<c0129550>] handle_level_irq+0x0/0xc0
[  106.668005]  [<c01295a5>] handle_level_irq+0x55/0xc0
[  106.716414]  [<c0104023>] do_IRQ+0x63/0xb0
[  106.720906]  [<c0102a4f>] common_interrupt+0x23/0x28
[  106.726948]  [<c0127729>] kallsyms_expand_symbol+0x79/0xb0
[  106.738641]  [<c0127ded>] kallsyms_lookup_name+0x3d/0x80
[  106.753817]  [<c0260610>] longjmp_break_handler+0x0/0x130
[  106.771530]  [<d0806041>] jprobe_init+0x41/0xaf [ctracer]
[  106.777810]  [<c0261245>] __register_kprobe+0x45/0x270
[  106.828679]  [<d0806041>] jprobe_init+0x41/0xaf [ctracer]
[  106.841134]  [<c01258e5>] sys_init_module+0x155/0x1740
[  106.849205]  [<c01028d8>] syscall_call+0x7/0xb
[  106.859973]  =======================
[  115.678750] register_jprobe(dccp_diag_get_info) failed, returned -22
[  115.846025] register_kretprobe(dccp_diag_get_info) failed, returned -22
[  118.297134] register_jprobe(dccp_v6_conn_request) failed, returned -22
[  118.452448] register_kretprobe(dccp_v6_conn_request) failed, returned -22
[  118.593451] register_jprobe(dccp_v6_request_recv_sock) failed, returned -22
[  118.743396] register_kretprobe(dccp_v6_request_recv_sock) failed, returned -22
[  118.892009] register_jprobe(dccp_v6_send_check) failed, returned -22
[  119.057726] register_kretprobe(dccp_v6_send_check) failed, returned -22
[  119.231268] register_jprobe(dccp_v6_do_rcv) failed, returned -22
[  119.400589] register_kretprobe(dccp_v6_do_rcv) failed, returned -22
[  119.560109] register_jprobe(dccp_v6_connect) failed, returned -22
[  119.745185] register_kretprobe(dccp_v6_connect) failed, returned -22
[  119.944263] register_jprobe(dccp_v6_hash) failed, returned -22
[  120.126660] register_kretprobe(dccp_v6_hash) failed, returned -22
[  120.295032] register_jprobe(dccp_v6_init_sock) failed, returned -22
[  120.463380] register_kretprobe(dccp_v6_init_sock) failed, returned -22
[  120.633082] register_jprobe(dccp_v6_destroy_sock) failed, returned -22
[  120.803029] register_kretprobe(dccp_v6_destroy_sock) failed, returned -22
[  120.962845] register_jprobe(dccp_v6_get_port) failed, returned -22
[  121.135645] register_kretprobe(dccp_v6_get_port) failed, returned -22
[  121.335622] register_jprobe(dccp_v6_send_response) failed, returned -22
[  121.531446] register_kretprobe(dccp_v6_send_response) failed, returned -22
[  121.691987] register_jprobe(dccp_v6_ctl_send_reset) failed, returned -22
[  121.871578] register_kretprobe(dccp_v6_ctl_send_reset) failed, returned -22
[  122.047721] register_jprobe(jdccp_sendmsg) failed, returned -22
[  122.210602] register_kretprobe(jdccp_sendmsg) failed, returned -22

OK, so we got 86 probes inserted:

[  122.226522] ctracer: registered 86 entry probes
[  122.244371] ctracer: registered 86 exit probes

Now lets use ttcp for a quick test:

[root@qemu ~]# ttcp -cacme -l256 -r &
[1] 478
[root@qemu ~]# ttcp-r: buflen=256, nbuf=2048, align=16384/+0, port=5001
dccp(inet)
[  127.666592] -> dccp_v4_init_sock: sk=cf54c040
[  127.668269] -> dccp_init_sock: sk=cf54c040
[  127.669180] -> ccid_hc_rx_new: sk=cf54c040
[  127.669478] -> ccid_new: sk=cf54c040
[  128.072205] CCID: Registered CCID 2 (ccid2)
[  128.081212] <- ccid_new
[  128.081867] <- ccid_hc_rx_new
[  128.082171] -> ccid_hc_tx_new: sk=cf54c040
[  128.082508] -> ccid_new: sk=cf54c040
[  128.083224] <- ccid_new
[  128.083399] <- ccid_hc_tx_new
[  128.083632] -> dccp_init_xmit_timers: sk=cf54c040
[  128.083972] <- dccp_init_xmit_timers
[  128.084219] <- dccp_init_sock
[  128.084580] <- dccp_v4_init_sock
ttcp-r: socket
[  128.086479] -> dccp_v4_get_port: sk=cf54c040
[  128.087111] <- dccp_v4_get_port
[  128.087842] -> dccp_setsockopt: sk=cf54c040
[  128.088216] do_dccp_setsockopt: sockopt(PACKET_SIZE) is deprecated:
fix your app
[  128.088665] <- dccp_setsockopt
[  128.088927] -> dccp_setsockopt: sk=cf54c040
[  128.096660] <- dccp_setsockopt
[  128.098301] -> dccp_v4_get_port: sk=cf54c040
[  128.098794] <- dccp_v4_get_port
[  128.099040] -> dccp_hash: sk=cf54c040
[  128.099359] <- dccp_hash

Above are the functions involved in listening to DCCP incoming
connections.

Now to run the client, sending only 5 256 byte sized packets (beware,
I'm testing over loopback, so listening server, server and client
sockets will be mixed, that is why the sk is printed):

[root@qemu ~]# ttcp -cacme -l256 -n5 -t localhost
[root@qemu ~]# ttcp-t: buflen=256, nbuf=5, align=16384/+0, port=5001
dccp(inet)  -> localhost
[  133.284937] -> dccp_v4_init_sock: sk=cf54c3a0
[  133.286262] -> dccp_init_sock: sk=cf54c3a0
[  133.286642] -> ccid_hc_rx_new: sk=cf54c3a0
[  133.287044] -> ccid_new: sk=cf54c3a0
[  133.287300] <- ccid_new
[  133.287475] <- ccid_hc_rx_new
[  133.287683] -> ccid_hc_tx_new: sk=cf54c3a0
[  133.287956] -> ccid_new: sk=cf54c3a0
[  133.288509] <- ccid_new
[  133.288677] <- ccid_hc_tx_new
[  133.288888] -> dccp_init_xmit_timers: sk=cf54c3a0
[  133.289190] <- dccp_init_xmit_timers
[  133.289414] <- dccp_init_sock
[  133.289604] <- dccp_v4_init_sock
ttcp-t: socket
[  133.290673] -> dccp_setsockopt: sk=cf54c3a0
[  133.290994] do_dccp_setsockopt: sockopt(PACKET_SIZE) is deprecated:
fix your app
[  133.291432] <- dccp_setsockopt
[  133.296426] -> dccp_setsockopt: sk=cf54c3a0
[  133.296739] <- dccp_setsockopt
[  133.297325] -> dccp_v4_connect: sk=cf54c3a0
[  133.298607] -> dccp_set_state: sk=cf54c3a0
[  133.298920] <- dccp_set_state
[  133.302385] -> dccp_connect: sk=cf54c3a0
[  133.302733] -> dccp_sync_mss: sk=cf54c3a0
[  133.303017] <- dccp_sync_mss
[  133.303362] -> dccp_skb_entail: sk=cf54c3a0
[  133.303657] <- dccp_skb_entail
[  133.303995] -> dccp_transmit_skb: sk=cf54c3a0
[  133.304424] -> dccp_insert_options: sk=cf54c3a0
[  133.304952] <- dccp_insert_options
[  133.305285] -> dccp_v4_send_check: sk=cf54c3a0
[  133.305777] <- dccp_v4_send_check
[  133.306571] -> dccp_write_space: sk=cf54c3a0
[  133.306885] <- dccp_write_space
[  133.312335] -> dccp_v4_do_rcv: sk=cf54c040
[  133.312783] -> dccp_rcv_state_process: sk=cf54c040
[  133.313134] -> dccp_v4_conn_request: sk=cf54c040
[  133.313658] -> dccp_parse_options: sk=cf54c040
[  133.314100] -> dccp_feat_change_recv: sk=cf54c040
[  133.314491] -> dccp_feat_update: sk=cf54c040
[  133.314803] <- dccp_feat_update
[  133.315049] <- dccp_feat_change_recv
[  133.318120] -> dccp_feat_change_recv: sk=cf54c040
[  133.318595] -> dccp_feat_update: sk=cf54c040
[  133.318885] <- dccp_feat_update
[  133.319113] <- dccp_feat_change_recv
[  133.319352] -> dccp_feat_change_recv: sk=cf54c040
[  133.319678] -> dccp_feat_update: sk=cf54c040
[  133.320012] <- dccp_feat_update
[  133.320214] <- dccp_feat_change_recv
[  133.320456] <- dccp_parse_options
[  133.320772] -> dccp_v4_send_response: sk=cf54c040
[  133.321197] -> dccp_make_response: sk=cf54c040
[  133.324408] -> dccp_insert_options: sk=cf54c040
[  133.324945] <- dccp_insert_options
[  133.325289] <- dccp_make_response
[  133.325708] -> dccp_write_space: sk=cf54c040
[  133.326039] <- dccp_write_space
[  133.326559] <- dccp_v4_send_response
[  133.326882] <- dccp_v4_conn_request
[  133.327164] <- dccp_rcv_state_process
[  133.327409] <- dccp_v4_do_rcv
[  133.327887] <- dccp_transmit_skb
[  133.328140] <- dccp_connect
[  133.328600] <- dccp_v4_connect
[  133.328891] -> dccp_v4_do_rcv: sk=cf54c3a0
[  133.329466] -> dccp_rcv_state_process: sk=cf54c3a0
[  133.329838] -> dccp_write_space: sk=cf54c3a0
[  133.330110] <- dccp_write_space
[  133.330383] -> dccp_parse_options: sk=cf54c3a0
[  133.330690] -> dccp_feat_change_recv: sk=cf54c3a0
[  133.332436] -> dccp_feat_update: sk=cf54c3a0
[  133.332711] <- dccp_feat_update
[  133.332914] <- dccp_feat_change_recv
[  133.333180] -> dccp_feat_confirm_recv: sk=cf54c3a0
[  133.333570] -> dccp_feat_update: sk=cf54c3a0
[  133.333837] <- dccp_feat_update
[  133.334485] <- dccp_feat_confirm_recv
[  133.334739] -> dccp_feat_confirm_recv: sk=cf54c3a0
[  133.335069] -> dccp_feat_update: sk=cf54c3a0
[  133.335336] <- dccp_feat_update
[  133.335535] <- dccp_feat_confirm_recv
[  133.335873] -> dccp_feat_confirm_recv: sk=cf54c3a0
[  133.336179] -> dccp_feat_update: sk=cf54c3a0
[  133.336442] <- dccp_feat_update
[  133.336639] <- dccp_feat_confirm_recv
[  133.336866] <- dccp_parse_options
[  133.337304] -> dccp_sync_mss: sk=cf54c3a0
[  133.337563] <- dccp_sync_mss
[  133.337767] -> dccp_set_state: sk=cf54c3a0
[  133.338028] <- dccp_set_state
[  133.338318] -> dccp_send_ack: sk=cf54c3a0
[  133.338638] -> dccp_transmit_skb: sk=cf54c3a0
[  133.374588] -> dccp_insert_options: sk=cf54c3a0
[  133.374971] -> dccp_insert_option_ackvec: sk=cf54c3a0
[  133.375396] -> dccp_insert_option_elapsed_time: sk=cf54c3a0
[  133.375791] <- dccp_insert_option_elapsed_time
[  133.376248] <- dccp_insert_option_ackvec
[  133.376580] <- dccp_insert_options
[  133.376836] -> dccp_v4_send_check: sk=cf54c3a0
[  133.377127] <- dccp_v4_send_check
[  133.377391] -> dccp_write_space: sk=cf54c3a0
[  133.377659] <- dccp_write_space
[  133.377870] <- dccp_transmit_skb
[  133.378120] <- dccp_send_ack
[  133.378440] <- dccp_rcv_state_process
[  133.378658] <- dccp_v4_do_rcv
[  133.378976] -> dccp_v4_do_rcv: sk=cf54c040
[  133.379286] -> dccp_check_req: sk=cf54c040
[  133.379602] -> dccp_v4_request_recv_sock: sk=cf54c040
[  133.380017] -> dccp_create_openreq_child: sk=cf54c040
[  133.380526] -> dccp_feat_clone: oldsk=cf54c040
[  133.380788] -> dccp_feat_clone: newsk=cf54d7e0
[  133.381135] <- dccp_feat_clone
[  133.381431] -> ccid_hc_rx_new: sk=cf54d7e0
[  133.381685] -> ccid_new: sk=cf54d7e0
[  133.381905] <- ccid_new
[  133.382056] <- ccid_hc_rx_new
[  133.382254] -> ccid_hc_tx_new: sk=cf54d7e0
[  133.382506] -> ccid_new: sk=cf54d7e0
[  133.382912] <- ccid_new
[  133.383069] <- ccid_hc_tx_new
[  133.383367] -> dccp_init_xmit_timers: sk=cf54d7e0
[  133.383644] <- dccp_init_xmit_timers
[  133.383866] <- dccp_create_openreq_child
[  133.384160] -> dccp_sync_mss: sk=cf54d7e0
[  133.384475] <- dccp_sync_mss
[  133.384701] <- dccp_v4_request_recv_sock
[  133.385012] <- dccp_check_req
[  133.385228] -> dccp_child_process: parent=cf54c040
[  133.385503] -> dccp_child_process: child=cf54d7e0
[  133.385817] -> dccp_rcv_state_process: sk=cf54d7e0
[  133.386424] -> dccp_check_seqno: sk=cf54d7e0
[  133.386839] <- dccp_check_seqno
[  133.387055] -> dccp_parse_options: sk=cf54d7e0
[  133.387351] -> dccp_feat_confirm_recv: sk=cf54d7e0
[  133.387797] -> dccp_feat_update: sk=cf54d7e0
[  133.388052] <- dccp_feat_update
[  133.388251] <- dccp_feat_confirm_recv
[  133.388504] -> dccp_ackvec_parse: sk=cf54d7e0
[  133.388805] <- dccp_ackvec_parse
[  133.389043] <- dccp_parse_options
[  133.402158] -> dccp_event_ack_recv: sk=cf54d7e0
[  133.402524] -> dccp_ackvec_check_rcv_ackno: sk=cf54d7e0
[  133.402873] <- dccp_ackvec_check_rcv_ackno
[  133.403121] <- dccp_event_ack_recv
[  133.403515] -> dccp_set_state: sk=cf54d7e0
[  133.403777] <- dccp_set_state
[  133.403996] <- dccp_rcv_state_process
[  133.404264] <- dccp_child_process
[  133.404471] <- dccp_v4_do_rcv
ttcp-r: accept from localhost.ghostprotocols.net
[  133.440047] -> dccp_recvmsg: sk=cf54d7e0
ttcp-t: connect
[  133.445579] -> dccp_sendmsg: sk=cf54c3a0
[  133.446623] -> dccp_write_xmit: sk=cf54c3a0
[  133.447057] -> dccp_transmit_skb: sk=cf54c3a0
[  133.447405] -> dccp_insert_options: sk=cf54c3a0
[  133.447758] -> dccp_insert_option_ackvec: sk=cf54c3a0
[  133.448105] -> dccp_insert_option_elapsed_time: sk=cf54c3a0
[  133.448470] <- dccp_insert_option_elapsed_time
[  133.448788] <- dccp_insert_option_ackvec
[  133.449075] <- dccp_insert_options
[  133.449322] -> dccp_v4_send_check: sk=cf54c3a0
[  133.449653] <- dccp_v4_send_check
[  133.449954] -> dccp_write_space: sk=cf54c3a0
[  133.450226] <- dccp_write_space
[  133.450698] -> dccp_v4_do_rcv: sk=cf54d7e0
[  133.450991] -> dccp_rcv_established: sk=cf54d7e0
[  133.451314] -> dccp_check_seqno: sk=cf54d7e0
[  133.451607] <- dccp_check_seqno
[  133.451829] -> dccp_parse_options: sk=cf54d7e0
[  133.454134] -> dccp_ackvec_parse: sk=cf54d7e0
[  133.454421] <- dccp_ackvec_parse
[  133.454677] <- dccp_parse_options
[  133.454918] -> dccp_event_ack_recv: sk=cf54d7e0
[  133.455282] -> dccp_ackvec_check_rcv_ackno: sk=cf54d7e0
[  133.455605] <- dccp_ackvec_check_rcv_ackno
[  133.455857] <- dccp_event_ack_recv
[  133.456183] -> dccp_send_ack: sk=cf54d7e0
[  133.456474] -> dccp_transmit_skb: sk=cf54d7e0
[  133.456805] -> dccp_insert_options: sk=cf54d7e0
[  133.457103] -> dccp_insert_option_ackvec: sk=cf54d7e0
[  133.457432] -> dccp_insert_option_elapsed_time: sk=cf54d7e0
[  133.457772] <- dccp_insert_option_elapsed_time
[  133.458049] <- dccp_insert_option_ackvec
[  133.458304] <- dccp_insert_options
[  133.483785] -> dccp_v4_send_check: sk=cf54d7e0
[  133.484096] <- dccp_v4_send_check
[  133.484487] <- dccp_send_ack
[  133.484706] -> __dccp_rcv_established: sk=cf54d7e0
[  133.485151] <- __dccp_rcv_established
[  133.485375] <- dccp_rcv_established
[  133.485591] <- dccp_v4_do_rcv
[  133.485914] <- dccp_transmit_skb
[  133.486220] <- dccp_write_xmit
[  133.486435] -> dccp_v4_do_rcv: sk=cf54c3a0
[  133.486890] -> dccp_rcv_state_process: sk=cf54c3a0
[  133.487184] -> dccp_check_seqno: sk=cf54c3a0
[  133.487444] <- dccp_check_seqno
[  133.487648] -> dccp_parse_options: sk=cf54c3a0
[  133.487928] -> dccp_ackvec_parse: sk=cf54c3a0
[  133.488360] <- dccp_ackvec_parse
[  133.488559] <- dccp_parse_options
[  133.488775] -> dccp_event_ack_recv: sk=cf54c3a0
[  133.489051] -> dccp_ackvec_check_rcv_ackno: sk=cf54c3a0
[  133.489352] <- dccp_ackvec_check_rcv_ackno
[  133.489587] <- dccp_event_ack_recv
[  133.490279] -> dccp_set_state: sk=cf54c3a0
[  133.490531] <- dccp_set_state
[  133.490768] <- dccp_rcv_state_process
[  133.490984] <- dccp_v4_do_rcv
[  133.491186] <- dccp_sendmsg
[  133.491874] <- dccp_recvmsg
[  133.492466] -> dccp_recvmsg: sk=cf54d7e0
[  133.493110] -> dccp_sendmsg: sk=cf54c3a0
[  133.493570] -> dccp_write_xmit: sk=cf54c3a0
[  133.493884] -> dccp_transmit_skb: sk=cf54c3a0
[  133.494165] -> dccp_insert_options: sk=cf54c3a0
[  133.494452] -> dccp_insert_option_ackvec: sk=cf54c3a0
[  133.494873] -> dccp_insert_option_elapsed_time: sk=cf54c3a0
[  133.495206] <- dccp_insert_option_elapsed_time
[  133.495490] <- dccp_insert_option_ackvec
[  133.495731] <- dccp_insert_options
[  133.495961] -> dccp_v4_send_check: sk=cf54c3a0
[  133.504076] <- dccp_v4_send_check
[  133.504433] -> dccp_write_space: sk=cf54c3a0
[  133.504707] <- dccp_write_space
[  133.505091] -> dccp_v4_do_rcv: sk=cf54d7e0
[  133.505368] -> dccp_rcv_established: sk=cf54d7e0
[  133.505722] -> dccp_check_seqno: sk=cf54d7e0
[  133.506013] <- dccp_check_seqno
[  133.506228] -> dccp_parse_options: sk=cf54d7e0
[  133.506540] -> dccp_ackvec_parse: sk=cf54d7e0
[  133.506844] <- dccp_ackvec_parse
[  133.507062] <- dccp_parse_options
[  133.507345] -> dccp_event_ack_recv: sk=cf54d7e0
[  133.507642] -> dccp_ackvec_check_rcv_ackno: sk=cf54d7e0
[  133.507962] <- dccp_ackvec_check_rcv_ackno
[  133.508213] <- dccp_event_ack_recv
[  133.508469] -> dccp_send_ack: sk=cf54d7e0
[  133.508899] -> dccp_transmit_skb: sk=cf54d7e0
[  133.509194] -> dccp_insert_options: sk=cf54d7e0
[  133.509499] -> dccp_insert_option_ackvec: sk=cf54d7e0
[  133.509830] -> dccp_insert_option_elapsed_time: sk=cf54d7e0
[  133.510172] <- dccp_insert_option_elapsed_time
[  133.510576] <- dccp_insert_option_ackvec
[  133.510833] <- dccp_insert_options
[  133.511068] -> dccp_v4_send_check: sk=cf54d7e0
[  133.511350] <- dccp_v4_send_check
[  133.511649] <- dccp_send_ack
[  133.512131] -> __dccp_rcv_established: sk=cf54d7e0
[  133.512449] <- __dccp_rcv_established
[  133.512677] <- dccp_rcv_established
[  133.512895] <- dccp_v4_do_rcv
[  133.513147] <- dccp_transmit_skb
[  133.513392] <- dccp_write_xmit
[  133.513667] -> dccp_v4_do_rcv: sk=cf54c3a0
[  133.513936] -> dccp_rcv_established: sk=cf54c3a0
[  133.514230] -> dccp_check_seqno: sk=cf54c3a0
[  133.514501] <- dccp_check_seqno
[  133.514713] -> dccp_parse_options: sk=cf54c3a0
[  133.517807] -> dccp_ackvec_parse: sk=cf54c3a0
[  133.518109] <- dccp_ackvec_parse
[  133.518361] <- dccp_parse_options
[  133.518588] -> dccp_event_ack_recv: sk=cf54c3a0
[  133.518880] -> dccp_ackvec_check_rcv_ackno: sk=cf54c3a0
[  133.519209] <- dccp_ackvec_check_rcv_ackno
[  133.519459] <- dccp_event_ack_recv
[  133.527414] -> __dccp_rcv_established: sk=cf54c3a0
[  133.529040] <- __dccp_rcv_established
[  133.529324] <- dccp_rcv_established
[  133.529546] <- dccp_v4_do_rcv
[  133.529768] <- dccp_sendmsg
[  133.530262] <- dccp_recvmsg
[  133.531818] -> dccp_recvmsg: sk=cf54d7e0
[  133.532459] -> dccp_sendmsg: sk=cf54c3a0
[  133.532933] -> dccp_write_xmit: sk=cf54c3a0
[  133.533245] -> dccp_transmit_skb: sk=cf54c3a0
[  133.533541] -> dccp_insert_options: sk=cf54c3a0
[  133.533849] -> dccp_insert_option_ackvec: sk=cf54c3a0
[  133.534254] -> dccp_insert_option_elapsed_time: sk=cf54c3a0
[  133.534607] <- dccp_insert_option_elapsed_time
[  133.534908] <- dccp_insert_option_ackvec
[  133.535165] <- dccp_insert_options
[  133.535410] -> dccp_v4_send_check: sk=cf54c3a0
[  133.538449] <- dccp_v4_send_check
[  133.538850] -> dccp_write_space: sk=cf54c3a0
[  133.539126] <- dccp_write_space
[  133.539501] -> dccp_v4_do_rcv: sk=cf54d7e0
[  133.539778] -> dccp_rcv_established: sk=cf54d7e0
[  133.540077] -> dccp_check_seqno: sk=cf54d7e0
[  133.540505] <- dccp_check_seqno
[  133.540722] -> dccp_parse_options: sk=cf54d7e0
[  133.541035] -> dccp_ackvec_parse: sk=cf54d7e0
[  133.541337] <- dccp_ackvec_parse
[  133.541554] <- dccp_parse_options
[  133.542999] -> dccp_event_ack_recv: sk=cf54d7e0
[  133.543300] -> dccp_ackvec_check_rcv_ackno: sk=cf54d7e0
[  133.550094] <- dccp_ackvec_check_rcv_ackno
[  133.550359] <- dccp_event_ack_recv
[  133.550627] -> dccp_send_ack: sk=cf54d7e0
[  133.550914] -> dccp_transmit_skb: sk=cf54d7e0
[  133.553507] -> dccp_insert_options: sk=cf54d7e0
[  133.553817] -> dccp_insert_option_ackvec: sk=cf54d7e0
[  133.554148] -> dccp_insert_option_elapsed_time: sk=cf54d7e0
[  133.554587] <- dccp_insert_option_elapsed_time
[  133.554870] <- dccp_insert_option_ackvec
[  133.555128] <- dccp_insert_options
[  133.555363] -> dccp_v4_send_check: sk=cf54d7e0
[  133.555653] <- dccp_v4_send_check
[  133.556297] <- dccp_send_ack
[  133.556507] -> __dccp_rcv_established: sk=cf54d7e0
[  133.556815] <- __dccp_rcv_established
[  133.557043] <- dccp_rcv_established
[  133.557261] <- dccp_v4_do_rcv
[  133.557582] <- dccp_transmit_skb
[  133.557831] <- dccp_write_xmit
[  133.558047] -> dccp_v4_do_rcv: sk=cf54c3a0
[  133.558317] -> dccp_rcv_established: sk=cf54c3a0
[  133.558615] -> dccp_check_seqno: sk=cf54c3a0
[  133.558890] <- dccp_check_seqno
[  133.559137] -> dccp_parse_options: sk=cf54c3a0
[  133.559432] -> dccp_ackvec_parse: sk=cf54c3a0
[  133.559716] <- dccp_ackvec_parse
[  133.559932] <- dccp_parse_options
[  133.560157] -> dccp_event_ack_recv: sk=cf54c3a0
[  133.560449] -> dccp_ackvec_check_rcv_ackno: sk=cf54c3a0
[  133.560822] <- dccp_ackvec_check_rcv_ackno
[  133.561072] <- dccp_event_ack_recv
[  133.561394] -> __dccp_rcv_established: sk=cf54c3a0
[  133.561721] <- __dccp_rcv_established
[  133.561946] <- dccp_rcv_established
[  133.562162] <- dccp_v4_do_rcv
[  133.564681] <- dccp_sendmsg
[  133.565166] <- dccp_recvmsg
[  133.566173] -> dccp_recvmsg: sk=cf54d7e0
[  133.566739] -> dccp_sendmsg: sk=cf54c3a0
[  133.567248] -> dccp_write_xmit: sk=cf54c3a0
[  133.567558] -> dccp_transmit_skb: sk=cf54c3a0
[  133.567852] -> dccp_insert_options: sk=cf54c3a0
[  133.568158] -> dccp_insert_option_ackvec: sk=cf54c3a0
[  133.591368] -> dccp_insert_option_elapsed_time: sk=cf54c3a0
[  133.592838] <- dccp_insert_option_elapsed_time
[  133.593144] <- dccp_insert_option_ackvec
[  133.593389] <- dccp_insert_options
[  133.593628] -> dccp_v4_send_check: sk=cf54c3a0
[  133.594116] <- dccp_v4_send_check
[  133.594413] -> dccp_write_space: sk=cf54c3a0
[  133.594671] <- dccp_write_space
[  133.595047] -> dccp_v4_do_rcv: sk=cf54d7e0
[  133.595400] -> dccp_rcv_established: sk=cf54d7e0
[  133.595684] -> dccp_check_seqno: sk=cf54d7e0
[  133.595956] <- dccp_check_seqno
[  133.596160] -> dccp_parse_options: sk=cf54d7e0
[  133.596456] -> dccp_ackvec_parse: sk=cf54d7e0
[  133.596743] <- dccp_ackvec_parse
[  133.597018] <- dccp_parse_options
[  133.597233] -> dccp_event_ack_recv: sk=cf54d7e0
[  133.597511] -> dccp_ackvec_check_rcv_ackno: sk=cf54d7e0
[  133.597822] <- dccp_ackvec_check_rcv_ackno
[  133.598057] <- dccp_event_ack_recv
[  133.598299] -> dccp_send_ack: sk=cf54d7e0
[  133.598604] -> dccp_transmit_skb: sk=cf54d7e0
[  133.598879] -> dccp_insert_options: sk=cf54d7e0
[  133.599166] -> dccp_insert_option_ackvec: sk=cf54d7e0
[  133.599476] -> dccp_insert_option_elapsed_time: sk=cf54d7e0
[  133.599794] <- dccp_insert_option_elapsed_time
[  133.600108] <- dccp_insert_option_ackvec
[  133.600348] <- dccp_insert_options
[  133.600565] -> dccp_v4_send_check: sk=cf54d7e0
[  133.600829] <- dccp_v4_send_check
[  133.601117] <- dccp_send_ack
[  133.601310] -> __dccp_rcv_established: sk=cf54d7e0
[  133.601633] <- __dccp_rcv_established
[  133.601846] <- dccp_rcv_established
[  133.602051] <- dccp_v4_do_rcv
[  133.602279] <- dccp_transmit_skb
[  133.602512] <- dccp_write_xmit
[  133.602714] -> dccp_v4_do_rcv: sk=cf54c3a0
[  133.602967] -> dccp_rcv_established: sk=cf54c3a0
[  133.603382] -> dccp_check_seqno: sk=cf54c3a0
[  133.603640] <- dccp_check_seqno
[  133.603841] -> dccp_parse_options: sk=cf54c3a0
[  133.604115] -> dccp_ackvec_parse: sk=cf54c3a0
[  133.604374] <- dccp_ackvec_parse
[  133.604573] <- dccp_parse_options
[  133.604840] -> dccp_event_ack_recv: sk=cf54c3a0
[  133.605115] -> dccp_ackvec_check_rcv_ackno: sk=cf54c3a0
[  133.605413] <- dccp_ackvec_check_rcv_ackno
[  133.605647] <- dccp_event_ack_recv
[  133.605960] -> __dccp_rcv_established: sk=cf54c3a0
[  133.606298] <- __dccp_rcv_established
[  133.606511] <- dccp_rcv_established
[  133.606715] <- dccp_v4_do_rcv
[  133.606910] <- dccp_sendmsg
[  133.607360] <- dccp_recvmsg
[  133.615973] -> dccp_recvmsg: sk=cf54d7e0
[  133.617060] -> dccp_sendmsg: sk=cf54c3a0
[  133.617668] -> dccp_write_xmit: sk=cf54c3a0
[  133.617981] -> dccp_transmit_skb: sk=cf54c3a0
[  133.618278] -> dccp_insert_options: sk=cf54c3a0
[  133.618586] -> dccp_insert_option_ackvec: sk=cf54c3a0
[  133.619066] -> dccp_insert_option_elapsed_time: sk=cf54c3a0
[  133.619426] <- dccp_insert_option_elapsed_time
[  133.619731] <- dccp_insert_option_ackvec
[  133.619987] <- dccp_insert_options
[  133.620233] -> dccp_v4_send_check: sk=cf54c3a0
[  133.620568] <- dccp_v4_send_check
[  133.620867] -> dccp_write_space: sk=cf54c3a0
[  133.621138] <- dccp_write_space
[  133.621522] -> dccp_v4_do_rcv: sk=cf54d7e0
[  133.621797] -> dccp_rcv_established: sk=cf54d7e0
[  133.622351] -> dccp_check_seqno: sk=cf54d7e0
[  133.622645] <- dccp_check_seqno
[  133.622862] -> dccp_parse_options: sk=cf54d7e0
[  133.623173] -> dccp_ackvec_parse: sk=cf54d7e0
[  133.623474] <- dccp_ackvec_parse
[  133.623746] <- dccp_parse_options
[  133.623985] -> dccp_event_ack_recv: sk=cf54d7e0
[  133.624279] -> dccp_ackvec_check_rcv_ackno: sk=cf54d7e0
[  133.624599] <- dccp_ackvec_check_rcv_ackno
[  133.624850] <- dccp_event_ack_recv
[  133.625097] -> dccp_send_ack: sk=cf54d7e0
[  133.628169] -> dccp_transmit_skb: sk=cf54d7e0
[  133.628526] -> dccp_insert_options: sk=cf54d7e0
[  133.628830] -> dccp_insert_option_ackvec: sk=cf54d7e0
[  133.629161] -> dccp_insert_option_elapsed_time: sk=cf54d7e0
[  133.629505] <- dccp_insert_option_elapsed_time
[  133.629782] <- dccp_insert_option_ackvec
[  133.630067] <- dccp_insert_options
[  133.630300] -> dccp_v4_send_check: sk=cf54d7e0
[  133.630582] <- dccp_v4_send_check
[  133.630890] <- dccp_send_ack
[  133.631095] -> __dccp_rcv_established: sk=cf54d7e0
[  133.631402] <- __dccp_rcv_established
[  133.631758] <- dccp_rcv_established
[  133.632129] <- dccp_v4_do_rcv
[  133.632419] <- dccp_transmit_skb
[  133.632663] <- dccp_write_xmit
[  133.632877] -> dccp_v4_do_rcv: sk=cf54c3a0
[  133.644479] -> dccp_rcv_established: sk=cf54c3a0
[  133.644798] -> dccp_check_seqno: sk=cf54c3a0
[  133.645080] <- dccp_check_seqno
[  133.645298] -> dccp_parse_options: sk=cf54c3a0
[  133.645594] -> dccp_ackvec_parse: sk=cf54c3a0
[  133.645926] <- dccp_ackvec_parse
[  133.646144] <- dccp_parse_options
[  133.646368] -> dccp_event_ack_recv: sk=cf54c3a0
[  133.646661] -> dccp_ackvec_check_rcv_ackno: sk=cf54c3a0
[  133.646980] <- dccp_ackvec_check_rcv_ackno
[  133.647285] <- dccp_event_ack_recv
[  133.647626] -> __dccp_rcv_established: sk=cf54c3a0
[  133.647957] <- __dccp_rcv_established
[  133.648182] <- dccp_rcv_established
[  133.648401] <- dccp_v4_do_rcv
[  133.648640] <- dccp_sendmsg
[  133.649161] <- dccp_recvmsg
[  133.649705] -> dccp_recvmsg: sk=cf54d7e0
ttcp-t: 1280 bytes in 0.19 real seconds = 6.42 KB/sec +++
ttcp-t: 5 I/O calls, msec/call = 39.87, calls/sec = 25.68
ttcp-t: 0.0user 0.1sys 0:00real 89% 0i+0d 0maxrss 0+1pf 0+5csw
[  133.690597] -> dccp_close: sk=cf54c3a0
[  133.691906] -> dccp_set_state: sk=cf54c3a0
[  133.692281] <- dccp_set_state
[  133.692565] -> dccp_send_close: sk=cf54c3a0
[  133.693029] -> dccp_write_xmit: sk=cf54c3a0
[  133.693309] <- dccp_write_xmit
[  133.693526] -> dccp_skb_entail: sk=cf54c3a0
[  133.693797] <- dccp_skb_entail
[  133.694129] -> dccp_transmit_skb: sk=cf54c3a0
[  133.694542] -> dccp_insert_options: sk=cf54c3a0
[  133.694882] -> dccp_insert_option_ackvec: sk=cf54c3a0
[  133.695333] -> dccp_insert_option_elapsed_time: sk=cf54c3a0
[  133.695708] <- dccp_insert_option_elapsed_time
[  133.696108] <- dccp_insert_option_ackvec
[  133.696436] <- dccp_insert_options
[  133.696760] -> dccp_v4_send_check: sk=cf54c3a0
[  133.697144] <- dccp_v4_send_check
[  133.698153] -> dccp_write_space: sk=cf54c3a0
[  133.698444] <- dccp_write_space
[  133.699899] -> dccp_v4_do_rcv: sk=cf54d7e0
[  133.700192] -> dccp_rcv_established: sk=cf54d7e0
[  133.700497] -> dccp_check_seqno: sk=cf54d7e0
[  133.706459] <- dccp_check_seqno
[  133.707497] -> dccp_parse_options: sk=cf54d7e0
[  133.707940] -> dccp_ackvec_parse: sk=cf54d7e0
[  133.708365] <- dccp_ackvec_parse
[  133.708697] <- dccp_parse_options
[  133.708952] -> dccp_event_ack_recv: sk=cf54d7e0
[  133.709274] -> dccp_ackvec_check_rcv_ackno: sk=cf54d7e0
[  133.709626] <- dccp_ackvec_check_rcv_ackno
[  133.709886] <- dccp_event_ack_recv
[  133.710259] -> __dccp_rcv_established: sk=cf54d7e0
[  133.710599] -> dccp_rcv_close: sk=cf54d7e0
[  133.710916] -> dccp_send_reset: sk=cf54d7e0
[  133.711319] -> dccp_insert_options: sk=cf54d7e0
[  133.711667] -> dccp_insert_option_ackvec: sk=cf54d7e0
[  133.712031] -> dccp_insert_option_elapsed_time: sk=cf54d7e0
[  133.712372] <- dccp_insert_option_elapsed_time
[  133.712651] <- dccp_insert_option_ackvec
[  133.712916] <- dccp_insert_options
[  133.713213] -> dccp_v4_send_check: sk=cf54d7e0
[  133.713686] <- dccp_v4_send_check
[  133.714199] <- dccp_send_reset
[  133.714428] -> dccp_fin: sk=cf54d7e0
[  133.714736] <- dccp_fin
[  133.716001] -> dccp_set_state: sk=cf54d7e0
[  133.716307] -> dccp_unhash: sk=cf54d7e0
[  133.716779] <- dccp_unhash
[  133.717010] <- dccp_set_state
[  133.717216] <- dccp_rcv_close
[  133.717421] <- __dccp_rcv_established
[  133.717658] <- dccp_rcv_established
[  133.717893] <- dccp_v4_do_rcv
[  133.718404] <- dccp_transmit_skb
[  133.718617] <- dccp_send_close
[  133.718877] -> dccp_v4_do_rcv: sk=cf54c3a0
[  133.719168] -> dccp_rcv_state_process: sk=cf54c3a0
[  133.719499] -> dccp_check_seqno: sk=cf54c3a0
[  133.719819] <- dccp_check_seqno
[  133.720041] -> dccp_parse_options: sk=cf54c3a0
[  133.720358] -> dccp_ackvec_parse: sk=cf54c3a0
[  133.720642] <- dccp_ackvec_parse
[  133.720886] <- dccp_parse_options
[  133.721126] -> dccp_event_ack_recv: sk=cf54c3a0
[  133.721454] -> dccp_ackvec_check_rcv_ackno: sk=cf54c3a0
[  133.721774] <- dccp_ackvec_check_rcv_ackno
[  133.722024] <- dccp_event_ack_recv
[  133.722344] -> dccp_fin: sk=cf54c3a0
[  133.722578] <- dccp_fin
[  133.732499] -> dccp_time_wait: sk=cf54c3a0
[  133.734857] -> dccp_done: sk=cf54c3a0
[  133.735125] -> dccp_set_state: sk=cf54c3a0
[  133.735479] -> dccp_unhash: sk=cf54c3a0
[  133.735720] <- dccp_unhash
[  133.735906] <- dccp_set_state
[  133.736201] -> dccp_destroy_sock: sk=cf54c3a0
[  133.736538] -> dccp_write_space: sk=cf54c3a0
[  133.736789] <- dccp_write_space
[  133.737236] -> ccid_hc_rx_delete: sk=cf54c3a0
[  133.737549] -> ccid_delete: sk=cf54c3a0
[  133.737839] <- ccid_delete
[  133.738016] <- ccid_hc_rx_delete
[  133.738237] -> ccid_hc_tx_delete: sk=cf54c3a0
[  133.738565] -> ccid_delete: sk=cf54c3a0
[  133.738871] <- ccid_delete
[  133.739042] <- ccid_hc_tx_delete
[  133.739300] <- dccp_destroy_sock
[  133.739596] <- dccp_done
[  133.739760] <- dccp_time_wait
[  133.739955] <- dccp_rcv_state_process
[  133.740219] <- dccp_v4_do_rcv
[  133.740577] <- dccp_close
[  133.742279] <- dccp_recvmsg
ttcp-r: 1280 bytes in 0.28 real seconds = 4.53 KB/sec +++
ttcp-r: 6 I/O calls, msec/call = 47.07, calls/sec = 21.76
ttcp-r: 0.0user 0.0sys 0:00real 7% 0i+0d 0maxrss 0+1pf 6+0csw
[  133.759450] -> dccp_close: sk=cf54c040
[  133.759880] -> dccp_set_state: sk=cf54c040
[  133.760172] -> dccp_unhash: sk=cf54c040
[  133.760470] <- dccp_unhash
[  133.761359] <- dccp_set_state
[  133.761685] -> dccp_destroy_sock: sk=cf54c040
[  133.762020] -> ccid_hc_rx_delete: sk=cf54c040
[  133.762383] -> ccid_delete: sk=cf54c040
[  133.762637] <- ccid_delete
[  133.762815] <- ccid_hc_rx_delete
[  133.763034] -> ccid_hc_tx_delete: sk=cf54c040
[  133.763321] -> ccid_delete: sk=cf54c040
[  133.763576] <- ccid_delete
[  133.764814] <- ccid_hc_tx_delete
[  133.765377] <- dccp_destroy_sock
[  133.765698] <- dccp_close
[  133.766005] -> dccp_close: sk=cf54d7e0
[  133.766276] -> dccp_destroy_sock: sk=cf54d7e0
[  133.766600] -> ccid_hc_rx_delete: sk=cf54d7e0
[  133.773472] -> ccid_delete: sk=cf54d7e0
[  133.773731] <- ccid_delete
[  133.773901] <- ccid_hc_rx_delete
[  133.774112] -> ccid_hc_tx_delete: sk=cf54d7e0
[  133.774378] -> ccid_delete: sk=cf54d7e0
[  133.774616] <- ccid_delete
[  133.775097] <- ccid_hc_tx_delete
[  133.775299] <- dccp_destroy_sock
[  133.775715] <- dccp_close

[1]-  Done                    ttcp -cacme -l256 -r
[2]+  Done                    ttcp -cacme -l256 -n5 -t localhost
[root@qemu ~]#

OSTRA had this problem of involving way too many steps and requiring
rebuilding the kernel with a meta-compiler, now we can even just share
the resulting tracer modules, not even requiring that people interested
in just debugging use ctracer, just to build the "script", collect the
trace data and post-process it.

OK, next steps will be to have a better relay channel, get the
information to userspace and use ostra-cg, mostly unmodified, to get
what we had with OSTRA:

http://oops.ghostprotocols.net:81/dccp/ostra/delay_100ms_loss20percent_packet_size_256/

Just that now we don't have to build a special kernel using ostra-grep +
ostra-patch, production kernels will be OK to use this tool as long as
it has kprobes enabled, and that is the rule nowadays for all distros I
know of and also has a companion kernel-debug rpm package built with
debug info, and that is, again, the rule with at least the major
distros.

Future work also involves studying generating dtrace or systemtap
scripts, but for now I'm going the plain kprobes way.

Ah, just pushed the latest batch, should take some time to hit
www.kernel.org/git.

And yes, I haven't forgot the DCCP patch backlog :-)

- Arnaldo
-
To unsubscribe from this list: send the line "unsubscribe dccp" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel]     [IETF DCCP]     [Linux Networking]     [Git]     [Security]     [Linux Assembly]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]

  Powered by Linux