* [LTP] [PATCH] open_posix_testsuite: Don't use clock_settime() to reset a CPU-time Clock
@ 2010-10-29 2:39 Gui Jianfeng
2010-11-08 4:09 ` Gui Jianfeng
2011-02-24 6:21 ` Gui Jianfeng
0 siblings, 2 replies; 11+ messages in thread
From: Gui Jianfeng @ 2010-10-29 2:39 UTC (permalink / raw)
To: Garrett Cooper; +Cc: ltp-list
This case is trying to set CPU-time clock(ID is returned by clock_getcpuclockid()) of
a specific process by calling clock_settime(). But Linux kernel doesn't allow to reset
a CPU-time clock of a specific process. Kernel returns -EPERM. So test fails.
In "IEEE Std 1003.1, 2004 Edition", It's said as following:
If _POSIX_CPUTIME is defined, implementations shall support clock ID values obtained by
invoking clock_getcpuclockid(), which represent the CPU-time clock of a given process.
Implementations shall also support the special clockid_t value CLOCK_PROCESS_CPUTIME_ID,
which represents the CPU-time clock of the calling process when invoking one of the
clock_*() or timer_*() functions. For these clock IDs, the values returned by
clock_gettime() and specified by clock_settime() represent the amount of execution time
of the process associated with the clock. Changing the value of a CPU-time clock via
clock_settime() shall have no effect on the behavior of the sporadic server scheduling
policy.
So the behaviour when changing the value of a CPU-time clock via clock_settime() is
operating system specific.
We may change the test progress to stop using clock_settime(). Now, We just make use
of clock_gettime() instead to achieve the same test purpose.
Signed-off-by: Gui Jianfeng <guijianfeng@cn.fujitsu.com>
---
.../interfaces/clock_getcpuclockid/2-1.c | 67 ++++++++++----------
1 files changed, 33 insertions(+), 34 deletions(-)
diff --git a/testcases/open_posix_testsuite/conformance/interfaces/clock_getcpuclockid/2-1.c b/testcases/open_posix_testsuite/conformance/interfaces/clock_getcpuclockid/2-1.c
index edeb397..52240df 100644
--- a/testcases/open_posix_testsuite/conformance/interfaces/clock_getcpuclockid/2-1.c
+++ b/testcases/open_posix_testsuite/conformance/interfaces/clock_getcpuclockid/2-1.c
@@ -23,48 +23,47 @@ int main(int argc, char *argv[])
printf("_POSIX_CPUTIME unsupported\n");
return PTS_UNSUPPORTED;
#else
- unsigned long time_to_set;
clockid_t clockid_1, clockid_2;
struct timespec tp1, tp2;
+ int i;
if (sysconf(_SC_CPUTIME) == -1) {
printf("_POSIX_CPUTIME unsupported\n");
return PTS_UNSUPPORTED;
}
- if (clock_getcpuclockid(getpid(), &clockid_1) != 0) {
- printf("clock_getcpuclockid(getpid(), ) failed\n");
- return PTS_FAIL;
- }
-
- if (clock_getcpuclockid(0, &clockid_2) != 0) {
- printf("clock_getcpuclockid(0, ) failed\n");
- return PTS_FAIL;
- }
+ for (i = 0; i < 10; i++) {
+ if (clock_getcpuclockid(getpid(), &clockid_1) != 0) {
+ printf("clock_getcpuclockid(getpid(), ) failed\n");
+ return PTS_FAIL;
+ }
- /* Set clockid_1 as a random value from 1 sec to 10 sec */
- srand((unsigned long)time(NULL));
- time_to_set = rand() * 10.0 / RAND_MAX + 1;
- tp1.tv_sec = time_to_set;
- tp1.tv_nsec = 0;
- if (clock_settime(clockid_1, &tp1) != 0) {
- printf("clock_getcpuclockid() returned an invalid clockid_t: "
- "%d\n", clockid_1);
- return PTS_FAIL;
- }
- /* Get the time of clockid_2, should almost the same as clockid_1 */
- if (clock_gettime(clockid_2, &tp2) != 0) {
- printf("clock_getcpuclockid() returned an invalid clockid_t: "
- "%d\n", clockid_2);
- return PTS_FAIL;
- }
- if (tp1.tv_sec == tp2.tv_sec)
- {
- printf("Test PASSED\n");
- return PTS_PASS;
- }
- printf("Test FAILED\n");
- return PTS_FAIL;
-
+ if (clock_getcpuclockid(0, &clockid_2) != 0) {
+ printf("clock_getcpuclockid(0, ) failed\n");
+ return PTS_FAIL;
+ }
+
+ /* Get the time of clockid_1 */
+ if (clock_gettime(clockid_1, &tp1) != 0) {
+ printf("clock_getcpuclockid() returned an invalid clockid_t: "
+ "%d\n", clockid_1);
+ return PTS_FAIL;
+ }
+
+ /* Get the time of clockid_2, should almost the same as clockid_1 */
+ if (clock_gettime(clockid_2, &tp2) != 0) {
+ printf("clock_getcpuclockid() returned an invalid clockid_t: "
+ "%d\n", clockid_2);
+ return PTS_FAIL;
+ }
+
+ if (tp1.tv_sec != tp2.tv_sec) {
+ printf("Test FAILED\n");
+ return PTS_FAIL;
+ }
+ }
+
+ printf("Test PASSED\n");
+ return PTS_PASS;
#endif
}
--
1.7.0.4
------------------------------------------------------------------------------
Nokia and AT&T present the 2010 Calling All Innovators-North America contest
Create new apps & games for the Nokia N8 for consumers in U.S. and Canada
$10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing
Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store
http://p.sf.net/sfu/nokia-dev2dev
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [LTP] [PATCH] open_posix_testsuite: Don't use clock_settime() to reset a CPU-time Clock
2010-10-29 2:39 [LTP] [PATCH] open_posix_testsuite: Don't use clock_settime() to reset a CPU-time Clock Gui Jianfeng
@ 2010-11-08 4:09 ` Gui Jianfeng
2010-11-08 6:02 ` Garrett Cooper
2011-02-24 6:21 ` Gui Jianfeng
1 sibling, 1 reply; 11+ messages in thread
From: Gui Jianfeng @ 2010-11-08 4:09 UTC (permalink / raw)
To: Garrett Cooper; +Cc: ltp-list
Gui Jianfeng wrote:
> This case is trying to set CPU-time clock(ID is returned by clock_getcpuclockid()) of
> a specific process by calling clock_settime(). But Linux kernel doesn't allow to reset
> a CPU-time clock of a specific process. Kernel returns -EPERM. So test fails.
>
> In "IEEE Std 1003.1, 2004 Edition", It's said as following:
> If _POSIX_CPUTIME is defined, implementations shall support clock ID values obtained by
> invoking clock_getcpuclockid(), which represent the CPU-time clock of a given process.
> Implementations shall also support the special clockid_t value CLOCK_PROCESS_CPUTIME_ID,
> which represents the CPU-time clock of the calling process when invoking one of the
> clock_*() or timer_*() functions. For these clock IDs, the values returned by
> clock_gettime() and specified by clock_settime() represent the amount of execution time
> of the process associated with the clock. Changing the value of a CPU-time clock via
> clock_settime() shall have no effect on the behavior of the sporadic server scheduling
> policy.
>
> So the behaviour when changing the value of a CPU-time clock via clock_settime() is
> operating system specific.
>
> We may change the test progress to stop using clock_settime(). Now, We just make use
> of clock_gettime() instead to achieve the same test purpose.
>
> Signed-off-by: Gui Jianfeng <guijianfeng@cn.fujitsu.com>
Hi Garrett,
How do you think this fix?
Gui
> ---
> .../interfaces/clock_getcpuclockid/2-1.c | 67 ++++++++++----------
> 1 files changed, 33 insertions(+), 34 deletions(-)
>
> diff --git a/testcases/open_posix_testsuite/conformance/interfaces/clock_getcpuclockid/2-1.c b/testcases/open_posix_testsuite/conformance/interfaces/clock_getcpuclockid/2-1.c
> index edeb397..52240df 100644
> --- a/testcases/open_posix_testsuite/conformance/interfaces/clock_getcpuclockid/2-1.c
> +++ b/testcases/open_posix_testsuite/conformance/interfaces/clock_getcpuclockid/2-1.c
> @@ -23,48 +23,47 @@ int main(int argc, char *argv[])
> printf("_POSIX_CPUTIME unsupported\n");
> return PTS_UNSUPPORTED;
> #else
> - unsigned long time_to_set;
> clockid_t clockid_1, clockid_2;
> struct timespec tp1, tp2;
> + int i;
>
> if (sysconf(_SC_CPUTIME) == -1) {
> printf("_POSIX_CPUTIME unsupported\n");
> return PTS_UNSUPPORTED;
> }
>
> - if (clock_getcpuclockid(getpid(), &clockid_1) != 0) {
> - printf("clock_getcpuclockid(getpid(), ) failed\n");
> - return PTS_FAIL;
> - }
> -
> - if (clock_getcpuclockid(0, &clockid_2) != 0) {
> - printf("clock_getcpuclockid(0, ) failed\n");
> - return PTS_FAIL;
> - }
> + for (i = 0; i < 10; i++) {
> + if (clock_getcpuclockid(getpid(), &clockid_1) != 0) {
> + printf("clock_getcpuclockid(getpid(), ) failed\n");
> + return PTS_FAIL;
> + }
>
> - /* Set clockid_1 as a random value from 1 sec to 10 sec */
> - srand((unsigned long)time(NULL));
> - time_to_set = rand() * 10.0 / RAND_MAX + 1;
> - tp1.tv_sec = time_to_set;
> - tp1.tv_nsec = 0;
> - if (clock_settime(clockid_1, &tp1) != 0) {
> - printf("clock_getcpuclockid() returned an invalid clockid_t: "
> - "%d\n", clockid_1);
> - return PTS_FAIL;
> - }
> - /* Get the time of clockid_2, should almost the same as clockid_1 */
> - if (clock_gettime(clockid_2, &tp2) != 0) {
> - printf("clock_getcpuclockid() returned an invalid clockid_t: "
> - "%d\n", clockid_2);
> - return PTS_FAIL;
> - }
> - if (tp1.tv_sec == tp2.tv_sec)
> - {
> - printf("Test PASSED\n");
> - return PTS_PASS;
> - }
> - printf("Test FAILED\n");
> - return PTS_FAIL;
> -
> + if (clock_getcpuclockid(0, &clockid_2) != 0) {
> + printf("clock_getcpuclockid(0, ) failed\n");
> + return PTS_FAIL;
> + }
> +
> + /* Get the time of clockid_1 */
> + if (clock_gettime(clockid_1, &tp1) != 0) {
> + printf("clock_getcpuclockid() returned an invalid clockid_t: "
> + "%d\n", clockid_1);
> + return PTS_FAIL;
> + }
> +
> + /* Get the time of clockid_2, should almost the same as clockid_1 */
> + if (clock_gettime(clockid_2, &tp2) != 0) {
> + printf("clock_getcpuclockid() returned an invalid clockid_t: "
> + "%d\n", clockid_2);
> + return PTS_FAIL;
> + }
> +
> + if (tp1.tv_sec != tp2.tv_sec) {
> + printf("Test FAILED\n");
> + return PTS_FAIL;
> + }
> + }
> +
> + printf("Test PASSED\n");
> + return PTS_PASS;
> #endif
> }
------------------------------------------------------------------------------
The Next 800 Companies to Lead America's Growth: New Video Whitepaper
David G. Thomson, author of the best-selling book "Blueprint to a
Billion" shares his insights and actions to help propel your
business during the next growth cycle. Listen Now!
http://p.sf.net/sfu/SAP-dev2dev
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [LTP] [PATCH] open_posix_testsuite: Don't use clock_settime() to reset a CPU-time Clock
2010-11-08 4:09 ` Gui Jianfeng
@ 2010-11-08 6:02 ` Garrett Cooper
2010-11-08 6:20 ` Gui Jianfeng
2010-11-18 20:29 ` Cyril Hrubis
0 siblings, 2 replies; 11+ messages in thread
From: Garrett Cooper @ 2010-11-08 6:02 UTC (permalink / raw)
To: Gui Jianfeng; +Cc: ltp-list
On Sun, Nov 7, 2010 at 8:09 PM, Gui Jianfeng <guijianfeng@cn.fujitsu.com> wrote:
> Gui Jianfeng wrote:
>> This case is trying to set CPU-time clock(ID is returned by clock_getcpuclockid()) of
>> a specific process by calling clock_settime(). But Linux kernel doesn't allow to reset
>> a CPU-time clock of a specific process. Kernel returns -EPERM. So test fails.
>>
>> In "IEEE Std 1003.1, 2004 Edition", It's said as following:
>> If _POSIX_CPUTIME is defined, implementations shall support clock ID values obtained by
>> invoking clock_getcpuclockid(), which represent the CPU-time clock of a given process.
>> Implementations shall also support the special clockid_t value CLOCK_PROCESS_CPUTIME_ID,
>> which represents the CPU-time clock of the calling process when invoking one of the
>> clock_*() or timer_*() functions. For these clock IDs, the values returned by
>> clock_gettime() and specified by clock_settime() represent the amount of execution time
>> of the process associated with the clock. Changing the value of a CPU-time clock via
>> clock_settime() shall have no effect on the behavior of the sporadic server scheduling
>> policy.
>>
>> So the behaviour when changing the value of a CPU-time clock via clock_settime() is
>> operating system specific.
>>
>> We may change the test progress to stop using clock_settime(). Now, We just make use
>> of clock_gettime() instead to achieve the same test purpose.
>>
>> Signed-off-by: Gui Jianfeng <guijianfeng@cn.fujitsu.com>
>
> Hi Garrett,
>
> How do you think this fix?
The tort is the same in POSIX 2008.1. Taking out the chaff...
a. If _POSIX_CPUTIME is defined, implementations shall support clock
ID values obtained by invoking clock_getcpuclockid(), which represent
the CPU-time clock of a given process.
b. Implementations shall also support the special clockid_t value
CLOCK_PROCESS_CPUTIME_ID, which represents the CPU-time clock of the
calling process when invoking one of the clock_*() or timer_*()
functions.
c. For these clock IDs, the values returned by clock_gettime() and
specified by clock_settime() represent the amount of execution time of
the process associated with the clock.
Nowhere does it say that you can't set that clock. Try running the
test as root to see what you can do... if the test fails (even as
root), then Linux needs to be fixed to conform to POSIX.
Also, try running the other tests I just added to see whether or not
the function call fails per POSIX's requirements.
Thanks!
-Garrett
------------------------------------------------------------------------------
The Next 800 Companies to Lead America's Growth: New Video Whitepaper
David G. Thomson, author of the best-selling book "Blueprint to a
Billion" shares his insights and actions to help propel your
business during the next growth cycle. Listen Now!
http://p.sf.net/sfu/SAP-dev2dev
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [LTP] [PATCH] open_posix_testsuite: Don't use clock_settime() to reset a CPU-time Clock
2010-11-08 6:02 ` Garrett Cooper
@ 2010-11-08 6:20 ` Gui Jianfeng
2010-11-15 3:20 ` Gui Jianfeng
2010-11-18 20:29 ` Cyril Hrubis
1 sibling, 1 reply; 11+ messages in thread
From: Gui Jianfeng @ 2010-11-08 6:20 UTC (permalink / raw)
To: Garrett Cooper; +Cc: ltp-list
Garrett Cooper wrote:
> On Sun, Nov 7, 2010 at 8:09 PM, Gui Jianfeng <guijianfeng@cn.fujitsu.com> wrote:
>> Gui Jianfeng wrote:
>>> This case is trying to set CPU-time clock(ID is returned by clock_getcpuclockid()) of
>>> a specific process by calling clock_settime(). But Linux kernel doesn't allow to reset
>>> a CPU-time clock of a specific process. Kernel returns -EPERM. So test fails.
>>>
>>> In "IEEE Std 1003.1, 2004 Edition", It's said as following:
>>> If _POSIX_CPUTIME is defined, implementations shall support clock ID values obtained by
>>> invoking clock_getcpuclockid(), which represent the CPU-time clock of a given process.
>>> Implementations shall also support the special clockid_t value CLOCK_PROCESS_CPUTIME_ID,
>>> which represents the CPU-time clock of the calling process when invoking one of the
>>> clock_*() or timer_*() functions. For these clock IDs, the values returned by
>>> clock_gettime() and specified by clock_settime() represent the amount of execution time
>>> of the process associated with the clock. Changing the value of a CPU-time clock via
>>> clock_settime() shall have no effect on the behavior of the sporadic server scheduling
>>> policy.
>>>
>>> So the behaviour when changing the value of a CPU-time clock via clock_settime() is
>>> operating system specific.
>>>
>>> We may change the test progress to stop using clock_settime(). Now, We just make use
>>> of clock_gettime() instead to achieve the same test purpose.
>>>
>>> Signed-off-by: Gui Jianfeng <guijianfeng@cn.fujitsu.com>
>> Hi Garrett,
>>
>> How do you think this fix?
>
> The tort is the same in POSIX 2008.1. Taking out the chaff...
>
> a. If _POSIX_CPUTIME is defined, implementations shall support clock
> ID values obtained by invoking clock_getcpuclockid(), which represent
> the CPU-time clock of a given process.
> b. Implementations shall also support the special clockid_t value
> CLOCK_PROCESS_CPUTIME_ID, which represents the CPU-time clock of the
> calling process when invoking one of the clock_*() or timer_*()
> functions.
> c. For these clock IDs, the values returned by clock_gettime() and
> specified by clock_settime() represent the amount of execution time of
> the process associated with the clock.
>
> Nowhere does it say that you can't set that clock. Try running the
> test as root to see what you can do... if the test fails (even as
> root), then Linux needs to be fixed to conform to POSIX.
POSIX also says that:
Changing the value of a CPU-time clock via clock_settime() shall have no effect
on the behavior of the sporadic server scheduling policy.
IMHO, this means clock_settime() implementation is OS specific, is it?
So, even if Linux fails to set this clock, it's just fine. Am i missing something?
Gui
>
> Also, try running the other tests I just added to see whether or not
> the function call fails per POSIX's requirements.
>
> Thanks!
> -Garrett
>
------------------------------------------------------------------------------
The Next 800 Companies to Lead America's Growth: New Video Whitepaper
David G. Thomson, author of the best-selling book "Blueprint to a
Billion" shares his insights and actions to help propel your
business during the next growth cycle. Listen Now!
http://p.sf.net/sfu/SAP-dev2dev
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [LTP] [PATCH] open_posix_testsuite: Don't use clock_settime() to reset a CPU-time Clock
2010-11-08 6:20 ` Gui Jianfeng
@ 2010-11-15 3:20 ` Gui Jianfeng
0 siblings, 0 replies; 11+ messages in thread
From: Gui Jianfeng @ 2010-11-15 3:20 UTC (permalink / raw)
To: Garrett Cooper; +Cc: ltp-list
Gui Jianfeng wrote:
> Garrett Cooper wrote:
>> On Sun, Nov 7, 2010 at 8:09 PM, Gui Jianfeng <guijianfeng@cn.fujitsu.com> wrote:
>>> Gui Jianfeng wrote:
>>>> This case is trying to set CPU-time clock(ID is returned by clock_getcpuclockid()) of
>>>> a specific process by calling clock_settime(). But Linux kernel doesn't allow to reset
>>>> a CPU-time clock of a specific process. Kernel returns -EPERM. So test fails.
>>>>
>>>> In "IEEE Std 1003.1, 2004 Edition", It's said as following:
>>>> If _POSIX_CPUTIME is defined, implementations shall support clock ID values obtained by
>>>> invoking clock_getcpuclockid(), which represent the CPU-time clock of a given process.
>>>> Implementations shall also support the special clockid_t value CLOCK_PROCESS_CPUTIME_ID,
>>>> which represents the CPU-time clock of the calling process when invoking one of the
>>>> clock_*() or timer_*() functions. For these clock IDs, the values returned by
>>>> clock_gettime() and specified by clock_settime() represent the amount of execution time
>>>> of the process associated with the clock. Changing the value of a CPU-time clock via
>>>> clock_settime() shall have no effect on the behavior of the sporadic server scheduling
>>>> policy.
>>>>
>>>> So the behaviour when changing the value of a CPU-time clock via clock_settime() is
>>>> operating system specific.
>>>>
>>>> We may change the test progress to stop using clock_settime(). Now, We just make use
>>>> of clock_gettime() instead to achieve the same test purpose.
>>>>
>>>> Signed-off-by: Gui Jianfeng <guijianfeng@cn.fujitsu.com>
>>> Hi Garrett,
>>>
>>> How do you think this fix?
>> The tort is the same in POSIX 2008.1. Taking out the chaff...
>>
>> a. If _POSIX_CPUTIME is defined, implementations shall support clock
>> ID values obtained by invoking clock_getcpuclockid(), which represent
>> the CPU-time clock of a given process.
>> b. Implementations shall also support the special clockid_t value
>> CLOCK_PROCESS_CPUTIME_ID, which represents the CPU-time clock of the
>> calling process when invoking one of the clock_*() or timer_*()
>> functions.
>> c. For these clock IDs, the values returned by clock_gettime() and
>> specified by clock_settime() represent the amount of execution time of
>> the process associated with the clock.
>>
>> Nowhere does it say that you can't set that clock. Try running the
>> test as root to see what you can do... if the test fails (even as
>> root), then Linux needs to be fixed to conform to POSIX.
>
> POSIX also says that:
> Changing the value of a CPU-time clock via clock_settime() shall have no effect
> on the behavior of the sporadic server scheduling policy.
>
> IMHO, this means clock_settime() implementation is OS specific, is it?
> So, even if Linux fails to set this clock, it's just fine. Am i missing something?
Hi Garrett,
If you don't object, would you apply this patch?
Gui
>
> Gui
>
>> Also, try running the other tests I just added to see whether or not
>> the function call fails per POSIX's requirements.
>>
>> Thanks!
>> -Garrett
>>
>
> ------------------------------------------------------------------------------
> The Next 800 Companies to Lead America's Growth: New Video Whitepaper
> David G. Thomson, author of the best-selling book "Blueprint to a
> Billion" shares his insights and actions to help propel your
> business during the next growth cycle. Listen Now!
> http://p.sf.net/sfu/SAP-dev2dev
> _______________________________________________
> Ltp-list mailing list
> Ltp-list@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/ltp-list
>
------------------------------------------------------------------------------
Centralized Desktop Delivery: Dell and VMware Reference Architecture
Simplifying enterprise desktop deployment and management using
Dell EqualLogic storage and VMware View: A highly scalable, end-to-end
client virtualization framework. Read more!
http://p.sf.net/sfu/dell-eql-dev2dev
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [LTP] [PATCH] open_posix_testsuite: Don't use clock_settime() to reset a CPU-time Clock
2010-11-08 6:02 ` Garrett Cooper
2010-11-08 6:20 ` Gui Jianfeng
@ 2010-11-18 20:29 ` Cyril Hrubis
[not found] ` <AANLkTimz2WBPfwCBHajqzA7Uk_72MZeTJdWB0Zbkch8B@mail.gmail.com>
1 sibling, 1 reply; 11+ messages in thread
From: Cyril Hrubis @ 2010-11-18 20:29 UTC (permalink / raw)
To: Garrett Cooper; +Cc: ltp-list
Hi!
> The tort is the same in POSIX 2008.1. Taking out the chaff...
>
> a. If _POSIX_CPUTIME is defined, implementations shall support clock
> ID values obtained by invoking clock_getcpuclockid(), which represent
> the CPU-time clock of a given process.
> b. Implementations shall also support the special clockid_t value
> CLOCK_PROCESS_CPUTIME_ID, which represents the CPU-time clock of the
> calling process when invoking one of the clock_*() or timer_*()
> functions.
> c. For these clock IDs, the values returned by clock_gettime() and
> specified by clock_settime() represent the amount of execution time of
> the process associated with the clock.
>
> Nowhere does it say that you can't set that clock. Try running the
> test as root to see what you can do... if the test fails (even as
> root), then Linux needs to be fixed to conform to POSIX.
>
> Also, try running the other tests I just added to see whether or not
> the function call fails per POSIX's requirements.
>
From clock_settime POSIX documentation:
...
The effect of setting a clock via clock_settime() on armed per-process timers
associated with that clock is implementation-dependent.
The appropriate privilege to set a particular clock is implementation-dependent.
...
From man clock_settime:
...
According to POSIX.1-2001, a process with "appropriate privileges" may set the
CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID clocks using
clock_settime(). On Linux, these clocks are not settable (i.e., no process has
"appropriate privileges").
...
This is pretty creative understanding of the standart, but I couldn't
say it's wrong anyway.
--
Cyril Hrubis
chrubis@suse.cz
------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 & L3.
Spend less time writing and rewriting code and more time creating great
experiences on the web. Be a part of the beta today
http://p.sf.net/sfu/msIE9-sfdev2dev
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [LTP] [PATCH] open_posix_testsuite: Don\'t use clock_settime() to reset a CPU-time Clock
@ 2010-12-02 0:29 Mitani
0 siblings, 0 replies; 11+ messages in thread
From: Mitani @ 2010-12-02 0:29 UTC (permalink / raw)
To: guijianfeng; +Cc: ltp-list
I agree the opinion of Gui.
In my environment, the difference of clock-ID in the same way as
Gui's opinion occurs with recent git.
"clock_getcpuclockid/2-1.c" succeeded with Gui's patch.
Thank you--
-Tomonori Mitani
------------------------------------------------------------------------------
Increase Visibility of Your 3D Game App & Earn a Chance To Win $500!
Tap into the largest installed PC base & get more eyes on your game by
optimizing for Intel(R) Graphics Technology. Get started today with the
Intel(R) Software Partner Program. Five $500 cash prizes are up for grabs.
http://p.sf.net/sfu/intelisp-dev2dev
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [LTP] [PATCH] open_posix_testsuite: Don't use clock_settime() to reset a CPU-time Clock
[not found] ` <4CF4CCD7.3060009@cn.fujitsu.com>
@ 2010-12-02 12:13 ` Cyril Hrubis
2010-12-30 16:50 ` Cyril Hrubis
0 siblings, 1 reply; 11+ messages in thread
From: Cyril Hrubis @ 2010-12-02 12:13 UTC (permalink / raw)
To: Gui Jianfeng; +Cc: ltp-list
Hi!
> >>>> The tort is the same in POSIX 2008.1. Taking out the chaff...
> >>>>
> >>>> a. If _POSIX_CPUTIME is defined, implementations shall support clock
> >>>> ID values obtained by invoking clock_getcpuclockid(), which represent
> >>>> the CPU-time clock of a given process.
> >>>> b. Implementations shall also support the special clockid_t value
> >>>> CLOCK_PROCESS_CPUTIME_ID, which represents the CPU-time clock of the
> >>>> calling process when invoking one of the clock_*() or timer_*()
> >>>> functions.
> >>>> c. For these clock IDs, the values returned by clock_gettime() and
> >>>> specified by clock_settime() represent the amount of execution time of
> >>>> the process associated with the clock.
> >>>>
> >>>> Nowhere does it say that you can't set that clock. Try running the
> >>>> test as root to see what you can do... if the test fails (even as
> >>>> root), then Linux needs to be fixed to conform to POSIX.
> >>>>
> >>>> Also, try running the other tests I just added to see whether or not
> >>>> the function call fails per POSIX's requirements.
> >>>>
> >>> From clock_settime POSIX documentation:
> >>>
> >>> ...
> >>>
> >>> The effect of setting a clock via clock_settime() on armed per-process timers
> >>> associated with that clock is implementation-dependent.
> >>>
> >>> The appropriate privilege to set a particular clock is implementation-dependent.
> >>>
> >>> ...
> >>>
> >>>
> >>> From man clock_settime:
> >>>
> >>> ...
> >>>
> >>> According to POSIX.1-2001, a process with "appropriate privileges" may set the
> >>> CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID clocks using
> >>> clock_settime(). On Linux, these clocks are not settable (i.e., no process has
> >>> "appropriate privileges").
> >>>
> >>> ...
> >>>
> >>>
> >>>
> >>> This is pretty creative understanding of the standart, but I couldn't
> >>> say it's wrong anyway.
> >> I agree that privilege is multitiered and the implications of running
> >> as a particular user, whether or not SELinux is enabled, MAC allows
> >> it, etc are all bits to take into consideration.
> >>
> >> Just running the program as root seems like a simple test to run to
> >> see whether or not the testcase passes.
> >
> > FYI, I removed the clock_settime call and simplified the testcase
> > because it wasn't really buying much in the overall scheme of things
> > to make sure that the time matched on the two clock values. If
> > anything that should be tested with the clock_settime conformance
> > testcase.
>
> Hi Cooper,
>
> I have a look of the code you modified. Consider the following piece:
>
> /* Get the time of clockid_1. */
> if (clockid_1 != clockid_2) {
> printf("clock_getcpuclockid(0, ..) != "
> "clock_getcpuclockid(%d, ..): (%d != %d)\n", clockid_1,
> clockid_2);
> return PTS_FAIL;
> }
>
> IMO, you can't do such comparision, it's problematic. In this case, clockid_1
> and clockid_2 own different values, but they point to the same clock. So you
> can't modify like this.
Yes this assumption seems to be incorrect as I couldn't find in a place
in POSIX documentation which explicitly states that two obtained
clock_id that points to the same clock must be the same. On linux
calling clock_getcpuclockid() with 0 and value from getpid() returns two
different id which both points to the same clock.
--
Cyril Hrubis
chrubis@suse.cz
------------------------------------------------------------------------------
Increase Visibility of Your 3D Game App & Earn a Chance To Win $500!
Tap into the largest installed PC base & get more eyes on your game by
optimizing for Intel(R) Graphics Technology. Get started today with the
Intel(R) Software Partner Program. Five $500 cash prizes are up for grabs.
http://p.sf.net/sfu/intelisp-dev2dev
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [LTP] [PATCH] open_posix_testsuite: Don't use clock_settime() to reset a CPU-time Clock
2010-12-02 12:13 ` Cyril Hrubis
@ 2010-12-30 16:50 ` Cyril Hrubis
0 siblings, 0 replies; 11+ messages in thread
From: Cyril Hrubis @ 2010-12-30 16:50 UTC (permalink / raw)
To: Garrett Cooper; +Cc: ltp-list
Hi!
> Yes this assumption seems to be incorrect as I couldn't find in a place
> in POSIX documentation which explicitly states that two obtained
> clock_id that points to the same clock must be the same. On linux
> calling clock_getcpuclockid() with 0 and value from getpid() returns two
> different id which both points to the same clock.
Garrett ping.
--
Cyril Hrubis
chrubis@suse.cz
------------------------------------------------------------------------------
Learn how Oracle Real Application Clusters (RAC) One Node allows customers
to consolidate database storage, standardize their database environment, and,
should the need arise, upgrade to a full multi-node Oracle RAC database
without downtime or disruption
http://p.sf.net/sfu/oracle-sfdevnl
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [LTP] [PATCH] open_posix_testsuite: Don't use clock_settime() to reset a CPU-time Clock
2010-10-29 2:39 [LTP] [PATCH] open_posix_testsuite: Don't use clock_settime() to reset a CPU-time Clock Gui Jianfeng
2010-11-08 4:09 ` Gui Jianfeng
@ 2011-02-24 6:21 ` Gui Jianfeng
2011-02-25 14:50 ` Cyril Hrubis
1 sibling, 1 reply; 11+ messages in thread
From: Gui Jianfeng @ 2011-02-24 6:21 UTC (permalink / raw)
To: Garrett Cooper; +Cc: ltp-list
Hi Garrett,
This case always fails when I do the test. Would you take a look this patch,
If you don't object, can you commit this patch? Or give some comments about it.
Thanks,
Gui
Gui Jianfeng wrote:
> This case is trying to set CPU-time clock(ID is returned by clock_getcpuclockid()) of
> a specific process by calling clock_settime(). But Linux kernel doesn't allow to reset
> a CPU-time clock of a specific process. Kernel returns -EPERM. So test fails.
>
> In "IEEE Std 1003.1, 2004 Edition", It's said as following:
> If _POSIX_CPUTIME is defined, implementations shall support clock ID values obtained by
> invoking clock_getcpuclockid(), which represent the CPU-time clock of a given process.
> Implementations shall also support the special clockid_t value CLOCK_PROCESS_CPUTIME_ID,
> which represents the CPU-time clock of the calling process when invoking one of the
> clock_*() or timer_*() functions. For these clock IDs, the values returned by
> clock_gettime() and specified by clock_settime() represent the amount of execution time
> of the process associated with the clock. Changing the value of a CPU-time clock via
> clock_settime() shall have no effect on the behavior of the sporadic server scheduling
> policy.
>
> So the behaviour when changing the value of a CPU-time clock via clock_settime() is
> operating system specific.
>
> We may change the test progress to stop using clock_settime(). Now, We just make use
> of clock_gettime() instead to achieve the same test purpose.
>
> Signed-off-by: Gui Jianfeng <guijianfeng@cn.fujitsu.com>
> ---
> .../interfaces/clock_getcpuclockid/2-1.c | 67 ++++++++++----------
> 1 files changed, 33 insertions(+), 34 deletions(-)
>
> diff --git a/testcases/open_posix_testsuite/conformance/interfaces/clock_getcpuclockid/2-1.c b/testcases/open_posix_testsuite/conformance/interfaces/clock_getcpuclockid/2-1.c
> index edeb397..52240df 100644
> --- a/testcases/open_posix_testsuite/conformance/interfaces/clock_getcpuclockid/2-1.c
> +++ b/testcases/open_posix_testsuite/conformance/interfaces/clock_getcpuclockid/2-1.c
> @@ -23,48 +23,47 @@ int main(int argc, char *argv[])
> printf("_POSIX_CPUTIME unsupported\n");
> return PTS_UNSUPPORTED;
> #else
> - unsigned long time_to_set;
> clockid_t clockid_1, clockid_2;
> struct timespec tp1, tp2;
> + int i;
>
> if (sysconf(_SC_CPUTIME) == -1) {
> printf("_POSIX_CPUTIME unsupported\n");
> return PTS_UNSUPPORTED;
> }
>
> - if (clock_getcpuclockid(getpid(), &clockid_1) != 0) {
> - printf("clock_getcpuclockid(getpid(), ) failed\n");
> - return PTS_FAIL;
> - }
> -
> - if (clock_getcpuclockid(0, &clockid_2) != 0) {
> - printf("clock_getcpuclockid(0, ) failed\n");
> - return PTS_FAIL;
> - }
> + for (i = 0; i < 10; i++) {
> + if (clock_getcpuclockid(getpid(), &clockid_1) != 0) {
> + printf("clock_getcpuclockid(getpid(), ) failed\n");
> + return PTS_FAIL;
> + }
>
> - /* Set clockid_1 as a random value from 1 sec to 10 sec */
> - srand((unsigned long)time(NULL));
> - time_to_set = rand() * 10.0 / RAND_MAX + 1;
> - tp1.tv_sec = time_to_set;
> - tp1.tv_nsec = 0;
> - if (clock_settime(clockid_1, &tp1) != 0) {
> - printf("clock_getcpuclockid() returned an invalid clockid_t: "
> - "%d\n", clockid_1);
> - return PTS_FAIL;
> - }
> - /* Get the time of clockid_2, should almost the same as clockid_1 */
> - if (clock_gettime(clockid_2, &tp2) != 0) {
> - printf("clock_getcpuclockid() returned an invalid clockid_t: "
> - "%d\n", clockid_2);
> - return PTS_FAIL;
> - }
> - if (tp1.tv_sec == tp2.tv_sec)
> - {
> - printf("Test PASSED\n");
> - return PTS_PASS;
> - }
> - printf("Test FAILED\n");
> - return PTS_FAIL;
> -
> + if (clock_getcpuclockid(0, &clockid_2) != 0) {
> + printf("clock_getcpuclockid(0, ) failed\n");
> + return PTS_FAIL;
> + }
> +
> + /* Get the time of clockid_1 */
> + if (clock_gettime(clockid_1, &tp1) != 0) {
> + printf("clock_getcpuclockid() returned an invalid clockid_t: "
> + "%d\n", clockid_1);
> + return PTS_FAIL;
> + }
> +
> + /* Get the time of clockid_2, should almost the same as clockid_1 */
> + if (clock_gettime(clockid_2, &tp2) != 0) {
> + printf("clock_getcpuclockid() returned an invalid clockid_t: "
> + "%d\n", clockid_2);
> + return PTS_FAIL;
> + }
> +
> + if (tp1.tv_sec != tp2.tv_sec) {
> + printf("Test FAILED\n");
> + return PTS_FAIL;
> + }
> + }
> +
> + printf("Test PASSED\n");
> + return PTS_PASS;
> #endif
> }
------------------------------------------------------------------------------
Free Software Download: Index, Search & Analyze Logs and other IT data in
Real-Time with Splunk. Collect, index and harness all the fast moving IT data
generated by your applications, servers and devices whether physical, virtual
or in the cloud. Deliver compliance at lower cost and gain new business
insights. http://p.sf.net/sfu/splunk-dev2dev
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [LTP] [PATCH] open_posix_testsuite: Don't use clock_settime() to reset a CPU-time Clock
2011-02-24 6:21 ` Gui Jianfeng
@ 2011-02-25 14:50 ` Cyril Hrubis
0 siblings, 0 replies; 11+ messages in thread
From: Cyril Hrubis @ 2011-02-25 14:50 UTC (permalink / raw)
To: Gui Jianfeng; +Cc: ltp-list
Hi!
I've just commited a slightly different fix which:
* reports sucess if clock ids are the same
* check differencies of timers, if they arent
Garrett, could you check this version works on BSD as well?
--
Cyril Hrubis
chrubis@suse.cz
------------------------------------------------------------------------------
Free Software Download: Index, Search & Analyze Logs and other IT data in
Real-Time with Splunk. Collect, index and harness all the fast moving IT data
generated by your applications, servers and devices whether physical, virtual
or in the cloud. Deliver compliance at lower cost and gain new business
insights. http://p.sf.net/sfu/splunk-dev2dev
_______________________________________________
Ltp-list mailing list
Ltp-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ltp-list
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2011-02-25 14:30 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-10-29 2:39 [LTP] [PATCH] open_posix_testsuite: Don't use clock_settime() to reset a CPU-time Clock Gui Jianfeng
2010-11-08 4:09 ` Gui Jianfeng
2010-11-08 6:02 ` Garrett Cooper
2010-11-08 6:20 ` Gui Jianfeng
2010-11-15 3:20 ` Gui Jianfeng
2010-11-18 20:29 ` Cyril Hrubis
[not found] ` <AANLkTimz2WBPfwCBHajqzA7Uk_72MZeTJdWB0Zbkch8B@mail.gmail.com>
[not found] ` <AANLkTi=YvMBmUQLSmtq8aM0+s2-X3BmRM13fSUa6a1-1@mail.gmail.com>
[not found] ` <4CF4CCD7.3060009@cn.fujitsu.com>
2010-12-02 12:13 ` Cyril Hrubis
2010-12-30 16:50 ` Cyril Hrubis
2011-02-24 6:21 ` Gui Jianfeng
2011-02-25 14:50 ` Cyril Hrubis
-- strict thread matches above, loose matches on Subject: below --
2010-12-02 0:29 [LTP] [PATCH] open_posix_testsuite: Don\'t " Mitani
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox