Lines Matching +full:max +full:- +full:msg +full:- +full:size

1 // SPDX-License-Identifier: GPL-2.0
4 * Utility to get per-pid and per-tgid delay accounting statistics
12 * gcc -I/usr/src/linux/include getdelays.c -o getdelays
38 #define GENLMSG_PAYLOAD(glh) (NLMSG_PAYLOAD(glh, 0) - GENL_HDRLEN)
40 #define NLA_PAYLOAD(len) (len - NLA_HDRLEN)
61 /* Maximum size of response requested or message sent */
76 fprintf(stderr, "getdelays [-dilv] [-w logfile] [-r bufsize] " in usage()
77 "[-m cpumask] [-t tgid] [-p pid]\n"); in usage()
78 fprintf(stderr, " -d: print delayacct stats\n"); in usage()
79 fprintf(stderr, " -i: print IO accounting (works only with -p)\n"); in usage()
80 fprintf(stderr, " -l: listen forever\n"); in usage()
81 fprintf(stderr, " -v: debug on\n"); in usage()
82 fprintf(stderr, " -C: container path\n"); in usage()
95 return -1; in create_nl_socket()
100 fprintf(stderr, "Unable to set socket rcv buf size to %d\n", in create_nl_socket()
114 return -1; in create_nl_socket()
127 struct msgtemplate msg; in send_cmd() local
129 msg.n.nlmsg_len = NLMSG_LENGTH(GENL_HDRLEN); in send_cmd()
130 msg.n.nlmsg_type = nlmsg_type; in send_cmd()
131 msg.n.nlmsg_flags = NLM_F_REQUEST; in send_cmd()
132 msg.n.nlmsg_seq = 0; in send_cmd()
133 msg.n.nlmsg_pid = nlmsg_pid; in send_cmd()
134 msg.g.cmd = genl_cmd; in send_cmd()
135 msg.g.version = 0x1; in send_cmd()
136 na = (struct nlattr *) GENLMSG_DATA(&msg); in send_cmd()
137 na->nla_type = nla_type; in send_cmd()
138 na->nla_len = nla_len + NLA_HDRLEN; in send_cmd()
140 msg.n.nlmsg_len += NLMSG_ALIGN(na->nla_len); in send_cmd()
142 buf = (char *) &msg; in send_cmd()
143 buflen = msg.n.nlmsg_len ; in send_cmd()
150 buflen -= r; in send_cmd()
152 return -1; in send_cmd()
187 na = (struct nlattr *) ((char *) na + NLA_ALIGN(na->nla_len)); in get_family_id()
188 if (na->nla_type == CTRL_ATTR_FAMILY_ID) { in get_family_id()
216 "delay total", "delay average", "delay max", "delay min", in print_delayacct()
217 (unsigned long long)t->cpu_count, in print_delayacct()
218 (unsigned long long)t->cpu_run_real_total, in print_delayacct()
219 (unsigned long long)t->cpu_run_virtual_total, in print_delayacct()
220 (unsigned long long)t->cpu_delay_total, in print_delayacct()
221 average_ms((double)t->cpu_delay_total, t->cpu_count), in print_delayacct()
222 delay_ms((double)t->cpu_delay_max), in print_delayacct()
223 delay_ms((double)t->cpu_delay_min), in print_delayacct()
224 "count", "delay total", "delay average", "delay max", "delay min", in print_delayacct()
225 (unsigned long long)t->blkio_count, in print_delayacct()
226 (unsigned long long)t->blkio_delay_total, in print_delayacct()
227 average_ms((double)t->blkio_delay_total, t->blkio_count), in print_delayacct()
228 delay_ms((double)t->blkio_delay_max), in print_delayacct()
229 delay_ms((double)t->blkio_delay_min), in print_delayacct()
230 "count", "delay total", "delay average", "delay max", "delay min", in print_delayacct()
231 (unsigned long long)t->swapin_count, in print_delayacct()
232 (unsigned long long)t->swapin_delay_total, in print_delayacct()
233 average_ms((double)t->swapin_delay_total, t->swapin_count), in print_delayacct()
234 delay_ms((double)t->swapin_delay_max), in print_delayacct()
235 delay_ms((double)t->swapin_delay_min), in print_delayacct()
236 "count", "delay total", "delay average", "delay max", "delay min", in print_delayacct()
237 (unsigned long long)t->freepages_count, in print_delayacct()
238 (unsigned long long)t->freepages_delay_total, in print_delayacct()
239 average_ms((double)t->freepages_delay_total, t->freepages_count), in print_delayacct()
240 delay_ms((double)t->freepages_delay_max), in print_delayacct()
241 delay_ms((double)t->freepages_delay_min), in print_delayacct()
242 "count", "delay total", "delay average", "delay max", "delay min", in print_delayacct()
243 (unsigned long long)t->thrashing_count, in print_delayacct()
244 (unsigned long long)t->thrashing_delay_total, in print_delayacct()
245 average_ms((double)t->thrashing_delay_total, t->thrashing_count), in print_delayacct()
246 delay_ms((double)t->thrashing_delay_max), in print_delayacct()
247 delay_ms((double)t->thrashing_delay_min), in print_delayacct()
248 "count", "delay total", "delay average", "delay max", "delay min", in print_delayacct()
249 (unsigned long long)t->compact_count, in print_delayacct()
250 (unsigned long long)t->compact_delay_total, in print_delayacct()
251 average_ms((double)t->compact_delay_total, t->compact_count), in print_delayacct()
252 delay_ms((double)t->compact_delay_max), in print_delayacct()
253 delay_ms((double)t->compact_delay_min), in print_delayacct()
254 "count", "delay total", "delay average", "delay max", "delay min", in print_delayacct()
255 (unsigned long long)t->wpcopy_count, in print_delayacct()
256 (unsigned long long)t->wpcopy_delay_total, in print_delayacct()
257 average_ms((double)t->wpcopy_delay_total, t->wpcopy_count), in print_delayacct()
258 delay_ms((double)t->wpcopy_delay_max), in print_delayacct()
259 delay_ms((double)t->wpcopy_delay_min), in print_delayacct()
260 "count", "delay total", "delay average", "delay max", "delay min", in print_delayacct()
261 (unsigned long long)t->irq_count, in print_delayacct()
262 (unsigned long long)t->irq_delay_total, in print_delayacct()
263 average_ms((double)t->irq_delay_total, t->irq_count), in print_delayacct()
264 delay_ms((double)t->irq_delay_max), in print_delayacct()
265 delay_ms((double)t->irq_delay_min)); in print_delayacct()
273 (unsigned long long)t->nvcsw, (unsigned long long)t->nivcsw); in task_context_switch_counts()
279 "uninterruptible %llu\n", (unsigned long long)c->nr_sleeping, in print_cgroupstats()
280 (unsigned long long)c->nr_io_wait, in print_cgroupstats()
281 (unsigned long long)c->nr_running, in print_cgroupstats()
282 (unsigned long long)c->nr_stopped, in print_cgroupstats()
283 (unsigned long long)c->nr_uninterruptible); in print_cgroupstats()
290 t->ac_comm, in print_ioacct()
291 (unsigned long long)t->read_bytes, in print_ioacct()
292 (unsigned long long)t->write_bytes, in print_ioacct()
293 (unsigned long long)t->cancelled_write_bytes); in print_ioacct()
304 int nl_sd = -1; in main()
320 struct msgtemplate msg; in main() local
351 printf("receive buf size %d\n", rcvbufsz); in main()
353 err(1, "Invalid rcv buf size\n"); in main()
357 cpumask[sizeof(cpumask) - 1] = '\0'; in main()
376 if (sigemptyset(&sigset) == -1) in main()
387 if (execvp(argv[optind - 1], in main()
388 &argv[optind - 1]) < 0) in main()
389 exit(-1); in main()
405 exit(-1); in main()
412 if (fd == -1) { in main()
443 fprintf(stderr, "Select either -t or -C, not both\n"); in main()
485 rep_len = recv(nl_sd, &msg, sizeof(msg), 0); in main()
493 if (msg.n.nlmsg_type == NLMSG_ERROR || in main()
494 !NLMSG_OK((&msg.n), rep_len)) { in main()
495 struct nlmsgerr *err = NLMSG_DATA(&msg); in main()
497 err->error); in main()
501 PRINTF("nlmsghdr size=%zu, nlmsg_len=%d, rep_len=%d\n", in main()
502 sizeof(struct nlmsghdr), msg.n.nlmsg_len, rep_len); in main()
505 rep_len = GENLMSG_PAYLOAD(&msg.n); in main()
507 na = (struct nlattr *) GENLMSG_DATA(&msg); in main()
510 len += NLA_ALIGN(na->nla_len); in main()
511 switch (na->nla_type) { in main()
515 aggr_len = NLA_PAYLOAD(na->nla_len); in main()
520 switch (na->nla_type) { in main()
539 if (write(fd, NLA_DATA(na), na->nla_len) < 0) { in main()
551 na->nla_type); in main()
554 len2 += NLA_ALIGN(na->nla_len); in main()
556 NLA_ALIGN(na->nla_len)); in main()
565 na->nla_type); in main()
569 na = (struct nlattr *) (GENLMSG_DATA(&msg) + len); in main()