Re: settimeofday function taking 24 - 30 minutes to complete
- From: Garrett Cooper <youshi10@xxxxxxxxxxxxxxxx>
- Date: Tue, 19 Dec 2006 12:29:35 -0800
On Dec 19, 2006, at 12:01 PM, Devon H. O'Dell wrote:
2006/12/19, Garrett Cooper <youshi10@xxxxxxxxxxxxxxxx>:Scot Hetzel wrote:
> While working on implementing the settimeofday function in the
> linuxolator, I was using the LTP testcase settimeofday01 to test it.
> Running this test caused the system to hang for 24-30 minutes.
>
> I then decided to rewrite the testcase so that it would run on
> FreeBSD, and it also hung the system for 24-30 minutes. What the
> settimeofday01 test was doing is to set the time to a known value (100
> sec, 100 usec) and then use gettimeofday to retrieve the current time.
> It then compared the returned value to check if it was within +/- 500
> msec.
>
> I have since reduced the testcode down to the following testcase that
> is causing the hang.
>
> Any ideals as to what could be causing this hang?
>
> Scot
>
> #include <sys/time.h>
> #include <errno.h>
> #include <unistd.h>
>
> #define VAL_SEC 100
> #define VAL_MSEC 100
>
> int main(int argc, char **argv)
> {
> struct timeval tp, tp1, save_tv;
> long return_test, errno_test;
> suseconds_t delta;
>
> #define TEST(SCALL) \
> do { \
> errno = 0; \
> return_test = SCALL; \
> errno_test = errno; \
> } while (0)
>
> /* Save the current time values */
> if ((gettimeofday(&save_tv, (struct timezone *)&tp1)) == -1) {
> printf("BROK: gettimeofday failed. errno=%d\n", errno);
> exit(1);
> } else {
> printf("INFO: Saved current time\n");
> }
>
> tp.tv_sec = VAL_SEC;
> tp.tv_usec = VAL_MSEC;
>
> /* Hang occurs here */
> TEST(settimeofday(&tp, NULL));
> if (return_test == -1) {
> printf("FAIL: Error Setting Time, errno=%d\n",
> errno_test);
> } else {
> printf("INFO: settimeofday completed sucessfully \n");
> }
>
> /* restore the original time values. */
> if ((settimeofday(&save_tv, NULL)) == -1) {
> printf("WARN: FATAL COULD NOT RESET THE CLOCK\n");
> printf("FAIL: Error Setting Time, errno=%d (%d, % d)\n",
> errno, tp.tv_sec, tp.tv_usec);
> } else {
> printf("INFO: Reset time to original value\n");
> }
>
> return(0);
> }
>
Not sure about why it takes so long to complete, but it seems as if
the system is 'hanging' because it probably is using up all of your CPU
resources in the while loop under your TEST macro. Maybe the near 100%
CPU usage is effecting kernel operations as well, i.e. slowing it down
to stone age speeds? sleep(3)/nanosleep(2) to the rescue?
The while loop in the TEST macro is a do { /* ... */ } while (0); so
it should only execute once.
--Devon
Comes back near instantly, unsuccessful as a regular user and successful as superuser under OS X. Trying linux now..
-Garrett
PS You didn't include stdio.h or stdlib.h and the compiler (gcc) complained quite a bit.
_______________________________________________
freebsd-current@xxxxxxxxxxx mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "freebsd-current-unsubscribe@xxxxxxxxxxx"
- Follow-Ups:
- Re: settimeofday function taking 24 - 30 minutes to complete
- From: Garrett Cooper
- Re: settimeofday function taking 24 - 30 minutes to complete
- References:
- settimeofday function taking 24 - 30 minutes to complete
- From: Scot Hetzel
- Re: settimeofday function taking 24 - 30 minutes to complete
- From: Garrett Cooper
- Re: settimeofday function taking 24 - 30 minutes to complete
- From: Devon H. O'Dell
- settimeofday function taking 24 - 30 minutes to complete
- Prev by Date: how to invoke a network configure dialog in install.cfg
- Next by Date: Re: settimeofday function taking 24 - 30 minutes to complete
- Previous by thread: Re: settimeofday function taking 24 - 30 minutes to complete
- Next by thread: Re: settimeofday function taking 24 - 30 minutes to complete
- Index(es):
Relevant Pages
|
|