jbd2: track request delay statistics
Track the delay between when we first request that the commit begin and when it actually begins, so we can see how much of a gap exists. In theory, this should just be the remaining scheduling quantuum of the thread which requested the commit (assuming it was not a synchronous operation which triggered the commit request) plus scheduling overhead; however, it's possible that real time processes might get in the way of letting the kjournald thread from executing. Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
此提交包含在:
@@ -533,6 +533,7 @@ int __jbd2_log_start_commit(journal_t *journal, tid_t target)
|
||||
jbd_debug(1, "JBD2: requesting commit %d/%d\n",
|
||||
journal->j_commit_request,
|
||||
journal->j_commit_sequence);
|
||||
journal->j_running_transaction->t_requested = jiffies;
|
||||
wake_up(&journal->j_wait_commit);
|
||||
return 1;
|
||||
} else if (!tid_geq(journal->j_commit_request, target))
|
||||
@@ -898,13 +899,18 @@ static int jbd2_seq_info_show(struct seq_file *seq, void *v)
|
||||
|
||||
if (v != SEQ_START_TOKEN)
|
||||
return 0;
|
||||
seq_printf(seq, "%lu transaction, each up to %u blocks\n",
|
||||
s->stats->ts_tid,
|
||||
s->journal->j_max_transaction_buffers);
|
||||
seq_printf(seq, "%lu transactions (%lu requested), "
|
||||
"each up to %u blocks\n",
|
||||
s->stats->ts_tid, s->stats->ts_requested,
|
||||
s->journal->j_max_transaction_buffers);
|
||||
if (s->stats->ts_tid == 0)
|
||||
return 0;
|
||||
seq_printf(seq, "average: \n %ums waiting for transaction\n",
|
||||
jiffies_to_msecs(s->stats->run.rs_wait / s->stats->ts_tid));
|
||||
seq_printf(seq, " %ums request delay\n",
|
||||
(s->stats->ts_requested == 0) ? 0 :
|
||||
jiffies_to_msecs(s->stats->run.rs_request_delay /
|
||||
s->stats->ts_requested));
|
||||
seq_printf(seq, " %ums running transaction\n",
|
||||
jiffies_to_msecs(s->stats->run.rs_running / s->stats->ts_tid));
|
||||
seq_printf(seq, " %ums transaction was being locked\n",
|
||||
|
新增問題並參考
封鎖使用者