Browse Source

gensessionid add pid prefix

tags/v1.2.0
wangxiaotian22 4 years ago
parent
commit
ebe407e79f
3 changed files with 42 additions and 5 deletions
  1. +13
    -5
      ge/graph/load/new_model_manager/model_manager.cc
  2. +5
    -0
      tests/depends/mmpa/src/mmpa_stub.cc
  3. +24
    -0
      tests/ut/ge/graph/load/new_model_manager_model_manager_aicpu_unittest.cc

+ 13
- 5
ge/graph/load/new_model_manager/model_manager.cc View File

@@ -18,6 +18,7 @@

#include <string>

#include "mmpa/mmpa_api.h"
#include "aicpu/aicpu_schedule/aicpu_op_type_list.h"
#include "common/dump/dump_manager.h"
#include "common/l2_cache_optimize.h"
@@ -53,7 +54,6 @@ const char *const kBatchLoadBuf = "batchLoadsoFrombuf";
const char *const kDeleteCustOp = "deleteCustOp";
const int kTimeSpecNano = 1000000000;
const int kTimeSpecMiro = 1000000;
const int kSessionMaxBias = 100;
const int kOpNameMaxSize = 100;
struct CustAicpuSoBuf {
uint64_t kernelSoBuf;
@@ -1023,6 +1023,12 @@ Status ModelManager::GetAippType(uint32_t model_id, uint32_t index, InputAippTyp
}

Status ModelManager::GenSessionId(uint64_t &session_id) {
const uint64_t kSessionTimeMask = 0xffffffffffff0000;
const uint64_t kSessionPidMask = 0x000000000000ff00;
const uint64_t kSessionBiasMask = 0x00000000000000ff;

const uint64_t kMaskPerOffset = 8;

std::lock_guard<std::mutex> lock(session_id_create_mutex_);

mmTimeval tv;
@@ -1030,12 +1036,14 @@ Status ModelManager::GenSessionId(uint64_t &session_id) {
GELOGE(INTERNAL_ERROR, "Failed to get current time.");
return INTERNAL_ERROR;
}
session_id = static_cast<uint64_t>(tv.tv_sec * kTimeSpecMiro + tv.tv_usec); // 1000000us
uint64_t timestamp = static_cast<uint64_t>(tv.tv_sec * kTimeSpecMiro + tv.tv_usec); // 1000000us

static uint32_t pid = mmGetPid();

session_id_bias_++;
// max bais 100.
session_id_bias_ = session_id_bias_ % kSessionMaxBias;
session_id = session_id * kSessionMaxBias + session_id_bias_;
session_id = ((timestamp<<kMaskPerOffset<<kMaskPerOffset) & kSessionTimeMask) +
((pid<<kMaskPerOffset) & kSessionPidMask) + (session_id_bias_ & kSessionBiasMask);

GELOGD("Generate new session id: %lu.", session_id);
return SUCCESS;


+ 5
- 0
tests/depends/mmpa/src/mmpa_stub.cc View File

@@ -272,3 +272,8 @@ VOID *mmDlsym(VOID *handle, const CHAR *funcName)
{
return NULL;
}

INT32 mmGetPid()
{
return (INT32)getpid();
}

+ 24
- 0
tests/ut/ge/graph/load/new_model_manager_model_manager_aicpu_unittest.cc View File

@@ -16,6 +16,8 @@

#include <cce/compiler_stub.h>
#include <gtest/gtest.h>
#include <sys/time.h>
#include <unistd.h>

#include "common/debug/log.h"
#include "common/l2_cache_optimize.h"
@@ -75,4 +77,26 @@ TEST_F(UtestModelManagerModelManagerAicpu, DestroyAicpuKernel) {
// EXPECT_EQ(ge::FAILED, mm.LoadModelOffline(model_id, data, nullptr, nullptr));
}

// test GenSessionId
TEST_F(UtestModelManagerModelManagerAicpu, gen_session_id) {
ModelManager manager;
uint64_t session_id;
manager.GenSessionId(session_id);

struct timeval tv;
gettimeofday(&tv, nullptr);
uint64_t timestamp = static_cast<uint64_t>(tv.tv_sec * 1000000);

const uint64_t kSessionTimeMask = 0xfffffff000000000; // 不比us
const uint64_t kSessionPidMask = 0x000000000000ff00;
const uint64_t kSessionBiasMask = 0x00000000000000ff;

uint32_t pid = getpid();

EXPECT_EQ(1, kSessionBiasMask & session_id);
EXPECT_EQ(pid<<8 & kSessionPidMask, kSessionPidMask & session_id);
//EXPECT_EQ(timestamp<<16 & kSessionTimeMask, kSessionTimeMask & session_id);
}


} // namespace ge

Loading…
Cancel
Save