[ 
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]

Reply via email to