mirror of
https://github.com/netbirdio/gvisor.git
synced 2026-05-22 17:12:49 -07:00
Skip itimer "fairness" tests on ptrace.
With additional logging, the issue described by the new comment looks like: D0518 21:28:08.416810 6777 task_signals.go:459] [ 8] Notified of signal 27 D0518 21:28:08.416852 6777 task_block.go:223] [ 8] Interrupt queued D0518 21:28:08.417013 6777 task_run.go:250] [ 8] Switching to sentry D0518 21:28:08.417033 6777 task_signals.go:220] [ 8] Signal 27: delivering to handler D0518 21:28:08.417127 6777 task_run.go:248] [ 8] Switching to app D0518 21:28:08.443765 6777 task_signals.go:519] [ 8] Refusing masked signal 27 // ED: note the ~26ms elapsed since TID 8 "switched to app" D0518 21:28:08.443814 6777 task_signals.go:465] [ 6] Notified of group signal 27 D0518 21:28:08.443832 6777 task_block.go:223] [ 6] Interrupt queued D0518 21:28:08.443914 6777 task_block.go:223] [ 6] Interrupt queued D0518 21:28:08.443859 6777 task_run.go:250] [ 8] Switching to sentry I0518 21:28:08.443936 6777 strace.go:576] [ 8] exe E rt_sigreturn() Slow context switches on ptrace are probably due to kernel scheduling delays. Slow context switches on KVM are less clear, so leave that bug and TODO open. PiperOrigin-RevId: 312322782
This commit is contained in:
@@ -267,8 +267,19 @@ int TestSIGPROFFairness(absl::Duration sleep) {
|
||||
// Random save/restore is disabled as it introduces additional latency and
|
||||
// unpredictable distribution patterns.
|
||||
TEST(ItimerTest, DeliversSIGPROFToThreadsRoughlyFairlyActive_NoRandomSave) {
|
||||
// TODO(b/143247272): CPU time accounting is inaccurate for the KVM platform.
|
||||
SKIP_IF(GvisorPlatform() == Platform::kKVM);
|
||||
// On the KVM and ptrace platforms, switches between sentry and application
|
||||
// context are sometimes extremely slow, causing the itimer to send SIGPROF to
|
||||
// a thread that either already has one pending or has had SIGPROF delivered,
|
||||
// but hasn't handled it yet (and thus therefore still has SIGPROF masked). In
|
||||
// either case, since itimer signals are group-directed, signal sending falls
|
||||
// back to notifying the thread group leader. ItimerSignalTest() fails if "too
|
||||
// many" signals are delivered to the thread group leader, so these tests are
|
||||
// flaky on these platforms.
|
||||
//
|
||||
// TODO(b/143247272): Clarify why context switches are so slow on KVM.
|
||||
const auto gvisor_platform = GvisorPlatform();
|
||||
SKIP_IF(gvisor_platform == Platform::kKVM ||
|
||||
gvisor_platform == Platform::kPtrace);
|
||||
|
||||
pid_t child;
|
||||
int execve_errno;
|
||||
@@ -291,8 +302,10 @@ TEST(ItimerTest, DeliversSIGPROFToThreadsRoughlyFairlyActive_NoRandomSave) {
|
||||
// Random save/restore is disabled as it introduces additional latency and
|
||||
// unpredictable distribution patterns.
|
||||
TEST(ItimerTest, DeliversSIGPROFToThreadsRoughlyFairlyIdle_NoRandomSave) {
|
||||
// TODO(b/143247272): CPU time accounting is inaccurate for the KVM platform.
|
||||
SKIP_IF(GvisorPlatform() == Platform::kKVM);
|
||||
// See comment in DeliversSIGPROFToThreadsRoughlyFairlyActive.
|
||||
const auto gvisor_platform = GvisorPlatform();
|
||||
SKIP_IF(gvisor_platform == Platform::kKVM ||
|
||||
gvisor_platform == Platform::kPtrace);
|
||||
|
||||
pid_t child;
|
||||
int execve_errno;
|
||||
|
||||
Reference in New Issue
Block a user