Find the answer to your Linux question:
Results 1 to 4 of 4
Hello everyone , I'm a novice Linux user and would really appreciate any help on a problem I'm facing. I searched the list for something similar to the issue I'll ...
Enjoy an ad free experience by logging in. Not a member yet? Register.
  1. #1
    Just Joined!
    Join Date
    Mar 2007
    Posts
    4

    Smile profiling TCP stack


    Hello everyone ,

    I'm a novice Linux user and would really appreciate any help on a problem I'm facing. I searched the list for something similar to the issue I'll mention, but couldn't find an exact remedy.

    The Problem: I need to measure how much delay does the TCP stack induce in a networking application.

    In more detail: consider that I have a small C program using sockets to connect to a remote machine. Now I need to measure how much time does it take for the application packets to pass through the TCP stack and to the card. This will allow me to decompose performance delay into, application delay, stack delay and on-the-wire delay.

    I think one possible solution could be compiling the entire network module with gprof and then running the kernel with this stack. Using gmon.out I could perhaps get stats regarding what functions in the stack are taking how much 'relative' time .. but doing this would slow down the actual stack, because of inserted profiling statements.

    Can someone please point me to a more simple solution/project that addresses this issue?

    Thanks,
    -A

  2. #2
    Linux Newbie dilbert's Avatar
    Join Date
    Sep 2006
    Location
    Yorkshire, GB
    Posts
    237
    How about printing out the actual amount of jiffies with the function "times(NULL)"?

    Here's an example. Needs only to be made global and spread all over your system.

    #include <sys/times.h>
    #include <sys/param.h>
    long jiffies_start;
    long jiffies_end;
    jiffies_start = times(NULL);
    printf("jiffies start: %lu\n", jiffies_start);
    usleep(11000000);
    // usleep(1000000);
    // sleep(10);
    jiffies_end = times(NULL);
    printf("jiffies end: %lu\n", jiffies_end);
    printf("time elapsed in secs: %f\n", (float) (jiffies_end - jiffies_start) / HZ);
    Bus Error: Passengers dumped. Hech gap yo'q.

  3. #3
    Just Joined!
    Join Date
    Mar 2007
    Posts
    4

    Thanks

    Thanks Dilbert! The thing is, jiffies being a basic packet of kernel time, maybe of resolution 10ms.. will help me profile the app. I write. How can I measure TCP stack time with this?

    In detail, if my application takes 3 seconds to communicate from one to another, I need to know how much of the 3 sec, is spent in the app layer, TCP layer, Layer 2, Layer 1 and on-the-wire.

    Thanks.

  4. $spacer_open
    $spacer_close
  5. #4
    Linux Newbie dilbert's Avatar
    Join Date
    Sep 2006
    Location
    Yorkshire, GB
    Posts
    237
    Theoretically , you could use a global jiffies variable in those network layers, too. I haven't used this jiffies timing in the kernel, but I saw at least some drivers that do so.

    Surely, pratically that would be completely tedious if you first would have to find out where to place your jiffies printouts.

    I've never done such a measurement, therefore only those vague hints.

    Maybe you can query the output that goes to the proc file system, e.g. /proc/net/dev. But again, I have no clue if this is feasible and how to make the appropriate checking.

    Maybe you try again another Web search. The only thing I can imagine is, that you could use the proc file system or you would need to recompile the kernel after enabling debug levels or specially prepared debug points within the network code. The point is to know where the relevant switches are.
    Bus Error: Passengers dumped. Hech gap yo'q.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •