[Apptest] Add extra aging test to repeat model register/unregister
authorDongju Chae <dongju.chae@samsung.com>
Fri, 25 Jun 2021 05:40:41 +0000 (14:40 +0900)
committer채동주/On-Device Lab(SR)/Staff Engineer/삼성전자 <dongju.chae@samsung.com>
Fri, 25 Jun 2021 07:32:51 +0000 (16:32 +0900)
This patch adds extra aging test to repeat model register/unregister.

Signed-off-by: Dongju Chae <dongju.chae@samsung.com>
tests/apptests/tvn_triv2_aging.cc

index b79a5ee142375ed5867e0dd78db1b124c5a2c902..bd1cb5f1de59f148bb55298db2fed2eb5465d1d5 100644 (file)
  */
 
 #include <ne_test_utils.h>
-
-#define NPU_TIMEOUT_MS 5000
+#include <iomanip>
 
 using namespace std;
 
+#define NPU_TIMEOUT_MS 5000
+#define PRINT_STATUS_UNIT 100
+#define PRINT_STATUS_ITERS(iter, max)                                       \
+  if (((iter) % PRINT_STATUS_UNIT) == 0) {                                  \
+    cerr << "Iterations: " << setw (8) << (iter) << " / " << (max) << "\n"; \
+  }
+
 /** @brief C++ class to describe how to use npu-engine library */
 class Tester : public UtilTRIV2 {
  public:
@@ -45,6 +51,18 @@ class Tester : public UtilTRIV2 {
     return 0;
   }
 
+  void check_memleak () {
+    size_t alloc_total = 0;
+    size_t free_total = 0;
+
+    if (UtilTRIV2::getMemoryStatus (&alloc_total, &free_total) != 0)
+      return;
+
+    if (alloc_total != free_total)
+      cerr << "Possible memory leak..? (" << alloc_total << " vs. "
+           << free_total << ")\n";
+  }
+
   /** @brief configure testing mode */
   int config (string mode, string num_iter) {
     if (mode == "" || num_iter == "")
@@ -66,29 +84,64 @@ class Tester : public UtilTRIV2 {
   /** @brief run the inference */
   int run () {
     uint32_t model_id;
-    if (mode_ == 1) {
-      int status = UtilTRIV2::loadModel (model_dir_, &model_id,
-                                         NPU_PRIORITY_MID, NPU_TIMEOUT_MS);
+    int req_id, status;
+
+    if (mode_ == 0) {
+      /* repeat model_register/unregister */
+      for (uint32_t i = 0; i < num_iter_; i++) {
+        PRINT_STATUS_ITERS (i, num_iter_);
+
+        status = UtilTRIV2::loadModel (model_dir_, &model_id, NPU_PRIORITY_MID,
+                                       NPU_TIMEOUT_MS);
+        if (status != 0)
+          return status;
+
+        status = UtilTRIV2::unloadModel (model_id);
+        if (status != 0)
+          return status;
+
+        check_memleak ();
+      }
+      return test_ret_success;
+    } else if (mode_ == 1) {
+      /* repeat model_inference only */
+      status = UtilTRIV2::loadModel (model_dir_, &model_id, NPU_PRIORITY_MID,
+                                     NPU_TIMEOUT_MS);
       if (status != 0)
         return status;
 
-      int req_id = UtilTRIV2::createRequest (model_id);
+      req_id = UtilTRIV2::createRequest (model_id);
       if (req_id < 0)
         return req_id;
 
-      for (uint32_t i = 0; i < num_iter_; i++)
-        UtilTRIV2::submitRequest (model_id);
+      for (uint32_t i = 0; i < num_iter_; i++) {
+        PRINT_STATUS_ITERS (i, num_iter_);
+
+        status = UtilTRIV2::submitRequest (req_id);
+        if (status != 0)
+          break;
+      }
+      status = UtilTRIV2::removeRequest (req_id);
+      if (status != 0)
+        return status;
 
-      UtilTRIV2::removeRequest (req_id);
+      status = UtilTRIV2::unloadModel (model_id);
+      if (status != 0)
+        return status;
+
+      check_memleak ();
       return wait () == num_iter_ ? test_ret_success : test_ret_failure;
     } else if (mode_ == 2) {
+      /* repeat model_register/inference/unregister */
       for (uint32_t i = 0; i < num_iter_; i++) {
-        int status = UtilTRIV2::loadModel (model_dir_, &model_id,
-                                           NPU_PRIORITY_MID, NPU_TIMEOUT_MS);
+        PRINT_STATUS_ITERS (i, num_iter_);
+
+        status = UtilTRIV2::loadModel (model_dir_, &model_id, NPU_PRIORITY_MID,
+                                       NPU_TIMEOUT_MS);
         if (status != 0)
           return status;
 
-        int req_id = UtilTRIV2::createRequest (model_id);
+        req_id = UtilTRIV2::createRequest (model_id);
         if (req_id < 0)
           return req_id;
 
@@ -109,20 +162,11 @@ class Tester : public UtilTRIV2 {
         if (status != 0)
           return status;
 
-        size_t alloc_total = 0;
-        size_t free_total = 0;
-
-        status = UtilTRIV2::getMemoryStatus (&alloc_total, &free_total);
-        if (status != 0)
-          return status;
-
-        if (alloc_total != free_total)
-          cerr << "Possible memory leak..? (" << alloc_total << " vs. "
-               << free_total << ")\n";
+        check_memleak ();
       }
       return wait () == num_iter_ ? test_ret_success : test_ret_failure;
     } else {
-      cerr << "Unsupported mode... use 1 (fast) or 2 (slow)\n";
+      cerr << "Unsupported mode... use 0 (model-only), 1 (fast), or 2 (slow)\n";
       return test_ret_failure;
     }
   }