process/thread IDs in API records

[ROCm/roctracer commit: 65d8c3be39]
This commit is contained in:
Evgeny
2018-11-23 00:08:36 -06:00
rodzic b4113a1023
commit 5a2cf2fea8
3 zmienionych plików z 37 dodań i 14 usunięć
@@ -20,8 +20,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
#ifndef INC_ROCTRACER_PROF_PROTOCOL_H_
#define INC_ROCTRACER_PROF_PROTOCOL_H_
#ifndef INC_EXT_PROF_PROTOCOL_H_
#define INC_EXT_PROF_PROTOCOL_H_
// Traced API domains
typedef enum {
@@ -52,8 +52,16 @@ struct activity_record_t {
activity_correlation_id_t correlation_id; // activity correlation ID
uint64_t begin_ns; // host begin timestamp
uint64_t end_ns; // host end timestamp
int device_id; // device id
uint64_t stream_id; // stream id
union {
struct {
int device_id; // device id
uint64_t queue_id; // queue id
};
struct {
uint32_t process_id; // device id
uint32_t thread_id; // thread id
};
};
size_t bytes; // data size bytes
};
@@ -62,4 +70,4 @@ typedef activity_record_t* (*activity_sync_callback_t)(uint32_t cid, activity_re
// Activity async calback type
typedef void (*activity_async_callback_t)(uint32_t op, void* record, void* arg);
#endif // INC_ROCTRACER_PROF_PROTOCOL_H_
#endif // INC_EXT_PROF_PROTOCOL_H_
@@ -29,6 +29,8 @@ THE SOFTWARE.
#include <mutex>
#include <string.h>
#include <pthread.h>
#include <unistd.h>
#include <sys/syscall.h>
#include "ext/hsa_rt_utils.hpp"
#include "util/exception.h"
@@ -276,7 +278,7 @@ DESTRUCTOR_API void destructor() {
util::Logger::Destroy();
}
roctracer_record_t* SyncActivityCallback(
roctracer_record_t* HIP_SyncActivityCallback(
uint32_t activity_id,
roctracer_record_t* record,
const void* callback_data,
@@ -303,7 +305,8 @@ roctracer_record_t* SyncActivityCallback(
return record;
} else {
record->end_ns = timer.timestamp_ns();
Kalmar::CLAMP::GetActivityCoord(&(record->device_id), &(record->stream_id));
record->process_id = syscall(__NR_getpid);
record->thread_id = syscall(__NR_gettid);
pool->Write(*record);
// Clearing record in HCC
Kalmar::CLAMP::SetActivityRecord(0);
@@ -311,7 +314,7 @@ roctracer_record_t* SyncActivityCallback(
}
}
void AsyncActivityCallback(
void HCC_AsyncActivityCallback(
uint32_t op_id,
void* record,
void* arg)
@@ -460,12 +463,12 @@ PUBLIC_API roctracer_status_t roctracer_enable_activity(
roctracer_enable_activity(ACTIVITY_DOMAIN_HIP_API, HIP_API_ID_ANY, pool);
break;
case ACTIVITY_DOMAIN_HCC_OPS: {
const bool err = Kalmar::CLAMP::SetActivityCallback(id, (void*)roctracer::AsyncActivityCallback, (void*)pool);
const bool err = Kalmar::CLAMP::SetActivityCallback(id, (void*)roctracer::HCC_AsyncActivityCallback, (void*)pool);
if (err == true) HCC_EXC_RAISING(ROCTRACER_STATUS_HCC_OPS_ERR, "Kalmar::CLAMP::SetActivityCallback error");
break;
}
case ACTIVITY_DOMAIN_HIP_API: {
const hipError_t hip_err = hipRegisterActivityCallback(id, (void*)roctracer::SyncActivityCallback, (void*)pool);
const hipError_t hip_err = hipRegisterActivityCallback(id, (void*)roctracer::HIP_SyncActivityCallback, (void*)pool);
if (hip_err != hipSuccess) HIP_EXC_RAISING(ROCTRACER_STATUS_HIP_API_ERR, "hipRegisterActivityCallback error(" << hip_err << ")");
break;
}
@@ -212,14 +212,26 @@ void activity_callback(const char* begin, const char* end, void* arg) {
fprintf(stdout, "\tActivity records:\n"); fflush(stdout);
while (record < end_record) {
const char * name = roctracer_id_string(record->domain, record->activity_id, record->kind);
fprintf(stdout, "\t%s\tcorrelation_id(%lu) time_ns(%lu:%lu) device_id(%d) stream_id(%lu)",
fprintf(stdout, "\t%s\tcorrelation_id(%lu) time_ns(%lu:%lu)",
name,
record->correlation_id,
record->begin_ns,
record->end_ns,
record->device_id,
record->stream_id
record->end_ns
);
if (record->domain == ACTIVITY_DOMAIN_HIP_API) {
fprintf(stdout, " process_id(%u) thread_id(%u)",
record->process_id,
record->thread_id
);
} else if (record->domain == ACTIVITY_DOMAIN_HCC_OPS) {
fprintf(stdout, " device_id(%d) queue_id(%lu)",
record->device_id,
record->queue_id
);
} else {
fprintf(stderr, "Bad domain %d\n", record->domain);
abort();
}
if (record->activity_id == hc::HSA_OP_ID_COPY) fprintf(stdout, " bytes(0x%zx)", record->bytes);
fprintf(stdout, "\n");
fflush(stdout);