diff --git a/mindspore/ccsrc/backend/kernel_compiler/gpu/data/dataset_profiling.cc b/mindspore/ccsrc/backend/kernel_compiler/gpu/data/dataset_profiling.cc index f16146685b..0ac66c4bc3 100644 --- a/mindspore/ccsrc/backend/kernel_compiler/gpu/data/dataset_profiling.cc +++ b/mindspore/ccsrc/backend/kernel_compiler/gpu/data/dataset_profiling.cc @@ -53,6 +53,15 @@ void GetNextProfiling::SaveProfilingData() { << std::endl; } handle.close(); + + ChangeFileMode(); +} + +void GetNextProfiling::ChangeFileMode() { + if (chmod(common::SafeCStr(file_name_), S_IRUSR | S_IWUSR) == -1) { + MS_LOG(ERROR) << "Modify file:" << file_name_ << " to rw fail."; + return; + } } void GetNextProfiling::RecordData(uint32_t queue_size, uint64_t start_time_stamp, uint64_t end_time_stamp) { diff --git a/mindspore/ccsrc/backend/kernel_compiler/gpu/data/dataset_profiling.h b/mindspore/ccsrc/backend/kernel_compiler/gpu/data/dataset_profiling.h index 35ecbccd26..e2fce19fe1 100644 --- a/mindspore/ccsrc/backend/kernel_compiler/gpu/data/dataset_profiling.h +++ b/mindspore/ccsrc/backend/kernel_compiler/gpu/data/dataset_profiling.h @@ -35,6 +35,7 @@ class GetNextProfiling : public ProfilingOp { uint64_t GetTimeStamp() const; void RecordData(uint32_t queue_size, uint64_t start_time_stamp, uint64_t end_time_stamp); void Init(); + void ChangeFileMode(); private: std::string profiling_path_; diff --git a/mindspore/ccsrc/minddata/dataset/engine/perf/connector_size.h b/mindspore/ccsrc/minddata/dataset/engine/perf/connector_size.h index efafd2860c..3a277cae76 100644 --- a/mindspore/ccsrc/minddata/dataset/engine/perf/connector_size.h +++ b/mindspore/ccsrc/minddata/dataset/engine/perf/connector_size.h @@ -61,6 +61,9 @@ class ConnectorSize : public Sampling { // Parse op infomation and transform to json format json ParseOpInfo(const DatasetOp &node, const std::vector &size); + // Change file mode after save throughput data + Status ChangeFileMode() { return Status::OK(); } + private: ExecutionTree *tree_ = nullptr; // ExecutionTree pointer ConnectorSizeSampleTable sample_table_; // Dataset structure to store all samples of connector size sampling diff --git a/mindspore/ccsrc/minddata/dataset/engine/perf/connector_throughput.cc b/mindspore/ccsrc/minddata/dataset/engine/perf/connector_throughput.cc index 7b6f9682bb..c5c9c50f21 100644 --- a/mindspore/ccsrc/minddata/dataset/engine/perf/connector_throughput.cc +++ b/mindspore/ccsrc/minddata/dataset/engine/perf/connector_throughput.cc @@ -14,6 +14,7 @@ * limitations under the License. */ +#include #include #include #include @@ -132,5 +133,17 @@ Status ConnectorThroughput::Init(const std::string &dir_path, const std::string file_path_ = (Path(dir_path) / Path("pipeline_profiling_" + device_id + ".json")).toString(); return Status::OK(); } + +Status ConnectorThroughput::ChangeFileMode() { + if (file_path_.empty()) { + return Status::OK(); + } + + if (chmod(common::SafeCStr(file_path_), S_IRUSR | S_IWUSR) == -1) { + std::string err_str = "Change file mode failed," + file_path_; + return Status(StatusCode::kUnexpectedError, err_str); + } + return Status::OK(); +} } // namespace dataset } // namespace mindspore diff --git a/mindspore/ccsrc/minddata/dataset/engine/perf/connector_throughput.h b/mindspore/ccsrc/minddata/dataset/engine/perf/connector_throughput.h index 9871aa425b..8c6a209f75 100644 --- a/mindspore/ccsrc/minddata/dataset/engine/perf/connector_throughput.h +++ b/mindspore/ccsrc/minddata/dataset/engine/perf/connector_throughput.h @@ -59,21 +59,6 @@ class ConnectorThroughput : public Sampling { // This function samples the connector size of every nodes within the ExecutionTree Status Sample() override; - /* Status TestPrint() override { - std::ofstream os("performance_monitor.txt"); - if (throughput_.size() == 0) { - os << "data is empty" << std::endl; - return Status::OK(); - } - for (int i = 0; i < throughput_.size(); i++) { - for (int j = 0; j < n_nodes_; j++) { - os << throughput_[j][i] << " "; - } - os << std::endl; - } - return Status::OK(); - };*/ - // Traverse the tree nodes and count them int InitNodes(); @@ -87,6 +72,8 @@ class ConnectorThroughput : public Sampling { json ParseOpInfo(const DatasetOp &node, const std::vector &thr); + Status ChangeFileMode() override; + private: ExecutionTree *tree_ = nullptr; // ExecutionTree pointer int64_t max_rows_; diff --git a/mindspore/ccsrc/minddata/dataset/engine/perf/dataset_iterator_tracing.cc b/mindspore/ccsrc/minddata/dataset/engine/perf/dataset_iterator_tracing.cc index 4491db144e..90197dbc22 100644 --- a/mindspore/ccsrc/minddata/dataset/engine/perf/dataset_iterator_tracing.cc +++ b/mindspore/ccsrc/minddata/dataset/engine/perf/dataset_iterator_tracing.cc @@ -13,10 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ +#include #include #include #include "minddata/dataset/engine/perf/dataset_iterator_tracing.h" #include "minddata/dataset/util/path.h" +#include "mindspore/core/utils/ms_utils.h" namespace mindspore { namespace dataset { @@ -60,5 +62,17 @@ Status DatasetIteratorTracing::Init(const std::string &dir_path, const std::stri file_path_ = (Path(dir_path) / Path("dataset_iterator_profiling_" + device_id + ".txt")).toString(); return Status::OK(); } + +Status DatasetIteratorTracing::ChangeFileMode() { + if (value_.empty()) { + return Status::OK(); + } + + if (chmod(common::SafeCStr(file_path_), S_IRUSR | S_IWUSR) == -1) { + std::string err_str = "Change file mode failed," + file_path_; + return Status(StatusCode::kUnexpectedError, err_str); + } + return Status::OK(); +} } // namespace dataset } // namespace mindspore diff --git a/mindspore/ccsrc/minddata/dataset/engine/perf/dataset_iterator_tracing.h b/mindspore/ccsrc/minddata/dataset/engine/perf/dataset_iterator_tracing.h index e7ba237a0a..b495aa83f4 100644 --- a/mindspore/ccsrc/minddata/dataset/engine/perf/dataset_iterator_tracing.h +++ b/mindspore/ccsrc/minddata/dataset/engine/perf/dataset_iterator_tracing.h @@ -43,6 +43,8 @@ class DatasetIteratorTracing : public Tracing { Status Init(const std::string &dir_path, const std::string &device_id) override; + Status ChangeFileMode() override; + private: std::vector value_; }; diff --git a/mindspore/ccsrc/minddata/dataset/engine/perf/device_queue_tracing.cc b/mindspore/ccsrc/minddata/dataset/engine/perf/device_queue_tracing.cc index 776b483b79..174fbf5129 100644 --- a/mindspore/ccsrc/minddata/dataset/engine/perf/device_queue_tracing.cc +++ b/mindspore/ccsrc/minddata/dataset/engine/perf/device_queue_tracing.cc @@ -14,10 +14,12 @@ * limitations under the License. */ +#include #include #include #include "minddata/dataset/engine/perf/device_queue_tracing.h" #include "minddata/dataset/util/path.h" +#include "mindspore/core/utils/ms_utils.h" namespace mindspore { namespace dataset { @@ -60,5 +62,17 @@ Status DeviceQueueTracing::Init(const std::string &dir_path, const std::string & file_path_ = (Path(dir_path) / Path("device_queue_profiling_" + device_id + ".txt")).toString(); return Status::OK(); } + +Status DeviceQueueTracing::ChangeFileMode() { + if (value_.empty()) { + return Status::OK(); + } + + if (chmod(common::SafeCStr(file_path_), S_IRUSR | S_IWUSR) == -1) { + std::string err_str = "Change file mode failed," + file_path_; + return Status(StatusCode::kUnexpectedError, err_str); + } + return Status::OK(); +} } // namespace dataset } // namespace mindspore diff --git a/mindspore/ccsrc/minddata/dataset/engine/perf/device_queue_tracing.h b/mindspore/ccsrc/minddata/dataset/engine/perf/device_queue_tracing.h index 32f9d2d8c2..20afa6e8ee 100644 --- a/mindspore/ccsrc/minddata/dataset/engine/perf/device_queue_tracing.h +++ b/mindspore/ccsrc/minddata/dataset/engine/perf/device_queue_tracing.h @@ -43,6 +43,8 @@ class DeviceQueueTracing : public Tracing { Status Init(const std::string &dir_path, const std::string &device_id) override; + Status ChangeFileMode() override; + private: std::vector value_; }; diff --git a/mindspore/ccsrc/minddata/dataset/engine/perf/monitor.cc b/mindspore/ccsrc/minddata/dataset/engine/perf/monitor.cc index 6407780284..72c6f8a91c 100644 --- a/mindspore/ccsrc/minddata/dataset/engine/perf/monitor.cc +++ b/mindspore/ccsrc/minddata/dataset/engine/perf/monitor.cc @@ -48,6 +48,7 @@ Status Monitor::operator()() { // Output all profiling data upon request. tree_->GetProfilingManager()->SaveProfilingData(); + tree_->GetProfilingManager()->ChangeFileMode(); return Status::OK(); } diff --git a/mindspore/ccsrc/minddata/dataset/engine/perf/profiling.cc b/mindspore/ccsrc/minddata/dataset/engine/perf/profiling.cc index f3d4a39acb..e94b814bcb 100644 --- a/mindspore/ccsrc/minddata/dataset/engine/perf/profiling.cc +++ b/mindspore/ccsrc/minddata/dataset/engine/perf/profiling.cc @@ -14,6 +14,7 @@ * limitations under the License. */ #include "minddata/dataset/engine/perf/profiling.h" +#include #include #include #include @@ -162,6 +163,21 @@ Status ProfilingManager::SaveProfilingData() { return Status::OK(); } +Status ProfilingManager::ChangeFileMode() { + if (!IsProfilingEnable()) { + return Status::OK(); + } + MS_LOG(INFO) << "Start to change file mode."; + for (auto node : tracing_nodes_) { + RETURN_IF_NOT_OK(node.second->ChangeFileMode()); + } + for (auto node : sampling_nodes_) { + RETURN_IF_NOT_OK(node.second->ChangeFileMode()); + } + MS_LOG(INFO) << "Change file mode end."; + return Status::OK(); +} + int64_t ProfilingTime::GetCurMilliSecond() { // because cpplint does not allow using namespace using std::chrono::duration_cast; diff --git a/mindspore/ccsrc/minddata/dataset/engine/perf/profiling.h b/mindspore/ccsrc/minddata/dataset/engine/perf/profiling.h index 41564df33b..2d86e2d5af 100644 --- a/mindspore/ccsrc/minddata/dataset/engine/perf/profiling.h +++ b/mindspore/ccsrc/minddata/dataset/engine/perf/profiling.h @@ -52,6 +52,8 @@ class Profiling : std::enable_shared_from_this { // Profiling name virtual std::string Name() const = 0; + virtual Status ChangeFileMode() = 0; + protected: std::string file_path_; }; @@ -108,6 +110,8 @@ class ProfilingManager { // Launch monitoring thread. Status LaunchMonitor(); + Status ChangeFileMode(); + private: std::unique_ptr perf_monitor_; std::unordered_map> tracing_nodes_;