Update sysman engine and scheduler as per lastest spec

Signed-off-by: Mayank Raghuwanshi <mayank.raghuwanshi@intel.com>
This commit is contained in:
Mayank Raghuwanshi
2021-03-31 11:24:22 +05:30
committed by Compute-Runtime-Automation
parent 4c6e38c9e5
commit 1c3107fc7e
8 changed files with 87 additions and 26 deletions

View File

@@ -8,6 +8,8 @@
#pragma once
#include "shared/source/os_interface/linux/engine_info_impl.h"
#include "opencl/test/unit_test/os_interface/linux/drm_mock.h"
#include "level_zero/core/test/unit_tests/mock.h"
#include "level_zero/core/test/unit_tests/mocks/mock_memory_manager.h"
#include "level_zero/tools/source/sysman/engine/linux/os_engine_imp.h"
@@ -23,13 +25,14 @@ constexpr int64_t mockPmuFd = 10;
constexpr uint64_t mockTimestamp = 87654321;
constexpr uint64_t mockActiveTime = 987654321;
const uint32_t microSecondsToNanoSeconds = 1000u;
constexpr uint16_t I915_INVALID_ENGINE_CLASS = UINT16_MAX;
const std::string deviceDir("device");
struct MockMemoryManagerInEngineSysman : public MemoryManagerMock {
MockMemoryManagerInEngineSysman(NEO::ExecutionEnvironment &executionEnvironment) : MemoryManagerMock(const_cast<NEO::ExecutionEnvironment &>(executionEnvironment)) {}
};
class EngineNeoDrm : public Drm {
public:
using Drm::engineInfo;
using Drm::getEngineInfo;
const int mockFd = 0;
EngineNeoDrm(RootDeviceEnvironment &rootDeviceEnvironment) : Drm(std::make_unique<HwDeviceId>(mockFd, ""), rootDeviceEnvironment) {}
};
@@ -38,7 +41,7 @@ struct Mock<EngineNeoDrm> : public EngineNeoDrm {
Mock<EngineNeoDrm>(RootDeviceEnvironment &rootDeviceEnvironment) : EngineNeoDrm(rootDeviceEnvironment) {}
bool queryEngineInfoMockPositiveTest() {
drm_i915_engine_info i915engineInfo[5] = {};
drm_i915_engine_info i915engineInfo[6] = {};
i915engineInfo[0].engine.engine_class = I915_ENGINE_CLASS_RENDER;
i915engineInfo[0].engine.engine_instance = 0;
i915engineInfo[1].engine.engine_class = I915_ENGINE_CLASS_VIDEO;
@@ -49,8 +52,10 @@ struct Mock<EngineNeoDrm> : public EngineNeoDrm {
i915engineInfo[3].engine.engine_instance = 0;
i915engineInfo[4].engine.engine_class = I915_ENGINE_CLASS_VIDEO_ENHANCE;
i915engineInfo[4].engine.engine_instance = 0;
i915engineInfo[5].engine.engine_class = I915_INVALID_ENGINE_CLASS;
i915engineInfo[5].engine.engine_instance = 0;
this->engineInfo.reset(new EngineInfoImpl(i915engineInfo, 5));
this->engineInfo.reset(new EngineInfoImpl(i915engineInfo, 6));
return true;
}
@@ -58,7 +63,7 @@ struct Mock<EngineNeoDrm> : public EngineNeoDrm {
return false;
}
MOCK_METHOD(bool, queryEngineInfo, (), (override));
MOCK_METHOD(bool, sysmanQueryEngineInfo, (), (override));
};
class MockPmuInterfaceImp : public PmuInterfaceImp {
@@ -121,5 +126,12 @@ struct Mock<EngineSysfsAccess> : public EngineSysfsAccess {
Mock<EngineSysfsAccess>() = default;
};
class DrmMockEngineInfoFailing : public DrmMock {
public:
using DrmMock::DrmMock;
DrmMockEngineInfoFailing(RootDeviceEnvironment &rootDeviceEnvironment) : DrmMock(rootDeviceEnvironment) {}
int handleRemainingRequests(unsigned long request, void *arg) override { return -1; }
};
} // namespace ult
} // namespace L0

View File

