[
https://issues.apache.org/jira/browse/CASSANDRA-21730?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Maxim Muzafarov updated CASSANDRA-21730:
----------------------------------------
Description:
When kernel.perf_event_paranoid > 1 or kernel.kptr_restrict != 0,
AsyncProfilerService.start() fails, these are the usual values inside
containers.
Expected: Use itimer or ctimer instead of cpu when perf_events aren't usable.
was:
When kernel.perf_event_paranoid > 1 or kernel.kptr_restrict != 0,
AsyncProfilerService.start() fails, these are the usual values inside
containers.
Expected: Use itimer or ctimer instead of cpu when perf_events aren't usable.
{code}
package org.apache.cassandra.service;
import java.util.Map;
import java.util.UUID;
import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.io.util.File;
import org.apache.cassandra.io.util.FileUtils;
import static
org.apache.cassandra.config.CassandraRelevantProperties.ASYNC_PROFILER_ENABLED;
import static
org.apache.cassandra.service.AsyncProfilerService.ASYNC_PROFILER_START_DURATION_PARAM;
import static
org.apache.cassandra.service.AsyncProfilerService.ASYNC_PROFILER_START_EVENTS_PARAM;
import static
org.apache.cassandra.service.AsyncProfilerService.ASYNC_PROFILER_START_OUTPUT_FILE_NAME_PARAM;
import static
org.apache.cassandra.service.AsyncProfilerService.ASYNC_PROFILER_START_OUTPUT_FORMAT_PARAM;
import static
org.apache.cassandra.service.AsyncProfilerService.ASYNC_PROFILER_STOP_OUTPUT_FILE_NAME_PARAM;
import static
org.apache.cassandra.service.AsyncProfilerService.AsyncProfilerEvent.cpu;
import static
org.apache.cassandra.service.AsyncProfilerService.AsyncProfilerFormat.flamegraph;
import static org.junit.Assert.assertFalse;
public class AsyncProfilerRestrictedKernelParamsTest
{
private static final String testOutputPath = FileUtils.getTempDir().path();
private static class RestrictedKernelParamsCheck extends
StartupChecks.AsyncProfilerKernelParamsCheck
{
@Override
public int readPerfEventParanoid()
{
return 2;
}
@Override
public int readKptrRestrict()
{
return 1;
}
}
private AsyncProfilerService profiler;
private File testOutputFile;
@BeforeClass
public static void setUpClass()
{
DatabaseDescriptor.daemonInitialization();
}
@Before
public void setUp()
{
ASYNC_PROFILER_ENABLED.setBoolean(true);
testOutputFile = new File(testOutputPath, UUID.randomUUID().toString());
AsyncProfilerService.reset();
profiler = AsyncProfilerService.instance(testOutputPath, false, new
RestrictedKernelParamsCheck());
}
@After
public void tearDown()
{
try
{
profiler.stop(Map.of(ASYNC_PROFILER_STOP_OUTPUT_FILE_NAME_PARAM,
testOutputFile.name()));
testOutputFile.deleteIfExists();
}
catch (Exception e)
{
// ignore
}
}
@Test
public void testStartWithRestrictedKernelParamsDoesNotFailOnKernelCheck()
{
Map<String, String> startParameters =
Map.of(ASYNC_PROFILER_START_EVENTS_PARAM, cpu.name(),
ASYNC_PROFILER_START_OUTPUT_FORMAT_PARAM, flamegraph.name(),
ASYNC_PROFILER_START_DURATION_PARAM, "10s",
ASYNC_PROFILER_START_OUTPUT_FILE_NAME_PARAM, testOutputFile.name());
try
{
profiler.start(startParameters);
}
catch (IllegalStateException e)
{
assertFalse("start() must not fail on restricted kernel params: " +
e.getMessage(),
e.getMessage().contains("Kernel symbols are
unavailable"));
}
}
}
{code}
> Async-profiler should fallback into itimer/ctimer in containers
> ---------------------------------------------------------------
>
> Key: CASSANDRA-21730
> URL: https://issues.apache.org/jira/browse/CASSANDRA-21730
> Project: Apache Cassandra
> Issue Type: Bug
> Reporter: Maxim Muzafarov
> Priority: Normal
>
> When kernel.perf_event_paranoid > 1 or kernel.kptr_restrict != 0,
> AsyncProfilerService.start() fails, these are the usual values inside
> containers.
> Expected: Use itimer or ctimer instead of cpu when perf_events aren't usable.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]