88 fprintf(stderr,
"m0kemc: missing CPU number\n" 89 "Usage: sudo ./kemc [CPU]\n");
95 printf(
"KE_PAGE_FAULT pid %5d tid %5d addr 0x%016lx wr %u " 96 "fault 0x%04x rdtsc_diff 0x%llx\n",
104 printf(
"KE_CTX_SWITCH prev_pid %5d prev_tid %5d next_pid %5d " 105 "next_tid %5d rdtsc 0x%llx\n",
124 fprintf(stderr,
"Unknown event ID: %u\n",
139 fprintf(stderr,
"m0kemc: Unable to init m0 (%d).\n",
rc);
148 fprintf(stderr,
"m0kemc: Trying to create ADDB2 stob:\t%s\n",
154 fprintf(stderr,
"m0kemc: Unable to start ADDB2 stor.\n");
194 event->pfe_tgid, event->pfe_pid,
196 event->pfe_write_access, event->pfe_fault,
197 event->pfe_rdtsc_ret -
198 event->pfe_rdtsc_call);
206 event->cse_prev_tgid, event->cse_prev_pid,
207 event->cse_next_tgid, event->cse_next_pid,
213 fprintf(stderr,
"Unknown event ID: %u\n",
219 void (*sighandler)(
int),
220 bool use_stdout,
bool use_addb2)
225 memset(
ctx, 0,
sizeof(*
ctx));
227 ctx->kc_use_stdout = use_stdout;
228 ctx->kc_use_addb2 = use_addb2;
230 if (!(
ctx->kc_use_addb2 ||
ctx->kc_use_stdout)) {
231 fprintf(stderr,
"m0kemc: back end not specified\n");
236 ctx->kc_dev_num = dev_num;
239 fprintf(stderr,
"m0kemc: Trying to open:\t%s\n",
240 ctx->kc_kemd_filename);
242 ctx->kc_kemd_fd = open(
ctx->kc_kemd_filename, O_RDONLY);
243 if (
ctx->kc_kemd_fd < 0) {
244 fprintf(stderr,
"m0kemc: Unable to open:%s %d\n",
245 ctx->kc_kemd_filename,
ctx->kc_kemd_fd);
252 sigemptyset(&sa.sa_mask);
253 sa.sa_handler = sighandler;
254 rc = sigaction(SIGINT, &sa,
NULL);
256 fprintf(stderr,
"m0kemc: Unable to set signal handler (%d).\n",
258 close(
ctx->kc_kemd_fd);
262 if (
ctx->kc_use_addb2) {
266 fprintf(stderr,
"m0kemc: Unable to init addb2 back end" 268 close(
ctx->kc_kemd_fd);
278 if (
ctx->kc_use_addb2) {
285 close(
ctx->kc_kemd_fd);
290 if (
ctx->kc_use_stdout)
293 if (
ctx->kc_use_addb2)
299 return read(
ctx->kc_kemd_fd, msg,
sizeof(*msg));
302 int main(
int argc,
char** argv)
319 dev_num = atoi(argv[1]);
323 use_stdout, use_addb2);
330 if ((bytes_read < 0 && errno == -EINTR) ||
333 }
else if (bytes_read < 0) {
334 fprintf(stderr,
"kem_read() returned -1, errno %d\n",
340 assert(bytes_read ==
sizeof(*
ent));
344 fprintf(stderr,
"Caught SIGINT, exit...\n");
void m0_addb2_sys_net_stop(struct m0_addb2_sys *sys)
static void kem_addb2_log(struct ke_msg *msg)
void m0_addb2_sys_sm_stop(struct m0_addb2_sys *sys)
unsigned long long pfe_rdtsc_call
void m0_addb2_sys_sm_start(struct m0_addb2_sys *sys)
unsigned long long cse_rdtsc
void ke_pf_print(struct pf_event *event)
#define M0_ADDB2_PUSH(id,...)
static void kem_int_set(struct kemc_ctx *ctx, unsigned int v)
void m0_addb2_sys_attach(struct m0_addb2_sys *sys, struct m0_addb2_sys *src)
M0_INTERNAL void m0_instance_setup(struct m0 *instance)
static struct kemc_ctx kemc_ctx
M0_ADDB2_ADD(M0_AVI_FS_CREATE, new_fid.f_container, new_fid.f_key, mode, rc)
char kc_kemd_filename[KEMD_FILENAME_SIZE]
static void kem_fini(struct kemc_ctx *ctx)
unsigned long long pfe_rdtsc_ret
void m0_addb2_sys_detach(struct m0_addb2_sys *sys)
static int kem_addb2_init(struct kemc_ctx *ctx)
void kem_print(struct ke_msg *msg)
void m0_node_uuid_string_set(const char *uuid)
int main(int argc, char **argv)
const char * stob_location
static struct fdmi_ctx ctx
static int kem_read(struct kemc_ctx *ctx, struct ke_msg *msg)
void m0_addb2_pop(uint64_t id)
static int kem_init(struct kemc_ctx *ctx, int dev_num, void(*sighandler)(int), bool use_stdout, bool use_addb2)
unsigned long pfe_address
volatile sig_atomic_t kc_done
static unsigned int kem_int_get(struct kemc_ctx *ctx)
unsigned int pfe_write_access
char kc_stob_loc[ADDB2_STOB_NAME_SIZE]
int m0_addb2_sys_stor_start(struct m0_addb2_sys *sys, const char *location, uint64_t key, bool mkfs, bool force, m0_bcount_t size)
struct timeval kem_timestamp
M0_INTERNAL struct m0_fom_domain * m0_fom_dom(void)
M0_INTERNAL struct m0_addb2_sys * m0_addb2_global_get(void)
static void kem_log(struct kemc_ctx *ctx, struct ke_msg *msg)
void ke_cs_print(struct cs_event *event)
struct m0_addb2_sys * fd_addb2_sys
static void kem_addb2_fini(struct kemc_ctx *ctx)
void m0_addb2_sys_stor_stop(struct m0_addb2_sys *sys)
const char * kemd_dev_path
static void kem_sigint(int signum)
M0_INTERNAL void m0_module_fini(struct m0_module *module, int level)
M0_INTERNAL int m0_module_init(struct m0_module *module, int level)