Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re^7: Unexpected Timing spikes using Time::HiRes

by BrowserUk (Pope)
on Jan 21, 2010 at 02:17 UTC ( #818614=note: print w/replies, xml ) Need Help??


in reply to Re^6: Unexpected Timing spikes using Time::HiRes
in thread Unexpected Timing spikes using Time::HiRes

so whatever process was in the way held onto the CPU for 17 timeslots past what the script was expecting, right?

Make sense to me. Though it doesn't have to be a single process. It could be a mix of 2 more higher (or equal) priority tasks, that between them prevent yours getting back for 17 slots.

If you run it at standard priority and play some music or video at the same time you may see the frequency of the misses increase.

What is it that you are trying to time?


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
  • Comment on Re^7: Unexpected Timing spikes using Time::HiRes

Replies are listed 'Best First'.
Re^8: Unexpected Timing spikes using Time::HiRes
by desemondo (Hermit) on Jan 21, 2010 at 22:34 UTC
    At present, i'm using it in a pair of simple 'ping' scripts.

    Now, before you say, I should just use Net::Ping or another varient, the reason I'm rolling my own is that I need to a 'ping' tool that goes to the top of the tcp stack, and not only halfway. (I have seen many issues where a server is hung but still responds to icmp pings.) Plus, I wanted to learn a bit more about how sockets and InterProcess communication work, by making my own.

    In troubleshooting a timing issue in another application, these scripts will hopefully rule out our network and point the finger at the application (or maybe the server...).

    (OT)
    Due to this apparent timeslot priority issue, is there any way to read from a non-blocking socket without sleeping? I've found that unless I sleep inside the socket-read loop, the CPU bleeds like crazy...
      is there any way to read from a non-blocking socket without sleeping?

      Yes. (Kinda:). See select or easier, IO::Select::can_read([TIMEOUT]). can_read() will block until there is some data available to be read, or the timeout elapses (if you suppy one). In reality, it is just doing the sleep for you.

      As for timing your ping tool. I think you are being way optimistic if you are expecting to detect server errors within less than 100th of a second. That's effectively what you are saying when you are concerned about a 15ms delay.

      Even on a modern Gb/s LANs taking action on the basis of a delay of much less than 1/10th of a second would be wildly premature.


      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://818614]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (4)
As of 2020-01-21 04:52 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Notices?