[
https://issues.apache.org/jira/browse/CASSANDRA-21730?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18123435#comment-18123435
]
Maxim Muzafarov commented on CASSANDRA-21730:
---------------------------------------------
cc [~dnk] [~bernardo.botella]
> 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.
> {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}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]