From: Jan S. <jst...@re...> - 2012-08-21 10:36:01
|
----- Original Message ----- > From: "Kang Kai" <Kai...@wi...> > To: "Jan Stancek" <jst...@re...> > Cc: gao...@cn..., ltp...@li..., "Zhenfeng Zhao" <Zhe...@wi...> > Sent: Tuesday, 21 August, 2012 11:59:19 AM > Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault <snip> > Hi Jan, > > Thanks. > I am sorry that It doesn't work and still "segment fault". Maybe we can narrow it down by running only subset of scenarios. I would suggest trying to limit "sc" or "NSCENAR" and see which one triggers it. Another thing that looks suspicious are scenarios with altstack, there seems to be small window where more than 1 thread can use same altstack. Can you try to reproduce it without altstack scenarios? diff --git a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c b/testcases/open_posix_testsuite/conforman index 5c15e93..63b6ee7 100644 --- a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c +++ b/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c @@ -162,6 +162,11 @@ static void *test(void *arg) output("Starting test with scenario (%i): %s\n", sc, scenarii[sc].descr); #endif + if (scenarii[sc].altstack) { + sc++; + sc %= NSCENAR; + continue; + } count_ope++; Regards, Jan > > Regards, > Kai > |
From: Kang K. <Kai...@wi...> - 2012-08-22 02:29:25
|
On 2012年08月21日 18:35, Jan Stancek wrote: > > ----- Original Message ----- >> From: "Kang Kai"<Kai...@wi...> >> To: "Jan Stancek"<jst...@re...> >> Cc: gao...@cn..., ltp...@li..., "Zhenfeng Zhao"<Zhe...@wi...> >> Sent: Tuesday, 21 August, 2012 11:59:19 AM >> Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault > <snip> > >> Hi Jan, >> >> Thanks. >> I am sorry that It doesn't work and still "segment fault". > Maybe we can narrow it down by running only subset of scenarios. > I would suggest trying to limit "sc" or "NSCENAR" and see which > one triggers it. > > Another thing that looks suspicious are scenarios with altstack, there seems > to be small window where more than 1 thread can use same altstack. > Can you try to reproduce it without altstack scenarios? > > diff --git a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c b/testcases/open_posix_testsuite/conforman > index 5c15e93..63b6ee7 100644 > --- a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c > +++ b/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c > @@ -162,6 +162,11 @@ static void *test(void *arg) > output("Starting test with scenario (%i): %s\n", > sc, scenarii[sc].descr); > #endif Hi Jan, > + if (scenarii[sc].altstack) { > + sc++; > + sc %= NSCENAR; > + continue; > + } > It fails with another error randomly, and output is: [09:45:16]System abilities: [09:45:16] TSA: 200809 [09:45:16] TSS: 200809 [09:45:16] TPS: 200809 [09:45:16] pagesize: 4096 [09:45:16] min stack size: 16384 [09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails [09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails [09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails [09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails [09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails [09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails [09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails [09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails [09:45:16]WARNING: The TPS option is claimed to be supported but setscope fails [09:45:16]All 33 thread attribute objects were initialized [09:45:18]Test ../../../conformance/interfaces/pthread_detach/4-3.c unresolved: got 12 (Cannot allocate memory) on line 179 (Failed to create this thread) Regards, Kai > count_ope++; > > > Regards, > Jan > >> Regards, >> Kai >> > |
From: Jan S. <jst...@re...> - 2012-08-22 07:06:28
|
----- Original Message ----- > From: "Kang Kai" <Kai...@wi...> > To: "Jan Stancek" <jst...@re...> > Cc: gao...@cn..., ltp...@li..., "Zhenfeng Zhao" <Zhe...@wi...> > Sent: Wednesday, 22 August, 2012 4:29:25 AM > Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault > > On 2012年08月21日 18:35, Jan Stancek wrote: > > > > ----- Original Message ----- > >> From: "Kang Kai"<Kai...@wi...> > >> To: "Jan Stancek"<jst...@re...> > >> Cc: gao...@cn..., ltp...@li..., > >> "Zhenfeng Zhao"<Zhe...@wi...> > >> Sent: Tuesday, 21 August, 2012 11:59:19 AM > >> Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for > >> segment fault > > <snip> > > > >> Hi Jan, > >> > >> Thanks. > >> I am sorry that It doesn't work and still "segment fault". > > Maybe we can narrow it down by running only subset of scenarios. > > I would suggest trying to limit "sc" or "NSCENAR" and see which > > one triggers it. > > > > Another thing that looks suspicious are scenarios with altstack, > > there seems > > to be small window where more than 1 thread can use same altstack. > > Can you try to reproduce it without altstack scenarios? > > > > diff --git > > a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c > > b/testcases/open_posix_testsuite/conforman > > index 5c15e93..63b6ee7 100644 > > --- > > a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c > > +++ > > b/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c > > @@ -162,6 +162,11 @@ static void *test(void *arg) > > output("Starting test with scenario (%i): %s\n", > > sc, scenarii[sc].descr); > > #endif > > Hi Jan, > > > + if (scenarii[sc].altstack) { > > + sc++; > > + sc %= NSCENAR; > > + continue; > > + } > > > > It fails with another error randomly, and output is: > > [09:45:16]System abilities: > [09:45:16] TSA: 200809 > [09:45:16] TSS: 200809 > [09:45:16] TPS: 200809 > [09:45:16] pagesize: 4096 > [09:45:16] min stack size: 16384 > [09:45:16]WARNING: The TPS option is claimed to be supported but > setscope fails > [09:45:16]WARNING: The TPS option is claimed to be supported but > setscope fails > [09:45:16]WARNING: The TPS option is claimed to be supported but > setscope fails > [09:45:16]WARNING: The TPS option is claimed to be supported but > setscope fails > [09:45:16]WARNING: The TPS option is claimed to be supported but > setscope fails > [09:45:16]WARNING: The TPS option is claimed to be supported but > setscope fails > [09:45:16]WARNING: The TPS option is claimed to be supported but > setscope fails > [09:45:16]WARNING: The TPS option is claimed to be supported but > setscope fails > [09:45:16]WARNING: The TPS option is claimed to be supported but > setscope fails > [09:45:16]All 33 thread attribute objects were initialized > > [09:45:18]Test ../../../conformance/interfaces/pthread_detach/4-3.c > unresolved: got 12 (Cannot allocate memory) on line 179 (Failed to > create this thread) Is the above output from mips or x86_64? Are you running it as root user? Regards, Jan > > > Regards, > Kai > > > count_ope++; > > > > > > Regards, > > Jan > > > >> Regards, > >> Kai > >> > > > > |
From: Kang K. <Kai...@wi...> - 2012-08-22 08:29:02
|
On 2012年08月22日 15:06, Jan Stancek wrote: > > ----- Original Message ----- >> From: "Kang Kai"<Kai...@wi...> >> To: "Jan Stancek"<jst...@re...> >> Cc: gao...@cn..., ltp...@li..., "Zhenfeng Zhao"<Zhe...@wi...> >> Sent: Wednesday, 22 August, 2012 4:29:25 AM >> Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault >> >> On 2012年08月21日 18:35, Jan Stancek wrote: >>> ----- Original Message ----- >>>> From: "Kang Kai"<Kai...@wi...> >>>> To: "Jan Stancek"<jst...@re...> >>>> Cc: gao...@cn..., ltp...@li..., >>>> "Zhenfeng Zhao"<Zhe...@wi...> >>>> Sent: Tuesday, 21 August, 2012 11:59:19 AM >>>> Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for >>>> segment fault >>> <snip> >>> >>>> Hi Jan, >>>> >>>> Thanks. >>>> I am sorry that It doesn't work and still "segment fault". >>> Maybe we can narrow it down by running only subset of scenarios. >>> I would suggest trying to limit "sc" or "NSCENAR" and see which >>> one triggers it. >>> >>> Another thing that looks suspicious are scenarios with altstack, >>> there seems >>> to be small window where more than 1 thread can use same altstack. >>> Can you try to reproduce it without altstack scenarios? >>> >>> diff --git >>> a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c >>> b/testcases/open_posix_testsuite/conforman >>> index 5c15e93..63b6ee7 100644 >>> --- >>> a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c >>> +++ >>> b/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c >>> @@ -162,6 +162,11 @@ static void *test(void *arg) >>> output("Starting test with scenario (%i): %s\n", >>> sc, scenarii[sc].descr); >>> #endif >> Hi Jan, >> >>> + if (scenarii[sc].altstack) { >>> + sc++; >>> + sc %= NSCENAR; >>> + continue; >>> + } >>> >> It fails with another error randomly, and output is: >> >> [09:45:16]System abilities: >> [09:45:16] TSA: 200809 >> [09:45:16] TSS: 200809 >> [09:45:16] TPS: 200809 >> [09:45:16] pagesize: 4096 >> [09:45:16] min stack size: 16384 >> [09:45:16]WARNING: The TPS option is claimed to be supported but >> setscope fails >> [09:45:16]WARNING: The TPS option is claimed to be supported but >> setscope fails >> [09:45:16]WARNING: The TPS option is claimed to be supported but >> setscope fails >> [09:45:16]WARNING: The TPS option is claimed to be supported but >> setscope fails >> [09:45:16]WARNING: The TPS option is claimed to be supported but >> setscope fails >> [09:45:16]WARNING: The TPS option is claimed to be supported but >> setscope fails >> [09:45:16]WARNING: The TPS option is claimed to be supported but >> setscope fails >> [09:45:16]WARNING: The TPS option is claimed to be supported but >> setscope fails >> [09:45:16]WARNING: The TPS option is claimed to be supported but >> setscope fails >> [09:45:16]All 33 thread attribute objects were initialized >> >> [09:45:18]Test ../../../conformance/interfaces/pthread_detach/4-3.c >> unresolved: got 12 (Cannot allocate memory) on line 179 (Failed to >> create this thread) Hi Jan, > Is the above output from mips or x86_64? > Are you running it as root user? This was tested on x86_64 with unprivileged user. I retest it with root and test passes. It passes on routerstation(mips) with your patch too. So it looks like a race condition issue about stack attribute between threads, right? Thanks a lot. Kai > > Regards, > Jan > >> >> Regards, >> Kai >> >>> count_ope++; >>> >>> >>> Regards, >>> Jan >>> >>>> Regards, >>>> Kai >>>> >> |
From: Jan S. <jst...@re...> - 2012-08-22 08:59:13
|
----- Original Message ----- > From: "Kang Kai" <Kai...@wi...> > To: "Jan Stancek" <jst...@re...> > Cc: gao...@cn..., ltp...@li..., "Zhenfeng Zhao" <Zhe...@wi...> > Sent: Wednesday, 22 August, 2012 10:28:59 AM > Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault > Hi Jan, > > > Is the above output from mips or x86_64? > > Are you running it as root user? > > This was tested on x86_64 with unprivileged user. I retest it with > root > and test passes. Your unprivileged user is hitting some resource limit, I'd be interested to see how many threads are actually running at the same time. > It passes on routerstation(mips) with your patch too. > So it looks like a race condition issue about stack attribute between > threads, right? I think so. We can try different way of signalling when threaded() is done and try it again with all scenarios. Regards, Jan > > Thanks a lot. > Kai > |
From: Jan S. <jst...@re...> - 2012-08-22 14:20:36
|
On 08/22/2012 10:58 AM, Jan Stancek wrote: > > > ----- Original Message ----- >> From: "Kang Kai" <Kai...@wi...> >> To: "Jan Stancek" <jst...@re...> >> Cc: gao...@cn..., ltp...@li..., "Zhenfeng Zhao" <Zhe...@wi...> >> Sent: Wednesday, 22 August, 2012 10:28:59 AM >> Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault > >> Hi Jan, >> >>> Is the above output from mips or x86_64? >>> Are you running it as root user? >> >> This was tested on x86_64 with unprivileged user. I retest it with >> root >> and test passes. > > Your unprivileged user is hitting some resource limit, I'd be interested > to see how many threads are actually running at the same time. > >> It passes on routerstation(mips) with your patch too. >> So it looks like a race condition issue about stack attribute between >> threads, right? > > I think so. We can try different way of signalling when threaded() is done > and try it again with all scenarios. I think this testcase is broken in more than 1 way. At least on my setup, I don't see a single pthread_detach() while signals are firing - which is exactly goal of this test. With following change: diff --git a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c b/testcases/open_posix_testsuite/conforman index dfa6e19..48e1343 100644 --- a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c +++ b/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c @@ -277,6 +276,7 @@ int main(int argc, char *argv[]) do_it1 = 0; } while (do_it1); + output(" %d thread detached while signals were firing.\n", count_ope); sleep(1); do { I get: [16:11:23] 1 thread detached while signals are firing. [16:11:24]Test executed successfully. [16:11:24] 77865 thread detached. and that reported "1" is how many threads attempted to call pthread_detach, not how many actually succeeded. Signals are firing so frequently that threaded() can't progress at all. Regards, Jan |
From: Kang K. <Kai...@wi...> - 2012-08-23 06:21:48
|
On 2012年08月22日 22:20, Jan Stancek wrote: > On 08/22/2012 10:58 AM, Jan Stancek wrote: >> >> ----- Original Message ----- >>> From: "Kang Kai"<Kai...@wi...> >>> To: "Jan Stancek"<jst...@re...> >>> Cc: gao...@cn..., ltp...@li..., "Zhenfeng Zhao"<Zhe...@wi...> >>> Sent: Wednesday, 22 August, 2012 10:28:59 AM >>> Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault >>> Hi Jan, >>> >>>> Is the above output from mips or x86_64? >>>> Are you running it as root user? >>> This was tested on x86_64 with unprivileged user. I retest it with >>> root >>> and test passes. >> Your unprivileged user is hitting some resource limit, I'd be interested >> to see how many threads are actually running at the same time. >> >>> It passes on routerstation(mips) with your patch too. >>> So it looks like a race condition issue about stack attribute between >>> threads, right? >> I think so. We can try different way of signalling when threaded() is done >> and try it again with all scenarios. > I think this testcase is broken in more than 1 way. At least on my setup, I don't see > a single pthread_detach() while signals are firing - which is exactly goal of this test. > > With following change: > > diff --git a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c b/testcases/open_posix_testsuite/conforman > index dfa6e19..48e1343 100644 > --- a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c > +++ b/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c > @@ -277,6 +276,7 @@ int main(int argc, char *argv[]) > do_it1 = 0; > } while (do_it1); > > + output(" %d thread detached while signals were firing.\n", count_ope); > sleep(1); > > do { > > I get: > [16:11:23] 1 thread detached while signals are firing. > [16:11:24]Test executed successfully. > [16:11:24] 77865 thread detached. > > and that reported "1" is how many threads attempted to call pthread_detach, not how many actually > succeeded. Signals are firing so frequently that threaded() can't progress at all. Then how do we fix this case? sync sending the signals with pthread_detach? Wanlong, any comments? Thanks, Kai > > Regards, > Jan > |
From: Jan S. <jst...@re...> - 2012-08-23 07:09:18
|
----- Original Message ----- > From: "Kang Kai" <Kai...@wi...> > To: "Jan Stancek" <jst...@re...>, gao...@cn... > Cc: ltp...@li..., "Zhenfeng Zhao" <Zhe...@wi...> > Sent: Thursday, 23 August, 2012 8:21:43 AM > Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault > > On 2012年08月22日 22:20, Jan Stancek wrote: > > On 08/22/2012 10:58 AM, Jan Stancek wrote: > >> > >> ----- Original Message ----- > >>> From: "Kang Kai"<Kai...@wi...> > >>> To: "Jan Stancek"<jst...@re...> > >>> Cc: gao...@cn..., ltp...@li..., > >>> "Zhenfeng Zhao"<Zhe...@wi...> > >>> Sent: Wednesday, 22 August, 2012 10:28:59 AM > >>> Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for > >>> segment fault > >>> Hi Jan, > >>> > >>>> Is the above output from mips or x86_64? > >>>> Are you running it as root user? > >>> This was tested on x86_64 with unprivileged user. I retest it > >>> with > >>> root > >>> and test passes. > >> Your unprivileged user is hitting some resource limit, I'd be > >> interested > >> to see how many threads are actually running at the same time. > >> > >>> It passes on routerstation(mips) with your patch too. > >>> So it looks like a race condition issue about stack attribute > >>> between > >>> threads, right? > >> I think so. We can try different way of signalling when threaded() > >> is done > >> and try it again with all scenarios. > > I think this testcase is broken in more than 1 way. At least on my > > setup, I don't see > > a single pthread_detach() while signals are firing - which is > > exactly goal of this test. > > > > With following change: > > > > diff --git > > a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c > > b/testcases/open_posix_testsuite/conforman > > index dfa6e19..48e1343 100644 > > --- > > a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c > > +++ > > b/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c > > @@ -277,6 +276,7 @@ int main(int argc, char *argv[]) > > do_it1 = 0; > > } while (do_it1); > > > > + output(" %d thread detached while signals were firing.\n", > > count_ope); > > sleep(1); > > > > do { > > > > I get: > > [16:11:23] 1 thread detached while signals are firing. > > [16:11:24]Test executed successfully. > > [16:11:24] 77865 thread detached. > > > > and that reported "1" is how many threads attempted to call > > pthread_detach, not how many actually > > succeeded. Signals are firing so frequently that threaded() can't > > progress at all. > Then how do we fix this case? sync sending the signals with > pthread_detach? I was thinking usleep(sleep_time) that progressively increases. So it starts firing signals as quickly as it can and slows down over time. Each pthread_detach() would reset the sleep_time. As for our original issue, idea I'm playing with is: main (procA) - do_child (procB) - send_sig (thread) \ test (thread) - threaded (detached thread) - turn 'while' in test() to single 'for' loop - loop in main, fork and call do_child, wait for child to finish This way we can be sure, that we don't reuse same stack for multiple threads, and we can also be sure, there won't be more than NSCENAR threads, so unprivileged user should not run out of resources. Regards, Jan > > Wanlong, any comments? > > Thanks, > Kai > > > > > Regards, > > Jan > > > > |
From: Jan S. <jst...@re...> - 2012-08-23 11:07:41
Attachments:
4-3.c
|
On 08/23/2012 09:09 AM, Jan Stancek wrote: > > > ----- Original Message ----- >> From: "Kang Kai" <Kai...@wi...> >> To: "Jan Stancek" <jst...@re...>, gao...@cn... >> Cc: ltp...@li..., "Zhenfeng Zhao" <Zhe...@wi...> >> Sent: Thursday, 23 August, 2012 8:21:43 AM >> Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault >> >> On 2012年08月22日 22:20, Jan Stancek wrote: >>> On 08/22/2012 10:58 AM, Jan Stancek wrote: >>>> >>>> ----- Original Message ----- >>>>> From: "Kang Kai"<Kai...@wi...> >>>>> To: "Jan Stancek"<jst...@re...> >>>>> Cc: gao...@cn..., ltp...@li..., >>>>> "Zhenfeng Zhao"<Zhe...@wi...> >>>>> Sent: Wednesday, 22 August, 2012 10:28:59 AM >>>>> Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for >>>>> segment fault >>>>> Hi Jan, >>>>> >>>>>> Is the above output from mips or x86_64? >>>>>> Are you running it as root user? >>>>> This was tested on x86_64 with unprivileged user. I retest it >>>>> with >>>>> root >>>>> and test passes. >>>> Your unprivileged user is hitting some resource limit, I'd be >>>> interested >>>> to see how many threads are actually running at the same time. >>>> >>>>> It passes on routerstation(mips) with your patch too. >>>>> So it looks like a race condition issue about stack attribute >>>>> between >>>>> threads, right? >>>> I think so. We can try different way of signalling when threaded() >>>> is done >>>> and try it again with all scenarios. >>> I think this testcase is broken in more than 1 way. At least on my >>> setup, I don't see >>> a single pthread_detach() while signals are firing - which is >>> exactly goal of this test. >>> >>> With following change: >>> >>> diff --git >>> a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c >>> b/testcases/open_posix_testsuite/conforman >>> index dfa6e19..48e1343 100644 >>> --- >>> a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c >>> +++ >>> b/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c >>> @@ -277,6 +276,7 @@ int main(int argc, char *argv[]) >>> do_it1 = 0; >>> } while (do_it1); >>> >>> + output(" %d thread detached while signals were firing.\n", >>> count_ope); >>> sleep(1); >>> >>> do { >>> >>> I get: >>> [16:11:23] 1 thread detached while signals are firing. >>> [16:11:24]Test executed successfully. >>> [16:11:24] 77865 thread detached. >>> >>> and that reported "1" is how many threads attempted to call >>> pthread_detach, not how many actually >>> succeeded. Signals are firing so frequently that threaded() can't >>> progress at all. > >> Then how do we fix this case? sync sending the signals with >> pthread_detach? > > I was thinking usleep(sleep_time) that progressively increases. So it > starts firing signals as quickly as it can and slows down over time. > Each pthread_detach() would reset the sleep_time. > > As for our original issue, idea I'm playing with is: > > main (procA) - do_child (procB) - send_sig (thread) > \ > test (thread) - threaded (detached thread) > > - turn 'while' in test() to single 'for' loop > - loop in main, fork and call do_child, wait for child to finish Hi, attached is v1 of the idea above. I ran it 100x times on various setups as root and unprivileged user. Kai, would you like to give a try? Regards, Jan > > This way we can be sure, that we don't reuse same stack for multiple threads, > and we can also be sure, there won't be more than NSCENAR threads, so unprivileged > user should not run out of resources. > > Regards, > Jan > >> >> Wanlong, any comments? >> >> Thanks, >> Kai >> >>> >>> Regards, >>> Jan >>> >> >> > > ------------------------------------------------------------------------------ > Live Security Virtual Conference > Exclusive live event will cover all the ways today's security and > threat landscape has changed and how IT managers can respond. Discussions > will include endpoint security, mobile security and the latest in malware > threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ > _______________________________________________ > Ltp-list mailing list > Ltp...@li... > https://lists.sourceforge.net/lists/listinfo/ltp-list |
From: Kang K. <Kai...@wi...> - 2012-08-24 02:46:56
|
On 2012年08月23日 19:07, Jan Stancek wrote: > On 08/23/2012 09:09 AM, Jan Stancek wrote: >> >> ----- Original Message ----- >>> From: "Kang Kai"<Kai...@wi...> >>> To: "Jan Stancek"<jst...@re...>, gao...@cn... >>> Cc: ltp...@li..., "Zhenfeng Zhao"<Zhe...@wi...> >>> Sent: Thursday, 23 August, 2012 8:21:43 AM >>> Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault >>> >>> On 2012年08月22日 22:20, Jan Stancek wrote: >>>> On 08/22/2012 10:58 AM, Jan Stancek wrote: >>>>> ----- Original Message ----- >>>>>> From: "Kang Kai"<Kai...@wi...> >>>>>> To: "Jan Stancek"<jst...@re...> >>>>>> Cc: gao...@cn..., ltp...@li..., >>>>>> "Zhenfeng Zhao"<Zhe...@wi...> >>>>>> Sent: Wednesday, 22 August, 2012 10:28:59 AM >>>>>> Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for >>>>>> segment fault >>>>>> Hi Jan, >>>>>> >>>>>>> Is the above output from mips or x86_64? >>>>>>> Are you running it as root user? >>>>>> This was tested on x86_64 with unprivileged user. I retest it >>>>>> with >>>>>> root >>>>>> and test passes. >>>>> Your unprivileged user is hitting some resource limit, I'd be >>>>> interested >>>>> to see how many threads are actually running at the same time. >>>>> >>>>>> It passes on routerstation(mips) with your patch too. >>>>>> So it looks like a race condition issue about stack attribute >>>>>> between >>>>>> threads, right? >>>>> I think so. We can try different way of signalling when threaded() >>>>> is done >>>>> and try it again with all scenarios. >>>> I think this testcase is broken in more than 1 way. At least on my >>>> setup, I don't see >>>> a single pthread_detach() while signals are firing - which is >>>> exactly goal of this test. >>>> >>>> With following change: >>>> >>>> diff --git >>>> a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c >>>> b/testcases/open_posix_testsuite/conforman >>>> index dfa6e19..48e1343 100644 >>>> --- >>>> a/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c >>>> +++ >>>> b/testcases/open_posix_testsuite/conformance/interfaces/pthread_detach/4-3.c >>>> @@ -277,6 +276,7 @@ int main(int argc, char *argv[]) >>>> do_it1 = 0; >>>> } while (do_it1); >>>> >>>> + output(" %d thread detached while signals were firing.\n", >>>> count_ope); >>>> sleep(1); >>>> >>>> do { >>>> >>>> I get: >>>> [16:11:23] 1 thread detached while signals are firing. >>>> [16:11:24]Test executed successfully. >>>> [16:11:24] 77865 thread detached. >>>> >>>> and that reported "1" is how many threads attempted to call >>>> pthread_detach, not how many actually >>>> succeeded. Signals are firing so frequently that threaded() can't >>>> progress at all. >>> Then how do we fix this case? sync sending the signals with >>> pthread_detach? >> I was thinking usleep(sleep_time) that progressively increases. So it >> starts firing signals as quickly as it can and slows down over time. >> Each pthread_detach() would reset the sleep_time. >> >> As for our original issue, idea I'm playing with is: >> >> main (procA) - do_child (procB) - send_sig (thread) >> \ >> test (thread) - threaded (detached thread) >> >> - turn 'while' in test() to single 'for' loop >> - loop in main, fork and call do_child, wait for child to finish > Hi, > > attached is v1 of the idea above. I ran it 100x times on various > setups as root and unprivileged user. Hi Jan, Great! > Kai, would you like to give a try? I have test it on routerstation, x86_64(ubuntu11.10 & redhat 5.3) and x86(redhat 5.3) each 100+ times, and all PASS. Regards, Kai > > Regards, > Jan > >> This way we can be sure, that we don't reuse same stack for multiple threads, >> and we can also be sure, there won't be more than NSCENAR threads, so unprivileged >> user should not run out of resources. >> >> Regards, >> Jan >> >>> Wanlong, any comments? >>> >>> Thanks, >>> Kai >>> >>>> Regards, >>>> Jan >>>> >>> >> ------------------------------------------------------------------------------ >> Live Security Virtual Conference >> Exclusive live event will cover all the ways today's security and >> threat landscape has changed and how IT managers can respond. Discussions >> will include endpoint security, mobile security and the latest in malware >> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >> _______________________________________________ >> Ltp-list mailing list >> Ltp...@li... >> https://lists.sourceforge.net/lists/listinfo/ltp-list |
From: Jan S. <jst...@re...> - 2012-08-28 08:37:22
|
----- Original Message ----- > From: "Kang Kai" <Kai...@wi...> > To: "Jan Stancek" <jst...@re...> > Cc: ltp...@li..., "Zhenfeng Zhao" <Zhe...@wi...> > Sent: Friday, 24 August, 2012 4:46:58 AM > Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault > >> I was thinking usleep(sleep_time) that progressively increases. So > >> it > >> starts firing signals as quickly as it can and slows down over > >> time. > >> Each pthread_detach() would reset the sleep_time. > >> > >> As for our original issue, idea I'm playing with is: > >> > >> main (procA) - do_child (procB) - send_sig (thread) > >> \ > >> test (thread) - threaded > >> (detached thread) > >> > >> - turn 'while' in test() to single 'for' loop > >> - loop in main, fork and call do_child, wait for child to finish > > Hi, > > > > attached is v1 of the idea above. I ran it 100x times on various > > setups as root and unprivileged user. > > Hi Jan, > > Great! > > Kai, would you like to give a try? > I have test it on routerstation, x86_64(ubuntu11.10 & redhat 5.3) and > x86(redhat 5.3) each 100+ times, and all PASS. > Hi, I'm still looking at this testcase. I have been testing v1 more on different releases and arches and I'm hitting an issue on ppc64 RHEL6.3. I'm getting abort from gcc_assert. The most interesting thing is that thread, which aborts shouldn't exist, because for this scenario pthread_create returns 1 (EPERM). (gdb) bt #0 0x0000008066374e50 in raise (sig=<value optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64 #1 0x0000008066376de4 in abort () at abort.c:92 #2 0x000000806687e504 in _Unwind_SetSpColumn (context=0xfff97a0df58, outer_cfa=0xfff97a0e610, outer_ra=0x8066548904) at ../../../gcc/unwind-dw2.c:1265 #3 uw_init_context_1 (context=0xfff97a0df58, outer_cfa=0xfff97a0e610, outer_ra=0x8066548904) at ../../../gcc/unwind-dw2.c:1472 #4 0x000000806687ebe0 in _Unwind_ForcedUnwind (exc=0xfff97a0f670, stop=@0x8066560ad8: 0x8066545660 <unwind_stop>, stop_argument=0xfff97a0e880) at ../../../gcc/unwind.inc:201 #5 0x0000008066548904 in _Unwind_ForcedUnwind (exc=<value optimized out>, stop=<value optimized out>, stop_argument=<value optimized out>) at ../nptl/sysdeps/pthread/unwind-forcedunwind.c:132 #6 0x0000008066545600 in __pthread_unwind (buf=<value optimized out>) at unwind.c:130 #7 0x0000008066545bac in __do_cancel () at pthreadP.h:265 #8 __pthread_enable_asynccancel () at cancellation.c:49 #9 0x000000806653c568 in start_thread (arg=0xfff97a0f200) at pthread_create.c:289 #10 0x000000806643a32c in .__clone () from /lib64/libc-2.12.so (gdb) frame 2 #2 0x000000806687e504 in _Unwind_SetSpColumn (context=0xfff97a0df58, outer_cfa=0xfff97a0e610, outer_ra=0x8066548904) at ../../../gcc/unwind-dw2.c:1265 1265 gcc_assert (size == sizeof(_Unwind_Word)); The arg in threaded() is not used for anything, so I passed scenario number as parameter. (gdb) p/x ((struct pthread *) 0xfff97a0f200)->arg $1 = 0x12 So it's thread for scenario 0x12. This scenario tries to set explicit scheduling with max priority. When you run this as unprivileged user, pthread_create gives you EPERM. This comment is interesting, same gcc_assert(), also power7: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52839#c10 Regards, Jan |
From: Kang K. <Kai...@wi...> - 2012-08-29 08:57:34
|
On 2012年08月28日 16:37, Jan Stancek wrote: > > ----- Original Message ----- >> From: "Kang Kai"<Kai...@wi...> >> To: "Jan Stancek"<jst...@re...> >> Cc: ltp...@li..., "Zhenfeng Zhao"<Zhe...@wi...> >> Sent: Friday, 24 August, 2012 4:46:58 AM >> Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault >>>> I was thinking usleep(sleep_time) that progressively increases. So >>>> it >>>> starts firing signals as quickly as it can and slows down over >>>> time. >>>> Each pthread_detach() would reset the sleep_time. >>>> >>>> As for our original issue, idea I'm playing with is: >>>> >>>> main (procA) - do_child (procB) - send_sig (thread) >>>> \ >>>> test (thread) - threaded >>>> (detached thread) >>>> >>>> - turn 'while' in test() to single 'for' loop >>>> - loop in main, fork and call do_child, wait for child to finish >>> Hi, >>> >>> attached is v1 of the idea above. I ran it 100x times on various >>> setups as root and unprivileged user. >> Hi Jan, >> >> Great! >>> Kai, would you like to give a try? >> I have test it on routerstation, x86_64(ubuntu11.10& redhat 5.3) and >> x86(redhat 5.3) each 100+ times, and all PASS. >> > Hi, > > I'm still looking at this testcase. I have been testing v1 more on different > releases and arches and I'm hitting an issue on ppc64 RHEL6.3. > > I'm getting abort from gcc_assert. The most interesting thing is that > thread, which aborts shouldn't exist, because for this scenario pthread_create > returns 1 (EPERM). > > (gdb) bt > #0 0x0000008066374e50 in raise (sig=<value optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64 > #1 0x0000008066376de4 in abort () at abort.c:92 > #2 0x000000806687e504 in _Unwind_SetSpColumn (context=0xfff97a0df58, outer_cfa=0xfff97a0e610, outer_ra=0x8066548904) at ../../../gcc/unwind-dw2.c:1265 > #3 uw_init_context_1 (context=0xfff97a0df58, outer_cfa=0xfff97a0e610, outer_ra=0x8066548904) at ../../../gcc/unwind-dw2.c:1472 > #4 0x000000806687ebe0 in _Unwind_ForcedUnwind (exc=0xfff97a0f670, stop=@0x8066560ad8: 0x8066545660<unwind_stop>, stop_argument=0xfff97a0e880) at ../../../gcc/unwind.inc:201 > #5 0x0000008066548904 in _Unwind_ForcedUnwind (exc=<value optimized out>, stop=<value optimized out>, stop_argument=<value optimized out>) at ../nptl/sysdeps/pthread/unwind-forcedunwind.c:132 > #6 0x0000008066545600 in __pthread_unwind (buf=<value optimized out>) at unwind.c:130 > #7 0x0000008066545bac in __do_cancel () at pthreadP.h:265 > #8 __pthread_enable_asynccancel () at cancellation.c:49 > #9 0x000000806653c568 in start_thread (arg=0xfff97a0f200) at pthread_create.c:289 > #10 0x000000806643a32c in .__clone () from /lib64/libc-2.12.so > > (gdb) frame 2 > #2 0x000000806687e504 in _Unwind_SetSpColumn (context=0xfff97a0df58, outer_cfa=0xfff97a0e610, outer_ra=0x8066548904) at ../../../gcc/unwind-dw2.c:1265 > 1265 gcc_assert (size == sizeof(_Unwind_Word)); > > The arg in threaded() is not used for anything, so I passed scenario number as parameter. > (gdb) p/x ((struct pthread *) 0xfff97a0f200)->arg > $1 = 0x12 > > So it's thread for scenario 0x12. This scenario tries to set explicit scheduling with max > priority. When you run this as unprivileged user, pthread_create gives you EPERM. Is it proper for this case that limit only root can run? Regards, Kai > > This comment is interesting, same gcc_assert(), also power7: > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52839#c10 > > Regards, > Jan > |
From: Jan S. <jst...@re...> - 2012-08-29 09:21:17
|
----- Original Message ----- > From: "Kang Kai" <Kai...@wi...> > To: "Jan Stancek" <jst...@re...> > Cc: ltp...@li..., "Zhenfeng Zhao" <Zhe...@wi...> > Sent: Wednesday, 29 August, 2012 10:57:39 AM > Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for segment fault > > On 2012年08月28日 16:37, Jan Stancek wrote: > > > > ----- Original Message ----- > >> From: "Kang Kai"<Kai...@wi...> > >> To: "Jan Stancek"<jst...@re...> > >> Cc: ltp...@li..., "Zhenfeng > >> Zhao"<Zhe...@wi...> > >> Sent: Friday, 24 August, 2012 4:46:58 AM > >> Subject: Re: [LTP] [PATCH] pthread_detach/4-3: workaround for > >> segment fault > >>>> I was thinking usleep(sleep_time) that progressively increases. > >>>> So > >>>> it > >>>> starts firing signals as quickly as it can and slows down over > >>>> time. > >>>> Each pthread_detach() would reset the sleep_time. > >>>> > >>>> As for our original issue, idea I'm playing with is: > >>>> > >>>> main (procA) - do_child (procB) - send_sig (thread) > >>>> \ > >>>> test (thread) - threaded > >>>> (detached thread) > >>>> > >>>> - turn 'while' in test() to single 'for' loop > >>>> - loop in main, fork and call do_child, wait for child to finish > >>> Hi, > >>> > >>> attached is v1 of the idea above. I ran it 100x times on various > >>> setups as root and unprivileged user. > >> Hi Jan, > >> > >> Great! > >>> Kai, would you like to give a try? > >> I have test it on routerstation, x86_64(ubuntu11.10& redhat 5.3) > >> and > >> x86(redhat 5.3) each 100+ times, and all PASS. > >> > > Hi, > > > > I'm still looking at this testcase. I have been testing v1 more on > > different > > releases and arches and I'm hitting an issue on ppc64 RHEL6.3. > > > > I'm getting abort from gcc_assert. The most interesting thing is > > that > > thread, which aborts shouldn't exist, because for this scenario > > pthread_create > > returns 1 (EPERM). > > > > (gdb) bt > > #0 0x0000008066374e50 in raise (sig=<value optimized out>) at > > ../nptl/sysdeps/unix/sysv/linux/raise.c:64 > > #1 0x0000008066376de4 in abort () at abort.c:92 > > #2 0x000000806687e504 in _Unwind_SetSpColumn > > (context=0xfff97a0df58, outer_cfa=0xfff97a0e610, > > outer_ra=0x8066548904) at ../../../gcc/unwind-dw2.c:1265 > > #3 uw_init_context_1 (context=0xfff97a0df58, > > outer_cfa=0xfff97a0e610, outer_ra=0x8066548904) at > > ../../../gcc/unwind-dw2.c:1472 > > #4 0x000000806687ebe0 in _Unwind_ForcedUnwind (exc=0xfff97a0f670, > > stop=@0x8066560ad8: 0x8066545660<unwind_stop>, > > stop_argument=0xfff97a0e880) at ../../../gcc/unwind.inc:201 > > #5 0x0000008066548904 in _Unwind_ForcedUnwind (exc=<value > > optimized out>, stop=<value optimized out>, stop_argument=<value > > optimized out>) at > > ../nptl/sysdeps/pthread/unwind-forcedunwind.c:132 > > #6 0x0000008066545600 in __pthread_unwind (buf=<value optimized > > out>) at unwind.c:130 > > #7 0x0000008066545bac in __do_cancel () at pthreadP.h:265 > > #8 __pthread_enable_asynccancel () at cancellation.c:49 > > #9 0x000000806653c568 in start_thread (arg=0xfff97a0f200) at > > pthread_create.c:289 > > #10 0x000000806643a32c in .__clone () from /lib64/libc-2.12.so > > > > (gdb) frame 2 > > #2 0x000000806687e504 in _Unwind_SetSpColumn > > (context=0xfff97a0df58, outer_cfa=0xfff97a0e610, > > outer_ra=0x8066548904) at ../../../gcc/unwind-dw2.c:1265 > > 1265 gcc_assert (size == sizeof(_Unwind_Word)); > > > > The arg in threaded() is not used for anything, so I passed > > scenario number as parameter. > > (gdb) p/x ((struct pthread *) 0xfff97a0f200)->arg > > $1 = 0x12 > > > > So it's thread for scenario 0x12. This scenario tries to set > > explicit scheduling with max > > priority. When you run this as unprivileged user, pthread_create > > gives you EPERM. > Is it proper for this case that limit only root can run? We could skip scenarios we know are going to fail for unprivileged user, it will likely avoid hitting that gcc_assert. Anyway, so far this looks like gcc/glibc issue, I created bug for it: Bug 852445 - gcc_assert failure in _Unwind_SetSpColumn() on ppc64 https://bugzilla.redhat.com/show_bug.cgi?id=852445 Regards, Jan > > Regards, > Kai > > > > > This comment is interesting, same gcc_assert(), also power7: > > http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52839#c10 > > > > Regards, > > Jan > > > > |