summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
authorzy <[email protected]>2023-12-20 02:30:24 -0500
committerzy <[email protected]>2023-12-20 02:30:24 -0500
commitaea4b03cf396755c28a9906c5d94f96fc3fb8990 (patch)
tree387c2254ae6fd62f6a963c3375780c47e5c86ead /source
parent1f2335ec9fb4e981d5a99f37f3609facfbf60c69 (diff)
capture_immediate adjust print
Diffstat (limited to 'source')
-rw-r--r--source/module/monitor_kernel_lib.c51
-rw-r--r--source/module/monitor_proc.h4
2 files changed, 30 insertions, 25 deletions
diff --git a/source/module/monitor_kernel_lib.c b/source/module/monitor_kernel_lib.c
index a2df23a..4cbb44a 100644
--- a/source/module/monitor_kernel_lib.c
+++ b/source/module/monitor_kernel_lib.c
@@ -141,9 +141,10 @@ static void push_tskinfo_2_sa_buffer(variable_monitor_task *tsk_info,
* @param tsk_info
* @param flags
*/
-static void push_tskinfo_2_buffer_unlock_orig(variable_monitor_task *tsk_info,
- unsigned long *flags,
- struct diag_variant_buffer *buffer) {
+static void
+push_tskinfo_2_buffer_unlock_orig(variable_monitor_task *tsk_info,
+ unsigned long *flags,
+ struct diag_variant_buffer *buffer) {
variable_monitor_task_system *tsk_info_system;
if (tsk_info->task.sys_task == 1) // system task
{
@@ -162,12 +163,13 @@ static void push_tskinfo_2_buffer_unlock_orig(variable_monitor_task *tsk_info,
}
static void push_tskinfo_2_buffer_unlock(variable_monitor_task *tsk_info,
- unsigned long *flags) {
- push_tskinfo_2_buffer_unlock_orig(tsk_info, flags, &load_monitor_variant_buffer);
+ unsigned long *flags) {
+ push_tskinfo_2_buffer_unlock_orig(tsk_info, flags,
+ &load_monitor_variant_buffer);
}
/**
- * @brief diag sign task info
+ * @brief diag sign task info
* system task: kernel stack | proc chains
* other task(user / unknow): kernel stack | proc chains | raw stack
* stack
@@ -175,7 +177,8 @@ static void push_tskinfo_2_buffer_unlock(variable_monitor_task *tsk_info,
* @param p
* @param tsk_info
*/
-static void diag_task_signal(struct task_struct *p, variable_monitor_task *tsk_info) {
+static void diag_task_signal(struct task_struct *p,
+ variable_monitor_task *tsk_info) {
unsigned int nr_bt;
// printk(KERN_INFO "diag_task_signal\n");
diag_task_brief(p, &tsk_info->task); // task brief
@@ -197,7 +200,7 @@ static void diag_task_signal(struct task_struct *p, variable_monitor_task *tsk_i
* @param is_print 1 mean print to dmesg
*/
static void diag_threshold_reached_record(kernel_watch_timer *k_watch_timer,
- unsigned char is_print) {
+ unsigned char is_print) {
unsigned long long start_time = ktime_get_real();
@@ -257,7 +260,8 @@ static void diag_threshold_reached_record(kernel_watch_timer *k_watch_timer,
*
* @param tgid
*/
-static void diag_task_by_tgid_orig(pid_t tgid, struct diag_variant_buffer *buffer) {
+static void diag_task_by_tgid_orig(pid_t tgid,
+ struct diag_variant_buffer *buffer) {
// pr_info("diag_task_by_tgid %d\n", tgid);
@@ -289,7 +293,8 @@ static void diag_task_by_tgid_orig(pid_t tgid, struct diag_variant_buffer *buffe
tsk_info.id = event_id;
tsk_info.tv = ktime_get_real();
diag_task_signal(t, &tsk_info);
- push_tskinfo_2_buffer_unlock_orig(&tsk_info, &flags, buffer); // push to buffer
+ push_tskinfo_2_buffer_unlock_orig(&tsk_info, &flags,
+ buffer); // push to buffer
}
diag_variant_buffer_spin_unlock(buffer, flags);
rcu_read_unlock();
@@ -336,9 +341,8 @@ void diag_task_all(void) {
rcu_read_unlock();
}
-
void diag_task_by_tsk(struct task_struct *tsk,
- struct diag_variant_buffer *buffer) {
+ struct diag_variant_buffer *buffer) {
unsigned long flags;
static variable_monitor_task tsk_info;
@@ -353,7 +357,8 @@ void diag_task_by_tsk(struct task_struct *tsk,
tsk_info.tv = ktime_get_real();
diag_task_signal(tsk, &tsk_info);
- push_tskinfo_2_buffer_unlock_orig(&tsk_info, &flags, buffer); // push to buffer
+ push_tskinfo_2_buffer_unlock_orig(&tsk_info, &flags,
+ buffer); // push to buffer
diag_variant_buffer_spin_unlock(buffer, flags);
rcu_read_unlock();
@@ -377,12 +382,6 @@ void diag_task(kernel_watch_timer *k_watch_timer) {
// pr_info("diag_stack, sample threshold reached\n");
diag_task_by_tgid_orig(k_watch_timer->task->tgid,
&load_monitor_variant_buffer);
- // int i;
- // kernel_watch_arg *kwarg;
- // for (i = 0; i < k_watch_timer->threshold_over_count; i++) {
- // kwarg = &k_watch_timer->k_watch_args[k_watch_timer->threshold_buffer[i]];
- // diag_task_by_tgid_orig(kwarg->task_id, &load_monitor_variant_buffer);
- // }
}
// pr_info("diag_stack, finish tv %lld\n", ktime_get_real());
}
@@ -525,13 +524,13 @@ void clear_watch(pid_t pid) {
/**
* @brief for ipi call
- *
- * @param info
+ *
+ * @param info
*/
static void capture_immediate_diag_ipi(void *info) {
struct task_struct *tsk = current;
- struct diag_variant_buffer *buffer =
- &stand_alone_buffer; //! todo change to global buffer
+ struct diag_variant_buffer *buffer = &load_monitor_variant_buffer;
+
diag_task_by_tsk(tsk, buffer);
}
@@ -550,6 +549,11 @@ static int capture_immediate_entry(kernel_watch_timer *k_watch_timer) {
if (read_and_compare(kwarg->kptr, kwarg->length_byte,
kwarg->above_threshold, kwarg->is_unsigned,
kwarg->threshold)) {
+ // k_watch_timer->tv = ktime_get_real();
+ kwarg->true_value = convert_to_longlong(kwarg->kptr, kwarg->length_byte,
+ kwarg->is_unsigned);
+ k_watch_timer->threshold_over_count = 1;
+ diag_threshold_reached_record(k_watch_timer, 1);
// some value reached threshold
// if task run on cpu, call ipi immediately
if (k_watch_timer->task->on_cpu) {
@@ -558,6 +562,7 @@ static int capture_immediate_entry(kernel_watch_timer *k_watch_timer) {
} else {
diag_task_by_tsk(k_watch_timer->task, &load_monitor_variant_buffer);
}
+
return 1;
}
}
diff --git a/source/module/monitor_proc.h b/source/module/monitor_proc.h
index af8f743..326dae7 100644
--- a/source/module/monitor_proc.h
+++ b/source/module/monitor_proc.h
@@ -4,8 +4,8 @@
#define DEFAULT_INTERVAL_NS 10000 // 10us
#define DEFAULT_DUMP_RESET_SEC 10 // 60s
#define DEFAULT_SAMPLE_ALL 0
-#define STACK_CAPTURE_IMMEDIATE 0
-#define STACK_CAPTURE_AGGREGATE 1
+#define STACK_CAPTURE_AGGREGATE 0
+#define STACK_CAPTURE_IMMEDIATE 1
extern int def_interval_ns;
extern int dump_reset_sec;