New ebpf charts (#10360)
Bring new charts for `ebpf.plugin` and `apps.plugin`
thiagoftsm committed
Dec 14, 2020 at 17:09 UTC
5398eec83c939ddefebf4a7e32139503d1a8caf7
7 files changed
+184
-41
collectors/ebpf.plugin/ebpf.h
+1
-1
@@ -170,7 +170,7 @@ extern void write_end_chart();
170
#define EBPF_NETWORK_VIEWER_SECTION "network connections"
171
#define EBPF_SERVICE_NAME_SECTION "service name"
172
173
-#define EBPF_COMMON_DIMENSION_CALL "calls"
173
+#define EBPF_COMMON_DIMENSION_CALL "calls/s"
174
#define EBPF_COMMON_DIMENSION_BYTESS "bytes/s"
175
#define EBPF_COMMON_DIMENSION_DIFFERENCE "difference"
176
#define EBPF_COMMON_DIMENSION_PACKETS "packets"
collectors/ebpf.plugin/ebpf_apps.h
+9
-4
@@ -367,10 +367,15 @@ typedef struct ebpf_process_stat {
367
typedef struct ebpf_bandwidth {
368
uint32_t pid;
369
370
- uint64_t first; //First timestamp
371
- uint64_t ct; //Last timestamp
372
- uint64_t sent; //Bytes sent
373
- uint64_t received; //Bytes received
370
+ uint64_t first; // First timestamp
371
+ uint64_t ct; // Last timestamp
372
+ uint64_t bytes_sent; // Bytes sent
373
+ uint64_t bytes_received; // Bytes received
374
+ uint64_t call_tcp_sent; // Number of times tcp_sendmsg was called
375
+ uint64_t call_tcp_received; // Number of times tcp_cleanup_rbuf was called
376
+ uint64_t retransmit; // Number of times tcp_retransmit was called
377
+ uint64_t call_udp_sent; // Number of times udp_sendmsg was called
378
+ uint64_t call_udp_received; // Number of times udp_recvmsg was called
379
} ebpf_bandwidth_t;
380
381
/**
collectors/ebpf.plugin/ebpf_socket.c
+111
-8
@@ -266,8 +266,13 @@ static void ebpf_socket_send_nv_data(netdata_vector_plot_t *ptr)
266
*/
267
static void ebpf_socket_update_apps_publish(ebpf_socket_publish_apps_t *curr, ebpf_socket_publish_apps_t *prev)
268
{
269
- curr->publish_recv = curr->received - prev->received;
270
- curr->publish_sent = curr->sent - prev->sent;
269
+ curr->publish_received_bytes = curr->bytes_received - prev->bytes_received;
270
+ curr->publish_sent_bytes = curr->bytes_sent - prev->bytes_sent;
271
+ curr->publish_tcp_sent = curr->call_tcp_sent - prev->call_tcp_sent;
272
+ curr->publish_tcp_received = curr->call_tcp_received - prev->call_tcp_received;
273
+ curr->publish_retransmit = curr->retransmit - prev->retransmit;
274
+ curr->publish_udp_sent = curr->call_udp_sent - prev->call_udp_sent;
275
+ curr->publish_udp_received = curr->call_udp_received - prev->call_udp_received;
276
}
277
278
/**
@@ -345,7 +350,8 @@ void ebpf_socket_send_apps_data(ebpf_module_t *em, struct target *root)
350
write_begin_chart(NETDATA_APPS_FAMILY, NETDATA_NET_APPS_BANDWIDTH_SENT);
351
for (w = root; w; w = w->next) {
352
if (unlikely(w->exposed && w->processes)) {
348
- value = ebpf_socket_sum_values_for_pids(w->root_pid, offsetof(ebpf_socket_publish_apps_t, publish_sent));
353
+ value = ebpf_socket_sum_values_for_pids(w->root_pid, offsetof(ebpf_socket_publish_apps_t,
354
+ publish_sent_bytes));
355
write_chart_dimension(w->name, value);
356
}
357
}
@@ -354,11 +360,63 @@ void ebpf_socket_send_apps_data(ebpf_module_t *em, struct target *root)
360
write_begin_chart(NETDATA_APPS_FAMILY, NETDATA_NET_APPS_BANDWIDTH_RECV);
361
for (w = root; w; w = w->next) {
362
if (unlikely(w->exposed && w->processes)) {
357
- value = ebpf_socket_sum_values_for_pids(w->root_pid, offsetof(ebpf_socket_publish_apps_t, publish_recv));
363
+ value = ebpf_socket_sum_values_for_pids(w->root_pid, offsetof(ebpf_socket_publish_apps_t,
364
+ publish_received_bytes));
365
write_chart_dimension(w->name, value);
366
}
367
}
368
write_end_chart();
369
+
370
+ write_begin_chart(NETDATA_APPS_FAMILY, NETDATA_NET_APPS_BANDWIDTH_TCP_SEND_CALLS);
371
+ for (w = root; w; w = w->next) {
372
+ if (unlikely(w->exposed && w->processes)) {
373
+ value = ebpf_socket_sum_values_for_pids(w->root_pid, offsetof(ebpf_socket_publish_apps_t,
374
+ publish_tcp_sent));
375
+ write_chart_dimension(w->name, value);
376
+ }
377
+ }
378
+ write_end_chart();
379
+
380
+ write_begin_chart(NETDATA_APPS_FAMILY, NETDATA_NET_APPS_BANDWIDTH_TCP_RECV_CALLS);
381
+ for (w = root; w; w = w->next) {
382
+ if (unlikely(w->exposed && w->processes)) {
383
+ value = ebpf_socket_sum_values_for_pids(w->root_pid, offsetof(ebpf_socket_publish_apps_t,
384
+ publish_tcp_received));
385
+ write_chart_dimension(w->name, value);
386
+ }
387
+ }
388
+ write_end_chart();
389
+
390
+ write_begin_chart(NETDATA_APPS_FAMILY, NETDATA_NET_APPS_BANDWIDTH_TCP_RETRANSMIT);
391
+ for (w = root; w; w = w->next) {
392
+ if (unlikely(w->exposed && w->processes)) {
393
+ value = ebpf_socket_sum_values_for_pids(w->root_pid, offsetof(ebpf_socket_publish_apps_t,
394
+ publish_retransmit));
395
+ write_chart_dimension(w->name, value);
396
+ }
397
+ }
398
+ write_end_chart();
399
+
400
+ write_begin_chart(NETDATA_APPS_FAMILY, NETDATA_NET_APPS_BANDWIDTH_UDP_SEND_CALLS);
401
+ for (w = root; w; w = w->next) {
402
+ if (unlikely(w->exposed && w->processes)) {
403
+ value = ebpf_socket_sum_values_for_pids(w->root_pid, offsetof(ebpf_socket_publish_apps_t,
404
+ publish_udp_sent));
405
+ write_chart_dimension(w->name, value);
406
+ }
407
+ }
408
+ write_end_chart();
409
+
410
+ write_begin_chart(NETDATA_APPS_FAMILY, NETDATA_NET_APPS_BANDWIDTH_UDP_RECV_CALLS);
411
+ for (w = root; w; w = w->next) {
412
+ if (unlikely(w->exposed && w->processes)) {
413
+ value = ebpf_socket_sum_values_for_pids(w->root_pid, offsetof(ebpf_socket_publish_apps_t,
414
+ publish_udp_received));
415
+ write_chart_dimension(w->name, value);
416
+ }
417
+ }
418
+ write_end_chart();
419
+
420
}
421
422
/*****************************************************************
@@ -475,6 +533,41 @@ void ebpf_socket_create_apps_charts(ebpf_module_t *em, struct target *root)
533
20081,
534
root);
535
536
+ ebpf_create_charts_on_apps(NETDATA_NET_APPS_BANDWIDTH_TCP_SEND_CALLS,
537
+ "Calls for tcp_sendmsg",
538
+ EBPF_COMMON_DIMENSION_CALL,
539
+ NETDATA_APPS_NET_GROUP,
540
+ 20082,
541
+ root);
542
+
543
+ ebpf_create_charts_on_apps(NETDATA_NET_APPS_BANDWIDTH_TCP_RECV_CALLS,
544
+ "Calls for tcp_cleanup_rbuf",
545
+ EBPF_COMMON_DIMENSION_CALL,
546
+ NETDATA_APPS_NET_GROUP,
547
+ 20083,
548
+ root);
549
+
550
+ ebpf_create_charts_on_apps(NETDATA_NET_APPS_BANDWIDTH_TCP_RETRANSMIT,
551
+ "Calls for tcp_retransmit",
552
+ EBPF_COMMON_DIMENSION_CALL,
553
+ NETDATA_APPS_NET_GROUP,
554
+ 20084,
555
+ root);
556
+
557
+ ebpf_create_charts_on_apps(NETDATA_NET_APPS_BANDWIDTH_UDP_SEND_CALLS,
558
+ "Calls for udp_sendmsg",
559
+ EBPF_COMMON_DIMENSION_CALL,
560
+ NETDATA_APPS_NET_GROUP,
561
+ 20085,
562
+ root);
563
+
564
+ ebpf_create_charts_on_apps(NETDATA_NET_APPS_BANDWIDTH_UDP_RECV_CALLS,
565
+ "Calls for udp_recvmsg",
566
+ EBPF_COMMON_DIMENSION_CALL,
567
+ NETDATA_APPS_NET_GROUP,
568
+ 20086,
569
+ root);
570
+
571
socket_apps_created = 1;
572
}
573
@@ -1429,8 +1522,13 @@ void ebpf_socket_fill_publish_apps(uint32_t current_pid, ebpf_bandwidth_t *eb)
1522
memcpy(prev, curr, sizeof(ebpf_socket_publish_apps_t));
1523
}
1524
1432
- curr->sent = eb->sent;
1433
- curr->received = eb->received;
1525
+ curr->bytes_sent = eb->bytes_sent;
1526
+ curr->bytes_received = eb->bytes_received;
1527
+ curr->call_tcp_sent = eb->call_tcp_sent;
1528
+ curr->call_tcp_received = eb->call_tcp_received;
1529
+ curr->retransmit = eb->retransmit;
1530
+ curr->call_udp_sent = eb->call_udp_sent;
1531
+ curr->call_udp_received = eb->call_udp_received;
1532
1533
ebpf_socket_update_apps_publish(curr, prev);
1534
}
@@ -1446,8 +1544,13 @@ void ebpf_socket_bandwidth_accumulator(ebpf_bandwidth_t *out)
1544
ebpf_bandwidth_t *total = &out[0];
1545
for (i = 1; i < end; i++) {
1546
ebpf_bandwidth_t *move = &out[i];
1449
- total->sent += move->sent;
1450
- total->received += move->received;
1547
+ total->bytes_sent += move->bytes_sent;
1548
+ total->bytes_received += move->bytes_received;
1549
+ total->call_tcp_sent += move->call_tcp_sent;
1550
+ total->call_tcp_received += move->call_tcp_received;
1551
+ total->retransmit += move->retransmit;
1552
+ total->call_udp_sent += move->call_udp_sent;
1553
+ total->call_udp_received += move->call_udp_received;
1554
}
1555
}
1556
collectors/ebpf.plugin/ebpf_socket.h
+19
-4
@@ -56,6 +56,11 @@ typedef enum ebpf_socket_idx {
56
// Charts created on Apps submenu
57
#define NETDATA_NET_APPS_BANDWIDTH_SENT "bandwidth_sent"
58
#define NETDATA_NET_APPS_BANDWIDTH_RECV "bandwidth_recv"
59
+#define NETDATA_NET_APPS_BANDWIDTH_TCP_SEND_CALLS "bandwidth_tcp_send"
60
+#define NETDATA_NET_APPS_BANDWIDTH_TCP_RECV_CALLS "bandwidth_tcp_recv"
61
+#define NETDATA_NET_APPS_BANDWIDTH_TCP_RETRANSMIT "bandwidth_tcp_retransmit"
62
+#define NETDATA_NET_APPS_BANDWIDTH_UDP_SEND_CALLS "bandwidth_udp_send"
63
+#define NETDATA_NET_APPS_BANDWIDTH_UDP_RECV_CALLS "bandwidth_udp_recv"
64
65
// Network viewer charts
66
#define NETDATA_NV_OUTBOUND_BYTES "outbound_bytes"
@@ -73,12 +78,22 @@ typedef enum ebpf_socket_idx {
78
79
typedef struct ebpf_socket_publish_apps {
80
// Data read
76
- uint64_t sent;
77
- uint64_t received;
81
+ uint64_t bytes_sent; // Bytes sent
82
+ uint64_t bytes_received; // Bytes received
83
+ uint64_t call_tcp_sent; // Number of times tcp_sendmsg was called
84
+ uint64_t call_tcp_received; // Number of times tcp_cleanup_rbuf was called
85
+ uint64_t retransmit; // Number of times tcp_retransmit was called
86
+ uint64_t call_udp_sent; // Number of times udp_sendmsg was called
87
+ uint64_t call_udp_received; // Number of times udp_recvmsg was called
88
89
// Publish information.
80
- uint64_t publish_sent;
81
- uint64_t publish_recv;
90
+ uint64_t publish_sent_bytes;
91
+ uint64_t publish_received_bytes;
92
+ uint64_t publish_tcp_sent;
93
+ uint64_t publish_tcp_received;
94
+ uint64_t publish_retransmit;
95
+ uint64_t publish_udp_sent;
96
+ uint64_t publish_udp_received;
97
} ebpf_socket_publish_apps_t;
98
99
typedef struct ebpf_network_viewer_dimension_names {
packaging/ebpf.checksums
+3
-3
@@ -1,3 +1,3 @@
1
-b7a4575f1a63d8ec3829494105c648593ebbdefd6b2eb4959716313a636d16c3 netdata-kernel-collector-glibc-v0.4.9.tar.xz
2
-9902c9a144ff67174d004ced76772220b720238ab5b1da4218d742c7c03f3591 netdata-kernel-collector-musl-v0.4.9.tar.xz
3
-0059f24dd8a8be4581b6cbb0c3cefe06bb5e2b737c9335ca1dbdf9dd10bbaa06 netdata-kernel-collector-static-v0.4.9.tar.xz
1
+723fecc3a74065f724d4af2780674f5aeb7f0b968899abc9e171fca1623ecd2a netdata-kernel-collector-glibc-v0.5.2.tar.xz
2
+f2110b1c149017c4a4f486e30d701731a5d12050345f9038c63c6dcc81d8e4d4 netdata-kernel-collector-musl-v0.5.2.tar.xz
3
+6587a4aedf4e0f17d725c4b8cee1f9b9fdbca41f9cd4fe85e4abbfdc03f27465 netdata-kernel-collector-static-v0.5.2.tar.xz
packaging/ebpf.version
+1
-1
@@ -1 +1 @@
1
-v0.4.9
1
+v0.5.2
web/gui/dashboard_info.js
+40
-20
@@ -1115,52 +1115,52 @@ netdataDashboard.context = {
1115
},
1116
1117
'apps.file_closed': {
1118
- info: 'Calls to the internal function <code>__close_fd</code>, which is called from' +
1118
+ info: 'Calls to the internal function <a href="https://elixir.bootlin.com/linux/latest/source/fs/file.c#L665" target="_blank">__close_fd</a>, which is called from' +
1119
' <a href="https://www.man7.org/linux/man-pages/man2/close.2.html" target="_blank">close(2)</a>. '
1120
},
1121
1122
'apps.file_close_error': {
1123
- info: 'Failed calls to the internal function <code>__close_fd</code>.'
1123
+ info: 'Failed calls to the internal function <a href="https://elixir.bootlin.com/linux/latest/source/fs/file.c#L665" target="_blank">__close_fd</a>.'
1124
},
1125
1126
'apps.file_deleted': {
1127
- info: 'Calls to the function <code>vfs_unlink</code>. This chart does not show all events that remove files from the filesystem, because filesystems can create their own functions to remove files.'
1127
+ info: 'Calls to the function <a href="https://www.kernel.org/doc/htmldocs/filesystems/API-vfs-unlink.html" target="_blank">vfs_unlink</a>. This chart does not show all events that remove files from the filesystem, because filesystems can create their own functions to remove files.'
1128
},
1129
1130
'apps.vfs_write_call': {
1131
- info: 'Successful calls to the function <code>vfs_write</code>. This chart may not show all filesystem events if it uses other functions to store data on disk.'
1131
+ info: 'Successful calls to the function <a href="https://topic.alibabacloud.com/a/kernel-state-file-operation-__-work-information-kernel_8_8_20287135.html" target="_blank">vfs_write</a>. This chart may not show all filesystem events if it uses other functions to store data on disk.'
1132
},
1133
1134
'apps.vfs_write_error': {
1135
- info: 'Failed calls to the function <code>vfs_write</code>. This chart may not show all filesystem events if it uses other functions to store data on disk.'
1135
+ info: 'Failed calls to the function <a href="https://topic.alibabacloud.com/a/kernel-state-file-operation-__-work-information-kernel_8_8_20287135.html" target="_blank">vfs_write</a>. This chart may not show all filesystem events if it uses other functions to store data on disk.'
1136
},
1137
1138
'apps.vfs_read_call': {
1139
- info: 'Successful calls to the function <code>vfs_read</code>. This chart may not show all filesystem events if it uses other functions to store data on disk.'
1139
+ info: 'Successful calls to the function <a href="https://topic.alibabacloud.com/a/kernel-state-file-operation-__-work-information-kernel_8_8_20287135.html" target="_blank">vfs_read</a>. This chart may not show all filesystem events if it uses other functions to store data on disk.'
1140
},
1141
1142
'apps.vfs_read_error': {
1143
- info: 'Failed calls to the function <code>vfs_read</code>. This chart may not show all filesystem events if it uses other functions to store data on disk.'
1143
+ info: 'Failed calls to the function <a href="https://topic.alibabacloud.com/a/kernel-state-file-operation-__-work-information-kernel_8_8_20287135.html" target="_blank">vfs_read</a>. This chart may not show all filesystem events if it uses other functions to store data on disk.'
1144
},
1145
1146
'apps.vfs_write_bytes': {
1147
- info: 'Total of bytes successfully written using the function <code>vfs_write</code>.'
1147
+ info: 'Total of bytes successfully written using the function <a href="https://topic.alibabacloud.com/a/kernel-state-file-operation-__-work-information-kernel_8_8_20287135.html" target="_blank">vfs_write</a>.'
1148
},
1149
1150
'apps.vfs_read_bytes': {
1151
- info: 'Total of bytes successfully read using the function <code>vfs_read</code>.'
1151
+ info: 'Total of bytes successfully read using the function <a href="https://topic.alibabacloud.com/a/kernel-state-file-operation-__-work-information-kernel_8_8_20287135.html" target="_blank">vfs_read</a>.'
1152
},
1153
1154
'apps.process_create': {
1155
- info: 'Calls to the function <code>do_fork</code> to create a new task, which is the common name used to define process and tasks inside the kernel. Netdata identifies the process by counting the number of calls to <code>sys_clone</code> that do not have the flag <code>CLONE_THREAD</code> set.'
1155
+ info: 'Calls to the function <a href="https://www.ece.uic.edu/~yshi1/linux/lkse/node4.html#SECTION00421000000000000000" target="_blank">do_fork</a> to create a new task, which is the common name used to define process and tasks inside the kernel. Netdata identifies the process by counting the number of calls to <a href="https://linux.die.net/man/2/clone" target="_blank">sys_clone</a> that do not have the flag <code>CLONE_THREAD</code> set.'
1156
},
1157
1158
'apps.thread_create': {
1159
- info: 'Calls to the function <code>do_fork</code> to create a new task, which is the common name used to define process and tasks inside the kernel. Netdata identifies the threads by counting the number of calls to <code>sys_clone</code> that have the flag <code>CLONE_THREAD</code> set.'
1159
+ info: 'Calls to the function <a href="https://www.ece.uic.edu/~yshi1/linux/lkse/node4.html#SECTION00421000000000000000" target="_blank">do_fork</a> to create a new task, which is the common name used to define process and tasks inside the kernel. Netdata identifies the threads by counting the number of calls to <a href="https://linux.die.net/man/2/clone" target="_blank">sys_clone</a> that have the flag <code>CLONE_THREAD</code> set.'
1160
},
1161
1162
'apps.task_close': {
1163
- info: 'Calls to the functions responsible for closing (<code>do_exit</code>) and releasing (<code>release_task</code>) tasks.'
1163
+ info: 'Calls to the functions responsible for closing (<a href="https://www.informit.com/articles/article.aspx?p=370047&seqNum=4" target="_blank">do_exit</a>) and releasing (<a href="https://www.informit.com/articles/article.aspx?p=370047&seqNum=4" target="_blank">release_task</a>) tasks.'
1164
},
1165
1166
'apps.bandwidth_sent': {
@@ -1168,7 +1168,27 @@ netdataDashboard.context = {
1168
},
1169
1170
'apps.bandwidth_recv': {
1171
- info: 'Bytes received by functions <code>tcp_cleanup_rbuf</code> and <code>udp_recvmsg</code>.'
1171
+ info: 'Bytes received by functions <code>tcp_cleanup_rbuf</code> and <code>udp_recvmsg</code>. We use <code>tcp_cleanup_rbuf</code> instead <code>tcp_recvmsg</code>, because this last misses <code>tcp_read_sock()</code> traffic and we would also need to have more probes to get the socket and package size.'
1172
+ },
1173
+
1174
+ 'apps.bandwidth_tcp_send': {
1175
+ info: 'Calls for function <code>tcp_sendmsg</code>.'
1176
+ },
1177
+
1178
+ 'apps.bandwidth_tcp_recv': {
1179
+ info: 'Calls for functions <code>tcp_cleanup_rbuf</code>. We use <code>tcp_cleanup_rbuf</code> instead <code>tcp_recvmsg</code>, because this last misses <code>tcp_read_sock()</code> traffic and we would also need to have more probes to get the socket and package size.'
1180
+ },
1181
+
1182
+ 'apps.bandwidth_tcp_retransmit': {
1183
+ info: 'Calls for functions <code>tcp_retranstmit_skb</code>.'
1184
+ },
1185
+
1186
+ 'apps.bandwidth_udp_send': {
1187
+ info: 'Calls for function <code>udp_sendmsg</code>.'
1188
+ },
1189
+
1190
+ 'apps.bandwidth_udp_recv': {
1191
+ info: 'Calls for function <code>udp_recvmsg</code>.'
1192
},
1193
1194
// ------------------------------------------------------------------------
@@ -3252,7 +3272,7 @@ netdataDashboard.context = {
3272
3273
'ebpf.tcp_bandwidth': {
3274
title : 'TCP bandwidth',
3255
- info: 'Bytes sent and received for functions <code>tcp_sendmsg</code> and <code>tcp_cleanup_rbuf</code>.'
3275
+ info: 'Bytes sent and received for functions <code>tcp_sendmsg</code> and <code>tcp_cleanup_rbuf</code>. We use <code>tcp_cleanup_rbuf</code> instead <code>tcp_recvmsg</code>, because this last misses <code>tcp_read_sock()</code> traffic and we would also need to have more probes to get the socket and package size.'
3276
},
3277
3278
'ebpf.tcp_retransmit': {
@@ -3295,32 +3315,32 @@ netdataDashboard.context = {
3315
3316
'ebpf.deleted_objects': {
3317
title : 'VFS remove',
3298
- info: 'This chart does not show all events that remove files from the file system, because file systems can create their own functions to remove files, it shows calls for the function <code>vfs_unlink</code>. '
3318
+ info: 'This chart does not show all events that remove files from the file system, because file systems can create their own functions to remove files, it shows calls for the function <a href="https://www.kernel.org/doc/htmldocs/filesystems/API-vfs-unlink.html" target="_blank">vfs_unlink</a>. '
3319
},
3320
3321
'ebpf.io': {
3322
title : 'VFS IO',
3303
- info: 'Successful or failed calls to functions <code>vfs_read</code> and <code>vfs_write</code>. This chart may not show all file system events if it uses other functions to store data on disk.'
3323
+ info: 'Successful or failed calls to functions <a href="https://topic.alibabacloud.com/a/kernel-state-file-operation-__-work-information-kernel_8_8_20287135.html" target="_blank">vfs_read</a> and <a href="https://topic.alibabacloud.com/a/kernel-state-file-operation-__-work-information-kernel_8_8_20287135.html" target="_blank">vfs_write</a>. This chart may not show all file system events if it uses other functions to store data on disk.'
3324
},
3325
3326
'ebpf.io_bytes': {
3327
title : 'VFS bytes written',
3308
- info: 'Total of bytes read or written with success using the functions <code>vfs_read</code> and <code>vfs_write</code>.'
3328
+ info: 'Total of bytes read or written with success using the functions <a href="https://topic.alibabacloud.com/a/kernel-state-file-operation-__-work-information-kernel_8_8_20287135.html" target="_blank">vfs_read</a> and <a href="https://topic.alibabacloud.com/a/kernel-state-file-operation-__-work-information-kernel_8_8_20287135.html" target="_blank">vfs_write</a>.'
3329
},
3330
3331
'ebpf.io_error': {
3332
title : 'VFS IO error',
3313
- info: 'Failed calls to functions <code>vfs_read</code> and <code>vfs_write</code>.'
3333
+ info: 'Failed calls to functions <a href="https://topic.alibabacloud.com/a/kernel-state-file-operation-__-work-information-kernel_8_8_20287135.html" target="_blank">vfs_read</a> and <a href="https://topic.alibabacloud.com/a/kernel-state-file-operation-__-work-information-kernel_8_8_20287135.html" target="_blank">vfs_write</a>.'
3334
},
3335
3336
'ebpf.process_thread': {
3337
title : 'Task creation',
3318
- info: 'Number of times that the function <code>do_fork</code> is called to create a new task, which is the common name used to define process and tasks inside the kernel. Netdata identifies the threads by couting the number of calls for <code>sys_clone</code> that has the flag <code>CLONE_THREAD</code> set.'
3338
+ info: 'Number of times that the function <a href="https://www.ece.uic.edu/~yshi1/linux/lkse/node4.html#SECTION00421000000000000000" target="_blank">do_fork</a> is called to create a new task, which is the common name used to define process and tasks inside the kernel. Netdata identifies the threads by couting the number of calls for <a href="https://linux.die.net/man/2/clone" target="_blank">sys_clone</a> that has the flag <code>CLONE_THREAD</code> set.'
3339
},
3340
3341
'ebpf.exit': {
3342
title : 'Exit monitoring',
3323
- info: 'Calls for the functions responsible for closing (<code>do_exit</code>) and releasing (<code>release_task</code>) tasks.'
3343
+ info: 'Calls for the functions responsible for closing (<a href="https://www.informit.com/articles/article.aspx?p=370047&seqNum=4" target="_blank">do_exit</a>) and releasing (<a href="https://www.informit.com/articles/article.aspx?p=370047&seqNum=4" target="_blank">release_task</a>) tasks.'
3344
},
3345
3346
'ebpf.task_error': {