@@ -14,7 +14,7 @@ using ::testing::Return;
class OsEngine;
namespace L0 {
namespace ult {
constexpr uint32_t handleComponentCount = 4u;
constexpr uint32_t handleComponentCount = 5u;
class ZesEngineFixture : public SysmanDeviceFixture {
protected:
std::unique_ptr<Mock<EngineNeoDrm>> pDrm;
@@ -50,7 +50,7 @@ class ZesEngineFixture : public SysmanDeviceFixture {
pOriginalPmuInterface = pLinuxSysmanImp->pPmuInterface;
pLinuxSysmanImp->pDrm = pDrm.get();
pLinuxSysmanImp->pPmuInterface = pPmuInterface.get();
ON_CALL(*pDrm.get(), queryEngineInfo())
ON_CALL(*pDrm.get(), sysmanQueryEngineInfo())
.WillByDefault(::testing::Invoke(pDrm.get(), &Mock<EngineNeoDrm>::queryEngineInfoMockPositiveTest));
ON_CALL(*pPmuInterface.get(), perfEventOpen(_, _, _, _, _))
@@ -116,6 +116,10 @@ TEST_F(ZesEngineFixture, GivenValidEngineHandlesWhenCallingZesEngineGetPropertie
EXPECT_EQ(ZE_RESULT_SUCCESS, zesEngineGetProperties(handle[3], &properties));
EXPECT_EQ(ZES_ENGINE_GROUP_COPY_SINGLE, properties.type);
EXPECT_FALSE(properties.onSubdevice);
EXPECT_EQ(ZE_RESULT_SUCCESS, zesEngineGetProperties(handle[4], &properties));
EXPECT_EQ(ZES_ENGINE_GROUP_MEDIA_ENHANCEMENT_SINGLE, properties.type);
EXPECT_FALSE(properties.onSubdevice);
}
TEST_F(ZesEngineFixture, GivenValidEngineHandleAndIntegratedDeviceWhenCallingZesEngineGetActivityThenVerifyCallReturnsSuccess) {
@@ -201,11 +205,35 @@ TEST_F(ZesEngineFixture, GivenValidEngineHandleWhenCallingZesEngineGetActivityAn
TEST_F(ZesEngineFixture, GivenValidOsSysmanPointerWhenRetrievingEngineTypeAndInstancesAndIfEngineInfoQueryFailsThenErrorIsReturned) {
std::multimap<zes_engine_group_t, uint32_t> engineGroupInstance;
ON_CALL(*pDrm.get(), queryEngineInfo())
ON_CALL(*pDrm.get(), sysmanQueryEngineInfo())
.WillByDefault(::testing::Invoke(pDrm.get(), &Mock<EngineNeoDrm>::queryEngineInfoMockReturnFalse));
EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, OsEngine::getNumEngineTypeAndInstances(engineGroupInstance, pOsSysman));
}
TEST_F(ZesEngineFixture, givenEngineInfoQuerySupportedWhenQueryingEngineInfoThenEngineInfoIsCreatedWithEngines) {
auto drm = std::make_unique<DrmMockEngine>((const_cast<NEO::RootDeviceEnvironment &>(neoDevice->getRootDeviceEnvironment())));
ASSERT_NE(nullptr, drm);
drm->sysmanQueryEngineInfo();
auto engineInfo = static_cast<EngineInfoImpl *>(drm->getEngineInfo());
ASSERT_NE(nullptr, engineInfo);
EXPECT_EQ(2u, engineInfo->engines.size());
}
TEST_F(ZesEngineFixture, GivenEngineInfoWithVideoQuerySupportedWhenQueryingEngineInfoWithVideoThenEngineInfoIsCreatedWithEngines) {
auto drm = std::make_unique<DrmMockEngine>((const_cast<NEO::RootDeviceEnvironment &>(neoDevice->getRootDeviceEnvironment())));
ASSERT_NE(nullptr, drm);
drm->sysmanQueryEngineInfo();
auto engineInfo = static_cast<EngineInfoImpl *>(drm->getEngineInfo());
ASSERT_NE(nullptr, engineInfo);
EXPECT_EQ(2u, engineInfo->engines.size());
}
TEST_F(ZesEngineFixture, GivenEngineInfoWithVideoQueryFailsThenFailureIsReturned) {
auto drm = std::make_unique<DrmMockEngineInfoFailing>((const_cast<NEO::RootDeviceEnvironment &>(neoDevice->getRootDeviceEnvironment())));
ASSERT_NE(nullptr, drm);
EXPECT_FALSE(drm->sysmanQueryEngineInfo());
}
} // namespace ult
} // namespace L0

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2020 Intel Corporation
* Copyright (C) 2020-2021 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
@@ -442,7 +442,7 @@ TEST_F(SysmanDeviceSchedulerFixture, GivenValidDeviceHandleWhenCallingzesSchedul
ze_result_t result = zesSchedulerGetProperties(handle, &properties);
EXPECT_EQ(ZE_RESULT_SUCCESS, result);
EXPECT_TRUE(properties.canControl);
EXPECT_LE(properties.engines, ZES_ENGINE_TYPE_FLAG_DMA);
EXPECT_LE(properties.engines, ZES_ENGINE_TYPE_FLAG_RENDER);
EXPECT_EQ(properties.supportedModes, static_cast<uint32_t>((1 << ZES_SCHED_MODE_TIMEOUT) | (1 << ZES_SCHED_MODE_TIMESLICE) | (1 << ZES_SCHED_MODE_EXCLUSIVE)));
}
}
@@ -452,7 +452,7 @@ TEST_F(SysmanMultiDeviceFixture, GivenValidDevicePointerWhenGettingSchedProperti
std::vector<std::string> listOfEngines;
ze_device_properties_t deviceProperties = {};
Device::fromHandle(device)->getProperties(&deviceProperties);
LinuxSchedulerImp *pLinuxSchedulerImp = new LinuxSchedulerImp(pOsSysman, ZES_ENGINE_TYPE_FLAG_COMPUTE, listOfEngines,
LinuxSchedulerImp *pLinuxSchedulerImp = new LinuxSchedulerImp(pOsSysman, ZES_ENGINE_TYPE_FLAG_RENDER, listOfEngines,
deviceProperties.flags & ZE_DEVICE_PROPERTY_FLAG_SUBDEVICE, deviceProperties.subdeviceId);
EXPECT_EQ(ZE_RESULT_SUCCESS, pLinuxSchedulerImp->getProperties(properties));
EXPECT_EQ(properties.subdeviceId, deviceProperties.subdeviceId);