From owner-freebsd-current@FreeBSD.ORG Tue Dec 19 20:30:20 2006 Return-Path: X-Original-To: freebsd-current@freebsd.org Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id DD09916A415 for ; Tue, 19 Dec 2006 20:30:19 +0000 (UTC) (envelope-from devon.odell@gmail.com) Received: from py-out-1112.google.com (py-out-1112.google.com [64.233.166.177]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7A75A43CA4 for ; Tue, 19 Dec 2006 20:30:11 +0000 (GMT) (envelope-from devon.odell@gmail.com) Received: by py-out-1112.google.com with SMTP id f31so1045963pyh for ; Tue, 19 Dec 2006 12:30:10 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=Xk8UNwZsG/OCUdZKRUoa9OSfwg1X65ae/TqE3fgpjsVeho11khglwL5PdYYAGi/c2Bpqd9yPjRF7iS/7rIGt4x7gJciaFsZ1Gpt8tG8t/t1WbhmaAengBYboW0Ld8D0EN1G5GWHD0E0QB+ph3/WaSpieWG+hAvA0TlJhNXdQvBs= Received: by 10.35.9.15 with SMTP id m15mr10935235pyi.1166558497166; Tue, 19 Dec 2006 12:01:37 -0800 (PST) Received: by 10.108.12.19 with HTTP; Tue, 19 Dec 2006 12:01:37 -0800 (PST) Message-ID: <9ab217670612191201y47b7bb3codf979f88f56e81cc@mail.gmail.com> Date: Tue, 19 Dec 2006 15:01:37 -0500 From: "Devon H. O'Dell" To: "Garrett Cooper" In-Reply-To: <458843B8.1060704@u.washington.edu> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <790a9fff0612190915va75678at895efa0bc93ac3a1@mail.gmail.com> <458843B8.1060704@u.washington.edu> Cc: freebsd-current@freebsd.org Subject: Re: settimeofday function taking 24 - 30 minutes to complete X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 19 Dec 2006 20:30:20 -0000 2006/12/19, Garrett Cooper : > 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 > > #include > > #include > > > > #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 > -Garrett > _______________________________________________ > freebsd-current@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-current > To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org" >