void disk_thread_debug(char * argv[], uint32_t tcpRef, void *bufRef) { char *pChar=uma_dbg_get_buffer(); int i; rozofs_disk_thread_ctx_t *p = rozofs_disk_thread_ctx_tb; int startIdx,stopIdx; rozofs_disk_thread_stat_t sum; int last=0; if (argv[1] != NULL) { if (strcmp(argv[1],"reset")==0) { for (i=0; i<af_unix_disk_thread_count; i++) { memset(&p[i].stat,0,sizeof(p[i].stat)); } uma_dbg_send(tcpRef,bufRef,TRUE,"Reset Done"); return; } pChar = disk_thread_debug_help(pChar); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } memset(&sum, 0, sizeof(sum)); stopIdx = 0; last = 0; while (last == 0) { startIdx = stopIdx; if ((af_unix_disk_thread_count - startIdx) > THREAD_PER_LINE) { stopIdx = startIdx + THREAD_PER_LINE; } else { stopIdx = af_unix_disk_thread_count; last = 1; } new_line("Thread number"); for (i=startIdx; i<stopIdx; i++) { display_val(p[i].thread_idx); } if (last) { display_txt("Total"); } display_line_topic("Read Requests"); display_line_val(" number", diskRead_count); display_line_val(" No such file",diskRead_nosuchfile); display_line_val(" Unknown cid/sid",diskRead_badCidSid); display_line_val(" error spare",diskRead_error_spare); display_line_val(" error",diskRead_error); display_line_val(" Bytes",diskRead_Byte_count); display_line_val(" Cumulative Time (us)",diskRead_time); display_line_div(" Average Bytes",diskRead_Byte_count,diskRead_count); display_line_div(" Average Time (us)",diskRead_time,diskRead_count); display_line_div(" Throughput (MBytes/s)",diskRead_Byte_count,diskRead_time); display_line_topic("Write Requests"); display_line_val(" number", diskWrite_count); display_line_val(" Unknown cid/sid",diskWrite_badCidSid); display_line_val(" error",diskWrite_error); display_line_val(" Bytes",diskWrite_Byte_count); display_line_val(" Cumulative Time (us)",diskWrite_time); display_line_div(" Average Bytes",diskWrite_Byte_count,diskWrite_count); display_line_div(" Average Time (us)",diskWrite_time,diskWrite_count); display_line_div(" Throughput (MBytes/s)",diskWrite_Byte_count,diskWrite_time); display_line_topic("Truncate Requests"); display_line_val(" number", diskTruncate_count); display_line_val(" Unknown cid/sid",diskTruncate_badCidSid); display_line_val(" error",diskTruncate_error); display_line_val(" Cumulative Time (us)",diskTruncate_time); display_line_div(" Average Time (us)",diskTruncate_time,diskTruncate_count); display_line_topic(""); pChar += sprintf(pChar,"\n"); } uma_dbg_send(tcpRef,bufRef,TRUE,uma_dbg_get_buffer()); }
/*__________________________________________________________________________ */ void dbg_show_tmr(char * argv[], uint32_t tcpRef, void *bufRef) { rozofs_tmr_display(localBuf); uma_dbg_send(tcpRef, bufRef, TRUE, localBuf); }
/* **_______________________________________________________________ */ void show_expt_thread(char * argv[], uint32_t tcpRef, void *bufRef) { char *pChar = uma_dbg_get_buffer(); int ret; int period; if (argv[1] == NULL) { show_expt_thread_stats_display(pChar); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } if (strcmp(argv[1],"reset")==0) { pChar = show_expt_thread_stats_display(pChar); pChar +=sprintf(pChar,"\nStatistics have been cleared\n"); expt_poll_stats[0] = 0; expt_poll_stats[1] = 0; expt_write_count = 0; expt_write_error = 0; expt_flush_error = 0; expt_write_bytes_count = 0; expt_write_th_rq_count = 0; uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } if (strcmp(argv[1],"period")==0) { if (argv[2] == NULL) { show_expt_thread_help(pChar); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } ret = sscanf(argv[2], "%d", &period); if (ret != 1) { show_expt_thread_help(pChar); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } /* ** change the period of the thread */ if (period == 0) { uma_dbg_send(tcpRef, bufRef, TRUE, "value not supported\n"); return; } expt_thread_period_count = period; uma_dbg_send(tcpRef, bufRef, TRUE, "Done\n"); return; } if (strcmp(argv[1],"disable")==0) { expt_enable = 0; uma_dbg_send(tcpRef, bufRef, TRUE,"inode tracking is disabled"); return; } if (strcmp(argv[1],"enable")==0) { expt_enable = 1; uma_dbg_send(tcpRef, bufRef, TRUE,"inode tracking is enabled"); return; } show_expt_thread_help(pChar); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; }
void rozofs_fuse_show(char * argv[], uint32_t tcpRef, void *bufRef) { uint32_t buffer_count=0; char status[16]; char *pChar = uma_dbg_get_buffer(); buffer_count = ruc_buf_getFreeBufferCount(rozofs_fuse_ctx_p->fuseReqPoolRef); /* ** check if the session has been exited */ if (fuse_session_exited(rozofs_fuse_ctx_p->se)) sprintf(status,"exited"); else sprintf(status,"running"); pChar += sprintf(pChar,"FUSE %8s - %d/%d ctx remaining\n", status, buffer_count, rozofs_fuse_ctx_p->initBufCount); /* ** display the cache mode */ pChar += sprintf(pChar,"FS Mode : "); if (rozofs_mode== 0) { pChar += sprintf(pChar,"standard\n"); } else { pChar += sprintf(pChar,"Block\n"); } pChar += sprintf(pChar,"cache Mode : "); switch (rozofs_cache_mode) { default: case 0: pChar += sprintf(pChar,"default\n"); break; case 1: pChar += sprintf(pChar,"direct_io\n"); break; case 2: pChar += sprintf(pChar,"keep_cache\n"); break; } int i; for (i = 0; i < RZ_FUSE_WRITE_MAX; i++) { pChar +=sprintf(pChar,"cpt_%d: %8llu\n",i,(long long unsigned int)rozofs_write_merge_stats_tab[i]); } /** * clear the stats */ memset(rozofs_write_merge_stats_tab,0,sizeof(uint64_t)*RZ_FUSE_WRITE_MAX); /** * read/write statistics */ pChar +=sprintf(pChar,"flush buf. count: %8llu\n",(long long unsigned int)rozofs_fuse_read_write_stats_buf.flush_buf_cpt); pChar +=sprintf(pChar,"readahead count: %8llu\n",(long long unsigned int)rozofs_fuse_read_write_stats_buf.readahead_cpt); pChar +=sprintf(pChar,"read req. count: %8llu\n",(long long unsigned int)rozofs_fuse_read_write_stats_buf.read_req_cpt); pChar +=sprintf(pChar,"read fuse count: %8llu\n",(long long unsigned int)rozofs_fuse_read_write_stats_buf.read_fuse_cpt); memset(&rozofs_fuse_read_write_stats_buf,0,sizeof(rozofs_fuse_read_write_stats)); /* ** Per array statistics */ pChar +=sprintf(pChar,"Per Read Array statitics:\n" ); for (i = 0; i < 32; i++) { if (rozofs_read_buf_section_table[i]!= 0) pChar +=sprintf(pChar," %6d: %8llu\n",(i+1)*ROZOFS_PAGE_SZ,(long long unsigned int)rozofs_read_buf_section_table[i]); } pChar +=sprintf(pChar,"Per Write Array statitics:\n" ); for (i = 0; i < 32; i++) { if (rozofs_write_buf_section_table[i]!= 0) pChar +=sprintf(pChar," %6d: %8llu\n",(i+1)*ROZOFS_PAGE_SZ,(long long unsigned int)rozofs_write_buf_section_table[i]); } memset (rozofs_write_buf_section_table,0,sizeof(uint64_t)*ROZOFS_FUSE_NB_OF_BUSIZE_SECTION_MAX); memset (rozofs_read_buf_section_table,0,sizeof(uint64_t)*ROZOFS_FUSE_NB_OF_BUSIZE_SECTION_MAX); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); }
/*_______________________________________________________________________ * Display throughput counters * * @param pChar Where to format the ouput */ void display_throughput (char * argv[], uint32_t tcpRef, void *bufRef) { char * pChar = uma_dbg_get_buffer(); int ret,val,what=0; int avg=0; int i=1; while (argv[i] != NULL) { if (strcasecmp(argv[i],"col")==0) { i++; if (argv[i] == NULL) { pChar += rozofs_string_append(pChar,"\nthroughput col <#col>\n"); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } ret = sscanf(argv[i],"%d",&val); if (ret != 1) { pChar += rozofs_string_append(pChar,"\nthroughput col <#col>\n"); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } i++; rozofs_thr_set_column(val); continue; } if (strcasecmp(argv[i],"avg")==0) { i++; avg=1; continue; } if (strcasecmp(argv[i],"read")==0) { i++; what |= 1; continue; } if (strcasecmp(argv[i],"write")==0) { i++; what |= 2; continue; } pChar += rozofs_string_append(pChar,"\nunexpected parameter "); pChar += rozofs_string_append(pChar,argv[i]); pChar += rozofs_string_append(pChar,"\nthroughput [read|write|col <#col>|avg]\n"); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } rozofs_thr_set_average(avg); switch (what) { case 1: pChar = rozofs_thr_display(pChar, &rozofs_thr_counter[ROZOFS_READ_THR_E],1); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; case 2: pChar = rozofs_thr_display(pChar, &rozofs_thr_counter[ROZOFS_WRITE_THR_E],1); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; default: pChar = rozofs_thr_display(pChar, rozofs_thr_counter, 2); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } }
void rozofs_fuse_show(char * argv[], uint32_t tcpRef, void *bufRef) { uint32_t buffer_count=0; char status[16]; int new_val; char *pChar = uma_dbg_get_buffer(); if (argv[1] != NULL) { if (strcmp(argv[1],"loop")==0) { errno = 0; if (argv[2] == NULL) { pChar += sprintf(pChar, "argument is missing\n"); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } new_val = (int) strtol(argv[2], (char **) NULL, 10); if (errno != 0) { pChar += sprintf(pChar, "bad value %s\n",argv[2]); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } /* ** */ if (new_val == 0) { pChar += sprintf(pChar, "unsupported value %s\n",argv[2]); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } rozofs_fuse_loop_count = new_val; } } uint64_t old_ticker = rozofs_fuse_req_tic; rozofs_fuse_get_ticker(); buffer_count = ruc_buf_getFreeBufferCount(rozofs_fuse_ctx_p->fuseReqPoolRef); /* ** check if the session has been exited */ if (fuse_session_exited(rozofs_fuse_ctx_p->se)) sprintf(status,"exited"); else sprintf(status,"running"); pChar += sprintf(pChar,"FUSE %8s - %d/%d ctx remaining\n", status, buffer_count, rozofs_fuse_ctx_p->initBufCount); /* ** display the cache mode */ pChar += sprintf(pChar,"poll count : %d\n",rozofs_fuse_loop_count); pChar += sprintf(pChar,"FS Mode : "); if (rozofs_mode== 0) { pChar += sprintf(pChar,"standard\n"); } else { pChar += sprintf(pChar,"Block\n"); } pChar += sprintf(pChar,"FS Xattr : %s\n",(rozofs_xattr_disable==1)?"Disabled":"Enabled"); pChar += sprintf(pChar,"cache Mode : "); switch (rozofs_cache_mode) { default: case 0: pChar += sprintf(pChar,"default\n"); break; case 1: pChar += sprintf(pChar,"direct_io\n"); break; case 2: pChar += sprintf(pChar,"keep_cache\n"); break; } int i; for (i = 0; i < RZ_FUSE_WRITE_MAX; i++) { pChar +=sprintf(pChar,"cpt_%d: %8llu\n",i,(long long unsigned int)rozofs_write_merge_stats_tab[i]); } /** * clear the stats */ uint64_t delay = rozofs_fuse_req_tic-old_ticker; memset(rozofs_write_merge_stats_tab,0,sizeof(uint64_t)*RZ_FUSE_WRITE_MAX); pChar +=sprintf(pChar,"fuse req_in (count/bytes): %8llu/%llu\n",(long long unsigned int)rozofs_fuse_req_count, (long long unsigned int)rozofs_fuse_req_byte_in); if (delay) { pChar +=sprintf(pChar,"fuse req_in/s : %8llu/%llu\n",(long long unsigned int)(rozofs_fuse_req_count*1000000/delay), (long long unsigned int)(rozofs_fuse_req_byte_in*1000000/delay)); } pChar +=sprintf(pChar,"fuse req_in EAGAIN/ENOENT: %8llu/%llu\n",(long long unsigned int)rozofs_fuse_req_eagain_count, (long long unsigned int)rozofs_fuse_req_enoent_count); pChar +=sprintf(pChar,"fuse buffer depletion : %8llu\n",(long long unsigned int)rozofs_fuse_buffer_depletion_count); rozofs_fuse_buffer_depletion_count =0; rozofs_fuse_req_count = 0; rozofs_fuse_req_byte_in = 0; rozofs_fuse_req_eagain_count = 0; rozofs_fuse_req_enoent_count = 0; /** * read/write statistics */ pChar +=sprintf(pChar,"flush buf. count : %8llu\n",(long long unsigned int)rozofs_fuse_read_write_stats_buf.flush_buf_cpt); pChar +=sprintf(pChar," start aligned/unaligned : %8llu/%llu\n", (long long unsigned int)rozofs_aligned_write_start[0], (long long unsigned int)rozofs_aligned_write_start[1] ); pChar +=sprintf(pChar," end aligned/unaligned : %8llu/%llu\n", (long long unsigned int)rozofs_aligned_write_end[0], (long long unsigned int)rozofs_aligned_write_end[1] ); pChar +=sprintf(pChar,"readahead count : %8llu\n",(long long unsigned int)rozofs_fuse_read_write_stats_buf.readahead_cpt); pChar +=sprintf(pChar,"read req. count : %8llu\n",(long long unsigned int)rozofs_fuse_read_write_stats_buf.read_req_cpt); pChar +=sprintf(pChar,"read fuse count : %8llu\n",(long long unsigned int)rozofs_fuse_read_write_stats_buf.read_fuse_cpt); memset(&rozofs_fuse_read_write_stats_buf,0,sizeof(rozofs_fuse_read_write_stats)); { int k; for (k= 0;k< 2;k++) { rozofs_aligned_write_start[k] = 0; rozofs_aligned_write_end[k] = 0; } } /* ** Per array statistics */ pChar +=sprintf(pChar,"Per Read Array statitics:\n" ); for (i = 0; i < 32; i++) { if (rozofs_read_buf_section_table[i]!= 0) pChar +=sprintf(pChar," %6d: %8llu\n",(i+1)*ROZOFS_PAGE_SZ,(long long unsigned int)rozofs_read_buf_section_table[i]); } pChar +=sprintf(pChar,"Per Write Array statitics:\n" ); for (i = 0; i < 32; i++) { if (rozofs_write_buf_section_table[i]!= 0) pChar +=sprintf(pChar," %6d: %8llu\n",(i+1)*ROZOFS_PAGE_SZ,(long long unsigned int)rozofs_write_buf_section_table[i]); } memset (rozofs_write_buf_section_table,0,sizeof(uint64_t)*ROZOFS_FUSE_NB_OF_BUSIZE_SECTION_MAX); memset (rozofs_read_buf_section_table,0,sizeof(uint64_t)*ROZOFS_FUSE_NB_OF_BUSIZE_SECTION_MAX); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); }
void north_lbg_entries_debug_show(uint32_t tcpRef, void *bufRef) { char *pChar = uma_dbg_get_buffer(); int siocinq_value; int siocoutq_value; { north_lbg_ctx_t *lbg_p; ruc_obj_desc_t *pnext; int i; pChar += sprintf(pChar, " LBG Name | lbg_id | idx | sock | state | rdy | Queue | Cnx Attpts | Xmit Attpts | Recv count | Recv-Q | Send-Q |\n"); pChar += sprintf(pChar, "--------------------------+--------+------+------+------------+-----+-----------+------------+-------------+-------------+-----------+-----------+\n"); pnext = (ruc_obj_desc_t*) NULL; while ((lbg_p = (north_lbg_ctx_t*) ruc_objGetNext((ruc_obj_desc_t*) & north_lbg_context_activeListHead, &pnext)) != (north_lbg_ctx_t*) NULL) { if (lbg_p->nb_entries_conf == 0) continue; north_lbg_entry_ctx_t *entry_p = lbg_p->entry_tb; af_unix_ctx_generic_t *sock_p; for (i = 0; i < lbg_p->nb_entries_conf; i++, entry_p++) { sock_p = af_unix_getObjCtx_p(entry_p->sock_ctx_ref); pChar += sprintf(pChar, " %-24s |", lbg_p->name); pChar += sprintf(pChar, " %4d |", lbg_p->index); if (lbg_p->active_lbg_entry == i) { pChar += sprintf(pChar, " %2d *|", i); } else { pChar += sprintf(pChar, " %2d |", i); } pChar += sprintf(pChar, " %4d |", sock_p->socketRef); /** socket */ pChar += sprintf(pChar, " %s |", lbg_north_state2String(entry_p->state)); while(1) { af_unix_ctx_generic_t *sock_p ; sock_p = af_unix_getObjCtx_p(entry_p->sock_ctx_ref); if (sock_p == NULL) { pChar += sprintf(pChar, " %s |","???"); break; } pChar += sprintf(pChar, " %s |",(sock_p->cnx_availability_state == AF_UNIX_CNX_AVAILABLE )?"YES":" NO"); break; } pChar += sprintf(pChar, " %s |", ruc_objIsEmptyList((ruc_obj_desc_t*) & entry_p->xmitList) ? " EMPTY" : "NON EMPTY"); pChar += sprintf(pChar, " %10llu |", (unsigned long long int) entry_p->stats.totalConnectAttempts); pChar += sprintf(pChar, " %10llu |", (unsigned long long int) entry_p->stats.totalXmit); pChar += sprintf(pChar, " %10llu |", (unsigned long long int) entry_p->stats.totalRecv); siocinq_value = 0; siocoutq_value = 0; if (sock_p->socketRef) { ioctl(sock_p->socketRef,SIOCINQ,&siocinq_value); ioctl(sock_p->socketRef,SIOCOUTQ,&siocoutq_value); } pChar += sprintf(pChar, " %8d |", siocinq_value); pChar += sprintf(pChar, " %8d |\n",siocoutq_value); } } } uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); }
/*__________________________________________________________________________ Trace level debug function ========================================================================== PARAMETERS: - RETURN: none ==========================================================================*/ void north_lbg_debug_show(char * argv[],uint32_t tcpRef, void *bufRef) { char *pChar = uma_dbg_get_buffer(); int state; pChar += sprintf(pChar, "number of North Load Balancer contexts [size](initial/allocated) :[%u] %u/%u\n", (unsigned int) sizeof (north_lbg_ctx_t), (unsigned int) north_lbg_context_count, (unsigned int) (north_lbg_context_allocated)); { north_lbg_ctx_t *lbg_p; ruc_obj_desc_t *pnext; int i; pnext = (ruc_obj_desc_t*) NULL; while ((lbg_p = (north_lbg_ctx_t*) ruc_objGetNext((ruc_obj_desc_t*) & north_lbg_context_activeListHead, &pnext)) != (north_lbg_ctx_t*) NULL) { if (lbg_p->nb_entries_conf == 0) continue; state = north_lbg_eval_global_state(lbg_p); pChar += sprintf(pChar, "NAME: %-34s %s\n", lbg_p->name, lbg_north_state2String(state)); pChar += sprintf(pChar, " %-25s: %d - active entry %d\n", "active/standby", lbg_p->active_standby_mode, lbg_p->active_lbg_entry); pChar += sprintf(pChar, " %-25s: %s\n", "local/remote",lbg_p->local?"local":"remote"); pChar += sprintf(pChar, " size : %12u\n", lbg_p->nb_entries_conf); pChar += sprintf(pChar, " total Up/Down Transitions: %12llu\n", (unsigned long long int) lbg_p->stats.totalUpDownTransition); north_lbg_entry_ctx_t *entry_p = lbg_p->entry_tb; pChar += sprintf(pChar, " Main Queue : %s\n", ruc_objIsEmptyList((ruc_obj_desc_t*) & lbg_p->xmitList[0]) ? "EMPTY" : "NON EMPTY"); for (i = 0; i < lbg_p->nb_entries_conf; i++, entry_p++) { north_lbg_stats_t *stats_p = &entry_p->stats; if (stats_p->timestampCount == 0) continue; pChar += sprintf(pChar, " Entry[%d]\n", i); pChar += sprintf(pChar, " state : %s\n", lbg_north_state2String(entry_p->state)); pChar += sprintf(pChar, " Queue_entry : %s\n", ruc_objIsEmptyList((ruc_obj_desc_t*) & entry_p->xmitList) ? "EMPTY" : "NON EMPTY"); pChar += sprintf(pChar, " Cnx Attempts : %12llu\n", (unsigned long long int) entry_p->stats.totalConnectAttempts); pChar += sprintf(pChar, " Xmit messages : %12llu\n", (unsigned long long int) entry_p->stats.totalXmit); pChar += sprintf(pChar, " Recv messages : %12llu\n", (unsigned long long int) entry_p->stats.totalRecv); #if 0 pChar += sprintf(pChar, " Xmit Perf. (count/time) : %"PRIu64" / %"PRIu64" us / cumul %"PRIu64" us\n", stats_p->timestampCount, stats_p->timestampCount ? stats_p->timestampElasped / stats_p->timestampCount : 0, stats_p->timestampElasped); #endif stats_p->timestampCount = 0; stats_p->timestampElasped = 0; } pChar += sprintf(pChar, " Cumulated\n"); pChar += sprintf(pChar, " total Xmit messages : %12llu\n", (unsigned long long int) lbg_p->stats.totalXmit); pChar += sprintf(pChar, " Main Xmit Queue Len : %12llu\n", (unsigned long long int) lbg_p->stats.xmitQueuelen); pChar += sprintf(pChar, " total Xmit retries : %12llu\n", (unsigned long long int) lbg_p->stats.totalXmitRetries); pChar += sprintf(pChar, " total Xmit aborted : %12llu\n", (unsigned long long int) lbg_p->stats.totalXmitAborts); pChar += sprintf(pChar, " total Xmit error : %12llu\n", (unsigned long long int) lbg_p->stats.totalXmitError); pChar += sprintf(pChar, " total Recv messages : %12llu\n", (unsigned long long int) lbg_p->stats.totalRecv); // pChar += sprintf(pChar," total Xmit Bytes : %12llu\n",(unsigned long long int)lbg_p->stats.totalXmitBytes); pChar += sprintf(pChar, "\n"); } } uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); }
/** * file lock @param argv : standard argv[] params of debug callback @param tcpRef : reference of the TCP debug connection @param bufRef : reference of an output buffer @retval none */ void show_flock(char * argv[], uint32_t tcpRef, void *bufRef) { display_file_lock(uma_dbg_get_buffer()); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); }
/** * LV2 cache statistics @param argv : standard argv[] params of debug callback @param tcpRef : reference of the TCP debug connection @param bufRef : reference of an output buffer @retval none */ void show_lv2_attribute_cache(char * argv[], uint32_t tcpRef, void *bufRef) { lv2_cache_display( &cache, uma_dbg_get_buffer()); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); }
void show_profiler_conf(char * argv[], uint32_t tcpRef, void *bufRef) { uma_dbg_send(tcpRef, bufRef, TRUE, "unavailable"); }
void rozofs_fuse_show(char * argv[], uint32_t tcpRef, void *bufRef) { uint32_t buffer_count=0; char status[16]; int new_val; int ret; char *pChar = uma_dbg_get_buffer(); if (argv[1] != NULL) { if (strcmp(argv[1],"kernel")==0) { if (rozofs_fuse_ctx_p->ioctl_supported) { ioctl(rozofs_fuse_ctx_p->fd,100,NULL); pChar += sprintf(pChar, "check result in dmesg: ROZOFS_FUSE...\n"); } else { pChar += sprintf(pChar, "ioctl not supported with that fuse kernel version\n"); } uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } if (strcmp(argv[1],"loop")==0) { errno = 0; if (argv[2] == NULL) { pChar += sprintf(pChar, "argument is missing\n"); rozofs_fuse_show_usage(pChar); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } new_val = (int) strtol(argv[2], (char **) NULL, 10); if (errno != 0) { pChar += sprintf(pChar, "bad value %s\n",argv[2]); rozofs_fuse_show_usage(pChar); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } /* ** */ if (new_val == 0) { pChar += sprintf(pChar, "unsupported value %s\n",argv[2]); rozofs_fuse_show_usage(pChar); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } rozofs_fuse_loop_count = new_val; pChar += sprintf(pChar, "new polling request count %d\n",rozofs_fuse_loop_count); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } if (strcmp(argv[1],"dir")==0) { if (rozofs_fuse_ctx_p->ioctl_supported==0) { pChar += sprintf(pChar, "ioctl not supported with that fuse kernel version\n"); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } errno = 0; if (argv[2] == NULL) { pChar += sprintf(pChar, "argument is missing\n"); rozofs_fuse_show_usage(pChar); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } if (strcmp(argv[2],"enable")==0) { ret = ioctl(rozofs_fuse_ctx_p->fd,4,NULL); if (ret < 0) { pChar += sprintf(pChar, "ioctl failed %s\n",strerror(errno)); } else { pChar += sprintf(pChar, "directory attributes are invalidated on mknod/rmdir/unlink...\n"); rozofs_fuse_ctx_p->dir_attr_invalidate = 1; } uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } if (strcmp(argv[2],"disable")==0) { ret = ioctl(rozofs_fuse_ctx_p->fd,3,NULL); if (ret < 0) { pChar += sprintf(pChar, "ioctl failed %s\n",strerror(errno)); } else { pChar += sprintf(pChar, "directory attributes are not invalidated on mknod/rmdir/unlink...\n"); rozofs_fuse_ctx_p->dir_attr_invalidate = 0; } uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } pChar += sprintf(pChar, "unsupported argument %s\n",argv[2]); rozofs_fuse_show_usage(pChar); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } pChar += sprintf(pChar, "unsupported command %s\n",argv[1]); rozofs_fuse_show_usage(pChar); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } uint64_t old_ticker = rozofs_fuse_req_tic; rozofs_fuse_get_ticker(); buffer_count = ruc_buf_getFreeBufferCount(rozofs_fuse_ctx_p->fuseReqPoolRef); /* ** check if the session has been exited */ if (fuse_session_exited(rozofs_fuse_ctx_p->se)) sprintf(status,"exited"); else sprintf(status,"running"); pChar += sprintf(pChar,"FUSE %8s - %d/%d ctx remaining\n", status, buffer_count, rozofs_fuse_ctx_p->initBufCount); /* ** display the cache mode */ pChar += sprintf(pChar,"buffer sz : %d\n",rozofs_fuse_ctx_p->bufsize); pChar += sprintf(pChar,"poll count : %d\n",rozofs_fuse_loop_count); pChar += sprintf(pChar,"dir attr : %s\n",(rozofs_fuse_ctx_p->dir_attr_invalidate)?"INVALIDATE":"KEEP"); pChar += sprintf(pChar,"FS Mode : "); if (rozofs_mode== 0) { pChar += sprintf(pChar,"standard\n"); } else { pChar += sprintf(pChar,"Block\n"); } pChar += sprintf(pChar,"FS Xattr : %s\n",(rozofs_xattr_disable==1)?"Disabled":"Enabled"); pChar += sprintf(pChar,"cache Mode : "); switch (rozofs_cache_mode) { default: case 0: pChar += sprintf(pChar,"default\n"); break; case 1: pChar += sprintf(pChar,"direct_io\n"); break; case 2: pChar += sprintf(pChar,"keep_cache\n"); break; } int i; for (i = 0; i < RZ_FUSE_WRITE_MAX; i++) { pChar +=sprintf(pChar,"cpt_%d: %8llu\n",i,(long long unsigned int)rozofs_write_merge_stats_tab[i]); } /** * clear the stats */ uint64_t delay = rozofs_fuse_req_tic-old_ticker; memset(rozofs_write_merge_stats_tab,0,sizeof(uint64_t)*RZ_FUSE_WRITE_MAX); pChar +=sprintf(pChar,"fuse req_in (count/bytes): %8llu/%llu\n",(long long unsigned int)rozofs_fuse_req_count, (long long unsigned int)rozofs_fuse_req_byte_in); pChar +=sprintf(pChar,"fuse time :%8llu (%llu)\n", (long long unsigned int)(fuse_profile[P_COUNT]?fuse_profile[P_ELAPSE]/fuse_profile[P_COUNT]:0), (long long unsigned int)fuse_profile[P_COUNT]); if (delay) { pChar +=sprintf(pChar,"fuse req_in/s : %8llu/%llu\n",(long long unsigned int)(rozofs_fuse_req_count*1000000/delay), (long long unsigned int)(rozofs_fuse_req_byte_in*1000000/delay)); } pChar +=sprintf(pChar,"fuse req_in EAGAIN/ENOENT: %8llu/%llu\n",(long long unsigned int)rozofs_fuse_req_eagain_count, (long long unsigned int)rozofs_fuse_req_enoent_count); pChar +=sprintf(pChar,"fuse buffer depletion : %8llu\n",(long long unsigned int)rozofs_fuse_buffer_depletion_count); pChar +=sprintf(pChar,"storcli buffer depletion : %8llu\n",(long long unsigned int)rozofs_storcli_buffer_depletion_count); pChar +=sprintf(pChar,"pending storcli requests : %8d\n",rozofs_storcli_pending_req_count); pChar +=sprintf(pChar,"fuse kernel xoff/xon : %8llu/%llu\n",(long long unsigned int)rozofs_storcli_xoff_count, (long long unsigned int)rozofs_storcli_xon_count); rozofs_storcli_buffer_depletion_count =0; rozofs_fuse_buffer_depletion_count =0; rozofs_fuse_req_count = 0; rozofs_fuse_req_byte_in = 0; rozofs_fuse_req_eagain_count = 0; rozofs_fuse_req_enoent_count = 0; rozofs_storcli_xoff_count = 0; rozofs_storcli_xon_count = 0; /** * read/write statistics */ pChar +=sprintf(pChar,"big write count : %8llu\n",(long long unsigned int)rozofs_fuse_read_write_stats_buf.big_write_cpt); pChar +=sprintf(pChar,"flush buf. count : %8llu\n",(long long unsigned int)rozofs_fuse_read_write_stats_buf.flush_buf_cpt); pChar +=sprintf(pChar," start aligned/unaligned : %8llu/%llu\n", (long long unsigned int)rozofs_aligned_write_start[0], (long long unsigned int)rozofs_aligned_write_start[1] ); pChar +=sprintf(pChar," end aligned/unaligned : %8llu/%llu\n", (long long unsigned int)rozofs_aligned_write_end[0], (long long unsigned int)rozofs_aligned_write_end[1] ); pChar +=sprintf(pChar,"readahead count : %8llu\n",(long long unsigned int)rozofs_fuse_read_write_stats_buf.readahead_cpt); pChar +=sprintf(pChar,"read req. count : %8llu\n",(long long unsigned int)rozofs_fuse_read_write_stats_buf.read_req_cpt); pChar +=sprintf(pChar,"read fuse count : %8llu\n",(long long unsigned int)rozofs_fuse_read_write_stats_buf.read_fuse_cpt); memset(&rozofs_fuse_read_write_stats_buf,0,sizeof(rozofs_fuse_read_write_stats)); { int k; for (k= 0;k< 2;k++) { rozofs_aligned_write_start[k] = 0; rozofs_aligned_write_end[k] = 0; } } /* ** Per array statistics */ pChar +=sprintf(pChar,"Per Read Array statitics:\n" ); for (i = 0; i < ROZOFS_FUSE_NB_OF_BUSIZE_SECTION_MAX; i++) { if (rozofs_read_buf_section_table[i]!= 0) pChar +=sprintf(pChar," %6d: %8llu\n",(i+1)*ROZOFS_PAGE_SZ,(long long unsigned int)rozofs_read_buf_section_table[i]); } pChar +=sprintf(pChar,"Per Write Array statitics:\n" ); for (i = 0; i < ROZOFS_FUSE_NB_OF_BUSIZE_SECTION_MAX; i++) { if (rozofs_write_buf_section_table[i]!= 0) pChar +=sprintf(pChar," %6d: %8llu\n",(i+1)*ROZOFS_PAGE_SZ,(long long unsigned int)rozofs_write_buf_section_table[i]); } memset (rozofs_write_buf_section_table,0,sizeof(uint64_t)*ROZOFS_FUSE_NB_OF_BUSIZE_SECTION_MAX); memset (rozofs_read_buf_section_table,0,sizeof(uint64_t)*ROZOFS_FUSE_NB_OF_BUSIZE_SECTION_MAX); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); }
void show_xattr_flt(char * argv[], uint32_t tcpRef, void *bufRef) { char *pChar = uma_dbg_get_buffer(); int err; if (argv[1] != NULL) { if (strcmp(argv[1],"enable")==0) { if (rozofs_xattr_flt_enable != 1) { rozofs_xattr_flt_enable = 1; uma_dbg_send(tcpRef, bufRef, TRUE, "xattribute filter is now enabled\n"); } else { uma_dbg_send(tcpRef, bufRef, TRUE, "xattribute filter is already enabled\n"); } return; } if (strcmp(argv[1],"status")==0) { rozofs_xattr_flt_status(pChar); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } if (strcmp(argv[1],"add")==0) { if (argv[2] == NULL) { pChar += sprintf(pChar, "argument is missing\n"); pChar = show_xattr_flt_help(pChar); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } err = rozofs_xattr_flt_insert(argv[2]); if (err < 0) { pChar += sprintf(pChar, "cannot insert %s\n",argv[2]); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } uma_dbg_send(tcpRef, bufRef, TRUE, "Done!!\n"); return; } if (strcmp(argv[1],"del")==0) { if (argv[2] == NULL) { pChar += sprintf(pChar, "argument is missing\n"); pChar = show_xattr_flt_help(pChar); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } err = rozofs_xattr_flt_remove(argv[2]); if (err < 0) { pChar += sprintf(pChar, "%s not found\n",argv[2]); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } uma_dbg_send(tcpRef, bufRef, TRUE, "Done!!\n"); return; } if (strcmp(argv[1],"disable")==0) { if (rozofs_xattr_flt_enable != 0) { rozofs_xattr_flt_enable = 0; uma_dbg_send(tcpRef, bufRef, TRUE, "xattribute filter is now disabled\n"); } else { uma_dbg_send(tcpRef, bufRef, TRUE, "xattribute filter is already disabled\n"); } return; } pChar = show_xattr_flt_help(pChar); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); return; } show_xattr_flt_buffer(pChar); uma_dbg_send(tcpRef, bufRef, TRUE, uma_dbg_get_buffer()); }