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

Reply via email to