Remove setaffinity of pthread for getaddrinfo
It looks like `sched_getcpu(3)` returns a strange number on some (virtual?) environments. I decided to remove the setaffinity mechanism because the performance does not appear to degrade on a quick benchmark even if removed. [Bug #20172]
This commit is contained in:
parent
a971229462
commit
1bd98c820d
@ -706,8 +706,6 @@ SRC
|
|||||||
|
|
||||||
have_func("pthread_create")
|
have_func("pthread_create")
|
||||||
have_func("pthread_detach")
|
have_func("pthread_detach")
|
||||||
have_func("pthread_attr_setaffinity_np")
|
|
||||||
have_func("sched_getcpu")
|
|
||||||
|
|
||||||
$VPATH << '$(topdir)' << '$(top_srcdir)'
|
$VPATH << '$(topdir)' << '$(top_srcdir)'
|
||||||
create_makefile("socket")
|
create_makefile("socket")
|
||||||
|
@ -461,7 +461,7 @@ cancel_getaddrinfo(void *ptr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
do_pthread_create(pthread_t *th, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg)
|
do_pthread_create(pthread_t *th, void *(*start_routine) (void *), void *arg)
|
||||||
{
|
{
|
||||||
int limit = 3, ret;
|
int limit = 3, ret;
|
||||||
do {
|
do {
|
||||||
@ -469,7 +469,7 @@ do_pthread_create(pthread_t *th, const pthread_attr_t *attr, void *(*start_routi
|
|||||||
//
|
//
|
||||||
// https://bugs.openjdk.org/browse/JDK-8268605
|
// https://bugs.openjdk.org/browse/JDK-8268605
|
||||||
// https://github.com/openjdk/jdk/commit/e35005d5ce383ddd108096a3079b17cb0bcf76f1
|
// https://github.com/openjdk/jdk/commit/e35005d5ce383ddd108096a3079b17cb0bcf76f1
|
||||||
ret = pthread_create(th, attr, start_routine, arg);
|
ret = pthread_create(th, 0, start_routine, arg);
|
||||||
} while (ret == EAGAIN && limit-- > 0);
|
} while (ret == EAGAIN && limit-- > 0);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -489,33 +489,13 @@ start:
|
|||||||
return EAI_MEMORY;
|
return EAI_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_attr_t attr;
|
|
||||||
if (pthread_attr_init(&attr) != 0) {
|
|
||||||
free_getaddrinfo_arg(arg);
|
|
||||||
return EAI_AGAIN;
|
|
||||||
}
|
|
||||||
#if defined(HAVE_PTHREAD_ATTR_SETAFFINITY_NP) && defined(HAVE_SCHED_GETCPU)
|
|
||||||
cpu_set_t tmp_cpu_set;
|
|
||||||
CPU_ZERO(&tmp_cpu_set);
|
|
||||||
int cpu = sched_getcpu();
|
|
||||||
if (cpu < CPU_SETSIZE) {
|
|
||||||
CPU_SET(cpu, &tmp_cpu_set);
|
|
||||||
pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &tmp_cpu_set);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
pthread_t th;
|
pthread_t th;
|
||||||
if (do_pthread_create(&th, &attr, do_getaddrinfo, arg) != 0) {
|
if (do_pthread_create(&th, do_getaddrinfo, arg) != 0) {
|
||||||
free_getaddrinfo_arg(arg);
|
free_getaddrinfo_arg(arg);
|
||||||
return EAI_AGAIN;
|
return EAI_AGAIN;
|
||||||
}
|
}
|
||||||
pthread_detach(th);
|
pthread_detach(th);
|
||||||
|
|
||||||
int r;
|
|
||||||
if ((r = pthread_attr_destroy(&attr)) != 0) {
|
|
||||||
rb_bug_errno("pthread_attr_destroy", r);
|
|
||||||
}
|
|
||||||
|
|
||||||
rb_thread_call_without_gvl2(wait_getaddrinfo, arg, cancel_getaddrinfo, arg);
|
rb_thread_call_without_gvl2(wait_getaddrinfo, arg, cancel_getaddrinfo, arg);
|
||||||
|
|
||||||
int need_free = 0;
|
int need_free = 0;
|
||||||
@ -721,33 +701,13 @@ start:
|
|||||||
return EAI_MEMORY;
|
return EAI_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
pthread_attr_t attr;
|
|
||||||
if (pthread_attr_init(&attr) != 0) {
|
|
||||||
free_getnameinfo_arg(arg);
|
|
||||||
return EAI_AGAIN;
|
|
||||||
}
|
|
||||||
#if defined(HAVE_PTHREAD_ATTR_SETAFFINITY_NP) && defined(HAVE_SCHED_GETCPU)
|
|
||||||
cpu_set_t tmp_cpu_set;
|
|
||||||
CPU_ZERO(&tmp_cpu_set);
|
|
||||||
int cpu = sched_getcpu();
|
|
||||||
if (cpu < CPU_SETSIZE) {
|
|
||||||
CPU_SET(cpu, &tmp_cpu_set);
|
|
||||||
pthread_attr_setaffinity_np(&attr, sizeof(cpu_set_t), &tmp_cpu_set);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
pthread_t th;
|
pthread_t th;
|
||||||
if (do_pthread_create(&th, &attr, do_getnameinfo, arg) != 0) {
|
if (do_pthread_create(&th, do_getnameinfo, arg) != 0) {
|
||||||
free_getnameinfo_arg(arg);
|
free_getnameinfo_arg(arg);
|
||||||
return EAI_AGAIN;
|
return EAI_AGAIN;
|
||||||
}
|
}
|
||||||
pthread_detach(th);
|
pthread_detach(th);
|
||||||
|
|
||||||
int r;
|
|
||||||
if ((r = pthread_attr_destroy(&attr)) != 0) {
|
|
||||||
rb_bug_errno("pthread_attr_destroy", r);
|
|
||||||
}
|
|
||||||
|
|
||||||
rb_thread_call_without_gvl2(wait_getnameinfo, arg, cancel_getnameinfo, arg);
|
rb_thread_call_without_gvl2(wait_getnameinfo, arg, cancel_getnameinfo, arg);
|
||||||
|
|
||||||
int need_free = 0;
|
int need_free = 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user