* [Intel-gfx] [PATCH i-g-t 0/1] Per client engine busyness for intel_gpu_top
@ 2020-09-04 13:06 Tvrtko Ursulin
2020-09-04 13:06 ` [igt-dev] [PATCH i-g-t 1/1] intel-gpu-top: Support for client stats Tvrtko Ursulin
` (4 more replies)
0 siblings, 5 replies; 9+ messages in thread
From: Tvrtko Ursulin @ 2020-09-04 13:06 UTC (permalink / raw)
To: igt-dev; +Cc: Intel-gfx
From: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Intel_gpu_top changes to show per client and per engine class busyness.
Tvrtko Ursulin (1):
intel-gpu-top: Support for client stats
tools/intel_gpu_top.c | 539 +++++++++++++++++++++++++++++++++++++++++-
1 file changed, 528 insertions(+), 11 deletions(-)
--
2.25.1
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx
^ permalink raw reply [flat|nested] 9+ messages in thread* [igt-dev] [PATCH i-g-t 1/1] intel-gpu-top: Support for client stats 2020-09-04 13:06 [Intel-gfx] [PATCH i-g-t 0/1] Per client engine busyness for intel_gpu_top Tvrtko Ursulin @ 2020-09-04 13:06 ` Tvrtko Ursulin 2020-09-07 9:31 ` Petri Latvala 2020-09-14 15:39 ` [igt-dev] [PATCH i-g-t v4] " Tvrtko Ursulin 2020-09-04 13:40 ` [igt-dev] ✓ Fi.CI.BAT: success for Per client engine busyness for intel_gpu_top Patchwork ` (3 subsequent siblings) 4 siblings, 2 replies; 9+ messages in thread From: Tvrtko Ursulin @ 2020-09-04 13:06 UTC (permalink / raw) To: igt-dev; +Cc: Intel-gfx, Tvrtko Ursulin From: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Adds support for per-client engine busyness stats i915 exports in sysfs and produces output like the below: ========================================================================== intel-gpu-top - 935/ 935 MHz; 0% RC6; 14.73 Watts; 1097 irqs/s IMC reads: 1401 MiB/s IMC writes: 4 MiB/s ENGINE BUSY MI_SEMA MI_WAIT Render/3D/0 63.73% |███████████████████ | 3% 0% Blitter/0 9.53% |██▊ | 6% 0% Video/0 39.32% |███████████▊ | 16% 0% Video/1 15.62% |████▋ | 0% 0% VideoEnhance/0 0.00% | | 0% 0% PID NAME RCS BCS VCS VECS 4084 gem_wsim |█████▌ ||█ || || | 4086 gem_wsim |█▌ || ||███ || | ========================================================================== Apart from the existing physical engine utilization it now also shows utilization per client and per engine class. v2: * Version to match removal of global enable_stats toggle. * Plus various fixes. v3: * Support brief backward jumps in client stats. Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> --- tools/intel_gpu_top.c | 539 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 528 insertions(+), 11 deletions(-) diff --git a/tools/intel_gpu_top.c b/tools/intel_gpu_top.c index cae01c25b920..9eac569e75de 100644 --- a/tools/intel_gpu_top.c +++ b/tools/intel_gpu_top.c @@ -679,23 +679,347 @@ static void pmu_sample(struct engines *engines) } } +enum client_status { + FREE = 0, /* mbz */ + ALIVE, + PROBE +}; + +struct clients; + +struct client { + struct clients *clients; + + enum client_status status; + unsigned int id; + unsigned int pid; + char name[128]; + unsigned int samples; + unsigned long total; + struct engines *engines; + unsigned long *val; + uint64_t *last; +}; + +struct engine_class { + unsigned int class; + const char *name; + unsigned int num_engines; +}; + +struct clients { + unsigned int num_classes; + struct engine_class *class; + + unsigned int num_clients; + struct client *client; +}; + +#define for_each_client(clients, c, tmp) \ + for ((tmp) = (clients)->num_clients, c = (clients)->client; \ + (tmp > 0); (tmp)--, (c)++) + +static struct clients *init_clients(void) +{ + struct clients *clients = malloc(sizeof(*clients)); + + return memset(clients, 0, sizeof(*clients)); +} + +#define SYSFS_CLIENTS "/sys/class/drm/card0/clients" + +static uint64_t read_client_busy(unsigned int id, unsigned int class) +{ + char buf[256]; + ssize_t ret; + + ret = snprintf(buf, sizeof(buf), + SYSFS_CLIENTS "/%u/busy/%u", + id, class); + assert(ret > 0 && ret < sizeof(buf)); + if (ret <= 0 || ret == sizeof(buf)) + return 0; + + return filename_to_u64(buf, 10); +} + +static struct client * +find_client(struct clients *clients, enum client_status status, unsigned int id) +{ + struct client *c; + int tmp; + + for_each_client(clients, c, tmp) { + if ((status == FREE && c->status == FREE) || + (status == c->status && c->id == id)) + return c; + } + + return NULL; +} + +static void update_client(struct client *c, unsigned int pid, char *name) +{ + uint64_t val[c->clients->num_classes]; + unsigned int i; + + if (c->pid != pid) + c->pid = pid; + + if (strcmp(c->name, name)) + strncpy(c->name, name, sizeof(c->name) - 1); + + for (i = 0; i < c->clients->num_classes; i++) + val[i] = read_client_busy(c->id, c->clients->class[i].class); + + c->total = 0; + + for (i = 0; i < c->clients->num_classes; i++) { + if (val[i] < c->last[i]) + continue; /* It will catch up soon. */ + + c->val[i] = val[i] - c->last[i]; + c->total += c->val[i]; + c->last[i] = val[i]; + } + + c->samples++; + c->status = ALIVE; +} + +static int class_cmp(const void *_a, const void *_b) +{ + const struct engine_class *a = _a; + const struct engine_class *b = _b; + + return a->class - b->class; +} + +static void scan_classes(struct clients *clients, unsigned int id) +{ + struct engine_class *classes; + unsigned int num, i; + struct dirent *dent; + char buf[256]; + int ret; + DIR *d; + + ret = snprintf(buf, sizeof(buf), SYSFS_CLIENTS "/%u/busy", id); + assert(ret > 0 && ret < sizeof(buf)); + if (ret <= 0 || ret == sizeof(buf)) + return; + + d = opendir(buf); + if (!d) + return; + +restart: + rewinddir(d); + + num = 0; + while ((dent = readdir(d)) != NULL) { + if (dent->d_type != DT_REG) + continue; + + num++; + } + + rewinddir(d); + + classes = calloc(num, sizeof(*classes)); + assert(classes); + + i = 0; + while ((dent = readdir(d)) != NULL) { + if (i > num) { + // FIXME: free individual names + free(classes); + goto restart; + } + + if (dent->d_type != DT_REG) + continue; + + classes[i].class = atoi(dent->d_name); + classes[i].name = class_display_name(classes[i].class); + i++; + } + + closedir(d); + + qsort(classes, num, sizeof(*classes), class_cmp); + + clients->num_classes = num; + clients->class = classes; +} + +static void +add_client(struct clients *clients, unsigned int id, unsigned int pid, + char *name) +{ + struct client *c; + + if (find_client(clients, ALIVE, id)) + return; + + c = find_client(clients, FREE, 0); + if (!c) { + unsigned int idx = clients->num_clients; + + clients->num_clients += (clients->num_clients + 2) / 2; + clients->client = realloc(clients->client, + clients->num_clients * sizeof(*c)); + assert(clients->client); + + c = &clients->client[idx]; + memset(c, 0, (clients->num_clients - idx) * sizeof(*c)); + } + + if (!clients->num_classes) + scan_classes(clients, id); + + c->id = id; + c->clients = clients; + c->val = calloc(clients->num_classes, sizeof(c->val)); + c->last = calloc(clients->num_classes, sizeof(c->last)); + assert(c->val && c->last); + + update_client(c, pid, name); +} + +static void free_client(struct client *c) +{ + free(c->val); + free(c->last); + memset(c, 0, sizeof(*c)); +} + +static char *read_client_sysfs(unsigned int id, const char *field) +{ + char buf[256]; + ssize_t ret; + + ret = snprintf(buf, sizeof(buf), SYSFS_CLIENTS "/%u/%s", id, field); + assert(ret > 0 && ret < sizeof(buf)); + if (ret <= 0 || ret == sizeof(buf)) + return NULL; + + ret = filename_to_buf(buf, buf, sizeof(buf)); + if (ret) + return NULL; /* Client exited. */ + + return strdup(buf); +} + +static void scan_clients(struct clients *clients) +{ + struct dirent *dent; + struct client *c; + char *pid, *name; + unsigned int id; + int tmp; + DIR *d; + + if (!clients) + return; + + for_each_client(clients, c, tmp) { + if (c->status == ALIVE) + c->status = PROBE; + } + + d = opendir(SYSFS_CLIENTS); + if (!d) + return; + + while ((dent = readdir(d)) != NULL) { + if (dent->d_type != DT_DIR) + continue; + if (!isdigit(dent->d_name[0])) + continue; + + id = atoi(dent->d_name); + + c = find_client(clients, PROBE, id); + + name = read_client_sysfs(id, "name"); + pid = read_client_sysfs(id, "pid"); + + if (name && pid) { + if (!c) + add_client(clients, id, atoi(pid), name); + else + update_client(c, atoi(pid), name); + } else if (c) { + c->status = PROBE; /* Will be deleted below. */ + } + + if (name) + free(name); + if (pid) + free(pid); + } + + closedir(d); + + for_each_client(clients, c, tmp) { + if (c->status == PROBE) + free_client(c); + } +} + +static int cmp(const void *_a, const void *_b) +{ + const struct client *a = _a; + const struct client *b = _b; + long tot_a = a->total; + long tot_b = b->total; + + tot_a *= a->status == ALIVE && a->samples > 1; + tot_b *= b->status == ALIVE && b->samples > 1; + + tot_b -= tot_a; + + if (!tot_b) + return (int)b->id - a->id; + + while (tot_b > INT_MAX || tot_b < INT_MIN) + tot_b /= 2; + + return tot_b; +} + static const char *bars[] = { " ", "▏", "▎", "▍", "▌", "▋", "▊", "▉", "█" }; +static void n_spaces(const unsigned int n) +{ + unsigned int i; + + for (i = 0; i < n; i++) + putchar(' '); +} + static void print_percentage_bar(double percent, int max_len) { - int bar_len = percent * (8 * (max_len - 2)) / 100.0; - int i; + int bar_len, i, len = max_len - 2; + const int w = 8; + + assert(max_len > 0); + + bar_len = percent * (w * len) / 100.0; + if (bar_len > (len * w)) + bar_len = len * w; putchar('|'); - for (i = bar_len; i >= 8; i -= 8) - printf("%s", bars[8]); + for (i = bar_len; i >= w; i -= w) + printf("%s", bars[w]); if (i) printf("%s", bars[i]); - for (i = 0; i < (max_len - 2 - (bar_len + 7) / 8); i++) - putchar(' '); + len -= (bar_len + (w - 1)) / w; + n_spaces(len); putchar('|'); } @@ -798,6 +1122,18 @@ json_close_struct(void) fflush(stdout); } +static void +__json_add_member(const char *key, const char *val) +{ + assert(json_indent_level < ARRAY_SIZE(json_indent)); + + fprintf(out, "%s%s\"%s\": \"%s\"", + json_struct_members ? ",\n" : "", + json_indent[json_indent_level], key, val); + + json_struct_members++; +} + static unsigned int json_add_member(const struct cnt_group *parent, struct cnt_item *item, unsigned int headers) @@ -1098,8 +1434,6 @@ print_header(struct engines *engines, double t, memmove(&groups[0], &groups[1], sizeof(groups) - sizeof(groups[0])); - pops->open_struct(NULL); - *consumed = print_groups(groups); if (output_mode == INTERACTIVE) { @@ -1245,7 +1579,7 @@ print_engine(struct engines *engines, unsigned int i, double t, engine->display_name, engine_items[0].buf); val = pmu_calc(&engine->busy.val, 1e9, t, 100); - print_percentage_bar(val, max_w - len); + print_percentage_bar(val, max_w > len ? max_w - len : 0); printf("%s\n", buf); @@ -1260,7 +1594,6 @@ print_engines_footer(struct engines *engines, double t, int lines, int con_w, int con_h) { pops->close_struct(); - pops->close_struct(); if (output_mode == INTERACTIVE) { if (lines++ < con_h) @@ -1270,6 +1603,147 @@ print_engines_footer(struct engines *engines, double t, return lines; } +static int +print_clients_header(struct clients *clients, int lines, + int con_w, int con_h, int *class_w) +{ + int len; + + if (output_mode == INTERACTIVE) { + if (lines++ >= con_h) + return lines; + + printf("\033[7m"); + len = printf("%5s%16s", "PID", "NAME"); + + if (lines++ >= con_h || len >= con_w) + return lines; + + if (clients->num_classes) { + unsigned int i; + int width; + + *class_w = width = (con_w - len) / clients->num_classes; + + for (i = 0; i < clients->num_classes; i++) { + const char *name = clients->class[i].name; + int name_len = strlen(name); + int pad = (width - name_len) / 2; + int spaces = width - pad - name_len; + + if (pad < 0 || spaces < 0) + continue; + + n_spaces(pad); + printf("%s", name); + n_spaces(spaces); + len += pad + name_len + spaces; + } + } + + n_spaces(con_w - len); + printf("\033[0m\n"); + } else { + if (clients->num_classes) + pops->open_struct("clients"); + } + + return lines; +} + +static void count_engines(struct clients *clients, struct engines *engines) +{ + unsigned int i; + + for (i = 0; i < engines->num_engines; i++) { + struct engine *engine = engine_ptr(engines, i); + + clients->class[engine->class].num_engines++; + } +} + +static int +print_client(struct client *c, struct engines *engines, double t, int lines, + int con_w, int con_h, unsigned int period_us, int *class_w) +{ + struct clients *clients = c->clients; + unsigned int i; + + if (output_mode == INTERACTIVE) { + printf("%5u%16s ", c->pid, c->name); + + for (i = 0; i < clients->num_classes; i++) { + double pct; + + if (!clients->class[i].num_engines) + count_engines(clients, engines); + + pct = (double)c->val[i] / period_us / 1e3 * 100 / + clients->class[i].num_engines; + + /* + * Guard against possible time-drift between sampling + * client data and time we obtained our time-delta from + * PMU. + */ + if (pct > 100.0) + pct = 100.0; + + print_percentage_bar(pct, *class_w); + } + + putchar('\n'); + } else if (output_mode == JSON) { + char buf[64]; + + snprintf(buf, sizeof(buf), "%u", c->id); + pops->open_struct(buf); + + __json_add_member("name", c->name); + + snprintf(buf, sizeof(buf), "%u", c->pid); + __json_add_member("pid", buf); + + pops->open_struct("engine-classes"); + + for (i = 0; i < clients->num_classes; i++) { + double pct; + + snprintf(buf, sizeof(buf), "%s", + clients->class[i].name); + pops->open_struct(buf); + + pct = (double)c->val[i] / period_us / 1e3 * 100; + snprintf(buf, sizeof(buf), "%f", pct); + __json_add_member("busy", buf); + + __json_add_member("unit", "%"); + + pops->close_struct(); + } + + pops->close_struct(); + pops->close_struct(); + } + + return lines; +} + +static int +print_clients_footer(struct clients *clients, double t, + int lines, int con_w, int con_h) +{ + if (output_mode == INTERACTIVE) { + if (lines++ < con_h) + printf("\n"); + } else { + if (clients->num_classes) + pops->close_struct(); + } + + return lines; +} + static bool stop_top; static void sigint_handler(int sig) @@ -1307,6 +1781,7 @@ static char *tr_pmu_name(struct igt_device_card *card) int main(int argc, char **argv) { unsigned int period_us = DEFAULT_PERIOD_MS * 1000; + struct clients *clients = NULL; int con_w = -1, con_h = -1; char *output_path = NULL; struct engines *engines; @@ -1429,12 +1904,16 @@ int main(int argc, char **argv) ret = EXIT_SUCCESS; + clients = init_clients(); + pmu_sample(engines); + scan_clients(clients); while (!stop_top) { bool consumed = false; - int lines = 0; + int j, lines = 0; struct winsize ws; + struct client *c; double t; /* Update terminal size. */ @@ -1448,10 +1927,18 @@ int main(int argc, char **argv) pmu_sample(engines); t = (double)(engines->ts.cur - engines->ts.prev) / 1e9; + scan_clients(clients); + if (clients) { + qsort(clients->client, clients->num_clients, + sizeof(*clients->client), cmp); + } + if (stop_top) break; while (!consumed) { + pops->open_struct(NULL); + lines = print_header(engines, t, lines, con_w, con_h, &consumed); @@ -1470,6 +1957,36 @@ int main(int argc, char **argv) lines = print_engines_footer(engines, t, lines, con_w, con_h); + + if (clients) { + int class_w; + + lines = print_clients_header(clients, lines, + con_w, con_h, + &class_w); + + for_each_client(clients, c, j) { + if (lines++ > con_h) + break; + + assert(c->status != PROBE); + if (c->status != ALIVE) + break; + + if (c->samples < 2) + continue; + + lines = print_client(c, engines, t, + lines, con_w, + con_h, period_us, + &class_w); + } + + lines = print_clients_footer(clients, t, lines, + con_w, con_h); + } + + pops->close_struct(); } if (stop_top) -- 2.25.1 _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [igt-dev] [PATCH i-g-t 1/1] intel-gpu-top: Support for client stats 2020-09-04 13:06 ` [igt-dev] [PATCH i-g-t 1/1] intel-gpu-top: Support for client stats Tvrtko Ursulin @ 2020-09-07 9:31 ` Petri Latvala 2020-09-07 9:53 ` [Intel-gfx] " Tvrtko Ursulin 2020-09-14 15:39 ` [igt-dev] [PATCH i-g-t v4] " Tvrtko Ursulin 1 sibling, 1 reply; 9+ messages in thread From: Petri Latvala @ 2020-09-07 9:31 UTC (permalink / raw) To: Tvrtko Ursulin; +Cc: igt-dev, Intel-gfx, Tvrtko Ursulin On Fri, Sep 04, 2020 at 02:06:07PM +0100, Tvrtko Ursulin wrote: > From: Tvrtko Ursulin <tvrtko.ursulin@intel.com> > > Adds support for per-client engine busyness stats i915 exports in sysfs > and produces output like the below: > > ========================================================================== > intel-gpu-top - 935/ 935 MHz; 0% RC6; 14.73 Watts; 1097 irqs/s > > IMC reads: 1401 MiB/s > IMC writes: 4 MiB/s > > ENGINE BUSY MI_SEMA MI_WAIT > Render/3D/0 63.73% |███████████████████ | 3% 0% > Blitter/0 9.53% |██▊ | 6% 0% > Video/0 39.32% |███████████▊ | 16% 0% > Video/1 15.62% |████▋ | 0% 0% > VideoEnhance/0 0.00% | | 0% 0% > > PID NAME RCS BCS VCS VECS > 4084 gem_wsim |█████▌ ||█ || || | > 4086 gem_wsim |█▌ || ||███ || | > ========================================================================== > > Apart from the existing physical engine utilization it now also shows > utilization per client and per engine class. > > v2: > * Version to match removal of global enable_stats toggle. > * Plus various fixes. > > v3: > * Support brief backward jumps in client stats. > > Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> > --- > tools/intel_gpu_top.c | 539 +++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 528 insertions(+), 11 deletions(-) > > diff --git a/tools/intel_gpu_top.c b/tools/intel_gpu_top.c > index cae01c25b920..9eac569e75de 100644 > --- a/tools/intel_gpu_top.c > +++ b/tools/intel_gpu_top.c > @@ -679,23 +679,347 @@ static void pmu_sample(struct engines *engines) > } > } > > +enum client_status { > + FREE = 0, /* mbz */ > + ALIVE, > + PROBE > +}; > + > +struct clients; > + > +struct client { > + struct clients *clients; > + > + enum client_status status; > + unsigned int id; > + unsigned int pid; > + char name[128]; > + unsigned int samples; > + unsigned long total; > + struct engines *engines; > + unsigned long *val; > + uint64_t *last; > +}; > + > +struct engine_class { > + unsigned int class; > + const char *name; > + unsigned int num_engines; > +}; > + > +struct clients { > + unsigned int num_classes; > + struct engine_class *class; > + > + unsigned int num_clients; > + struct client *client; > +}; > + > +#define for_each_client(clients, c, tmp) \ > + for ((tmp) = (clients)->num_clients, c = (clients)->client; \ > + (tmp > 0); (tmp)--, (c)++) > + > +static struct clients *init_clients(void) > +{ > + struct clients *clients = malloc(sizeof(*clients)); > + > + return memset(clients, 0, sizeof(*clients)); > +} > + > +#define SYSFS_CLIENTS "/sys/class/drm/card0/clients" Now that intel_gpu_top supports device selection, this path works every time only 60% of the time, right? -- Petri Latvala _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Intel-gfx] [igt-dev] [PATCH i-g-t 1/1] intel-gpu-top: Support for client stats 2020-09-07 9:31 ` Petri Latvala @ 2020-09-07 9:53 ` Tvrtko Ursulin 0 siblings, 0 replies; 9+ messages in thread From: Tvrtko Ursulin @ 2020-09-07 9:53 UTC (permalink / raw) To: Petri Latvala; +Cc: igt-dev, Intel-gfx On 07/09/2020 10:31, Petri Latvala wrote: > On Fri, Sep 04, 2020 at 02:06:07PM +0100, Tvrtko Ursulin wrote: >> From: Tvrtko Ursulin <tvrtko.ursulin@intel.com> >> >> Adds support for per-client engine busyness stats i915 exports in sysfs >> and produces output like the below: >> >> ========================================================================== >> intel-gpu-top - 935/ 935 MHz; 0% RC6; 14.73 Watts; 1097 irqs/s >> >> IMC reads: 1401 MiB/s >> IMC writes: 4 MiB/s >> >> ENGINE BUSY MI_SEMA MI_WAIT >> Render/3D/0 63.73% |███████████████████ | 3% 0% >> Blitter/0 9.53% |██▊ | 6% 0% >> Video/0 39.32% |███████████▊ | 16% 0% >> Video/1 15.62% |████▋ | 0% 0% >> VideoEnhance/0 0.00% | | 0% 0% >> >> PID NAME RCS BCS VCS VECS >> 4084 gem_wsim |█████▌ ||█ || || | >> 4086 gem_wsim |█▌ || ||███ || | >> ========================================================================== >> >> Apart from the existing physical engine utilization it now also shows >> utilization per client and per engine class. >> >> v2: >> * Version to match removal of global enable_stats toggle. >> * Plus various fixes. >> >> v3: >> * Support brief backward jumps in client stats. >> >> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> >> --- >> tools/intel_gpu_top.c | 539 +++++++++++++++++++++++++++++++++++++++++- >> 1 file changed, 528 insertions(+), 11 deletions(-) >> >> diff --git a/tools/intel_gpu_top.c b/tools/intel_gpu_top.c >> index cae01c25b920..9eac569e75de 100644 >> --- a/tools/intel_gpu_top.c >> +++ b/tools/intel_gpu_top.c >> @@ -679,23 +679,347 @@ static void pmu_sample(struct engines *engines) >> } >> } >> >> +enum client_status { >> + FREE = 0, /* mbz */ >> + ALIVE, >> + PROBE >> +}; >> + >> +struct clients; >> + >> +struct client { >> + struct clients *clients; >> + >> + enum client_status status; >> + unsigned int id; >> + unsigned int pid; >> + char name[128]; >> + unsigned int samples; >> + unsigned long total; >> + struct engines *engines; >> + unsigned long *val; >> + uint64_t *last; >> +}; >> + >> +struct engine_class { >> + unsigned int class; >> + const char *name; >> + unsigned int num_engines; >> +}; >> + >> +struct clients { >> + unsigned int num_classes; >> + struct engine_class *class; >> + >> + unsigned int num_clients; >> + struct client *client; >> +}; >> + >> +#define for_each_client(clients, c, tmp) \ >> + for ((tmp) = (clients)->num_clients, c = (clients)->client; \ >> + (tmp > 0); (tmp)--, (c)++) >> + >> +static struct clients *init_clients(void) >> +{ >> + struct clients *clients = malloc(sizeof(*clients)); >> + >> + return memset(clients, 0, sizeof(*clients)); >> +} >> + >> +#define SYSFS_CLIENTS "/sys/class/drm/card0/clients" > > Now that intel_gpu_top supports device selection, this path works > every time only 60% of the time, right? Gah yes.. thanks. I cherry picked from the wrong branch. I did already have this updated for device selection, somewhere. Will find it. Regards, Tvrtko _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 9+ messages in thread
* [igt-dev] [PATCH i-g-t v4] intel-gpu-top: Support for client stats 2020-09-04 13:06 ` [igt-dev] [PATCH i-g-t 1/1] intel-gpu-top: Support for client stats Tvrtko Ursulin 2020-09-07 9:31 ` Petri Latvala @ 2020-09-14 15:39 ` Tvrtko Ursulin 1 sibling, 0 replies; 9+ messages in thread From: Tvrtko Ursulin @ 2020-09-14 15:39 UTC (permalink / raw) To: igt-dev; +Cc: Intel-gfx, Tvrtko Ursulin From: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Adds support for per-client engine busyness stats i915 exports in sysfs and produces output like the below: ========================================================================== intel-gpu-top - 935/ 935 MHz; 0% RC6; 14.73 Watts; 1097 irqs/s IMC reads: 1401 MiB/s IMC writes: 4 MiB/s ENGINE BUSY MI_SEMA MI_WAIT Render/3D/0 63.73% |███████████████████ | 3% 0% Blitter/0 9.53% |██▊ | 6% 0% Video/0 39.32% |███████████▊ | 16% 0% Video/1 15.62% |████▋ | 0% 0% VideoEnhance/0 0.00% | | 0% 0% PID NAME RCS BCS VCS VECS 4084 gem_wsim |█████▌ ||█ || || | 4086 gem_wsim |█▌ || ||███ || | ========================================================================== Apart from the existing physical engine utilization it now also shows utilization per client and per engine class. v2: * Version to match removal of global enable_stats toggle. * Plus various fixes. v3: * Support brief backward jumps in client stats. v4: * Support device selection. Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> --- tools/intel_gpu_top.c | 554 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 543 insertions(+), 11 deletions(-) diff --git a/tools/intel_gpu_top.c b/tools/intel_gpu_top.c index cae01c25b920..a3c69d73100e 100644 --- a/tools/intel_gpu_top.c +++ b/tools/intel_gpu_top.c @@ -679,23 +679,362 @@ static void pmu_sample(struct engines *engines) } } +enum client_status { + FREE = 0, /* mbz */ + ALIVE, + PROBE +}; + +struct clients; + +struct client { + struct clients *clients; + + enum client_status status; + unsigned int id; + unsigned int pid; + char name[128]; + unsigned int samples; + unsigned long total; + struct engines *engines; + unsigned long *val; + uint64_t *last; +}; + +struct engine_class { + unsigned int class; + const char *name; + unsigned int num_engines; +}; + +struct clients { + unsigned int num_classes; + struct engine_class *class; + + char sysfs_root[64]; + + unsigned int num_clients; + struct client *client; +}; + +#define for_each_client(clients, c, tmp) \ + for ((tmp) = (clients)->num_clients, c = (clients)->client; \ + (tmp > 0); (tmp)--, (c)++) + +static struct clients *init_clients(const char *drm_card) +{ + struct clients *clients = malloc(sizeof(*clients)); + const char *slash; + ssize_t ret; + + memset(clients, 0, sizeof(*clients)); + + if (drm_card) { + slash = rindex(drm_card, '/'); + assert(slash); + } else { + slash = "card0"; + } + + ret = snprintf(clients->sysfs_root, sizeof(clients->sysfs_root), + "/sys/class/drm/%s/clients/", slash); + assert(ret > 0 && ret < sizeof(clients->sysfs_root)); + + return clients; +} + +static uint64_t +read_client_busy(const struct client *client, unsigned int class) +{ + char buf[256]; + ssize_t ret; + + ret = snprintf(buf, sizeof(buf), "%s/%u/busy/%u", + client->clients->sysfs_root, client->id, class); + assert(ret > 0 && ret < sizeof(buf)); + if (ret <= 0 || ret == sizeof(buf)) + return 0; + + return filename_to_u64(buf, 10); +} + +static struct client * +find_client(struct clients *clients, enum client_status status, unsigned int id) +{ + struct client *c; + int tmp; + + for_each_client(clients, c, tmp) { + if ((status == FREE && c->status == FREE) || + (status == c->status && c->id == id)) + return c; + } + + return NULL; +} + +static void update_client(struct client *c, unsigned int pid, char *name) +{ + uint64_t val[c->clients->num_classes]; + unsigned int i; + + if (c->pid != pid) + c->pid = pid; + + if (strcmp(c->name, name)) + strncpy(c->name, name, sizeof(c->name) - 1); + + for (i = 0; i < c->clients->num_classes; i++) + val[i] = read_client_busy(c, c->clients->class[i].class); + + c->total = 0; + + for (i = 0; i < c->clients->num_classes; i++) { + if (val[i] < c->last[i]) + continue; /* It will catch up soon. */ + + c->val[i] = val[i] - c->last[i]; + c->total += c->val[i]; + c->last[i] = val[i]; + } + + c->samples++; + c->status = ALIVE; +} + +static int class_cmp(const void *_a, const void *_b) +{ + const struct engine_class *a = _a; + const struct engine_class *b = _b; + + return a->class - b->class; +} + +static void scan_classes(struct clients *clients, unsigned int id) +{ + struct engine_class *classes; + unsigned int num, i; + struct dirent *dent; + char buf[256]; + int ret; + DIR *d; + + ret = snprintf(buf, sizeof(buf), "%s/%u/busy", clients->sysfs_root, id); + assert(ret > 0 && ret < sizeof(buf)); + if (ret <= 0 || ret == sizeof(buf)) + return; + + d = opendir(buf); + if (!d) + return; + +restart: + rewinddir(d); + + num = 0; + while ((dent = readdir(d)) != NULL) { + if (dent->d_type != DT_REG) + continue; + + num++; + } + + rewinddir(d); + + classes = calloc(num, sizeof(*classes)); + assert(classes); + + i = 0; + while ((dent = readdir(d)) != NULL) { + if (i > num) { + free(classes); + goto restart; + } + + if (dent->d_type != DT_REG) + continue; + + classes[i].class = atoi(dent->d_name); + classes[i].name = class_display_name(classes[i].class); + i++; + } + + closedir(d); + + qsort(classes, num, sizeof(*classes), class_cmp); + + clients->num_classes = num; + clients->class = classes; +} + +static void +add_client(struct clients *clients, unsigned int id, unsigned int pid, + char *name) +{ + struct client *c; + + if (find_client(clients, ALIVE, id)) + return; + + c = find_client(clients, FREE, 0); + if (!c) { + unsigned int idx = clients->num_clients; + + clients->num_clients += (clients->num_clients + 2) / 2; + clients->client = realloc(clients->client, + clients->num_clients * sizeof(*c)); + assert(clients->client); + + c = &clients->client[idx]; + memset(c, 0, (clients->num_clients - idx) * sizeof(*c)); + } + + if (!clients->num_classes) + scan_classes(clients, id); + + c->id = id; + c->clients = clients; + c->val = calloc(clients->num_classes, sizeof(c->val)); + c->last = calloc(clients->num_classes, sizeof(c->last)); + assert(c->val && c->last); + + update_client(c, pid, name); +} + +static void free_client(struct client *c) +{ + free(c->val); + free(c->last); + memset(c, 0, sizeof(*c)); +} + +static char * +read_client_sysfs(const char *sysfs_root, unsigned int id, const char *field) +{ + char buf[256]; + ssize_t ret; + + ret = snprintf(buf, sizeof(buf), "%s/%u/%s", sysfs_root, id, field); + assert(ret > 0 && ret < sizeof(buf)); + if (ret <= 0 || ret == sizeof(buf)) + return NULL; + + ret = filename_to_buf(buf, buf, sizeof(buf)); + if (ret) + return NULL; /* Client exited. */ + + return strdup(buf); +} + +static void scan_clients(struct clients *clients) +{ + struct dirent *dent; + struct client *c; + char *pid, *name; + unsigned int id; + int tmp; + DIR *d; + + if (!clients) + return; + + for_each_client(clients, c, tmp) { + if (c->status == ALIVE) + c->status = PROBE; + } + + d = opendir(clients->sysfs_root); + if (!d) + return; + + while ((dent = readdir(d)) != NULL) { + if (dent->d_type != DT_DIR) + continue; + if (!isdigit(dent->d_name[0])) + continue; + + id = atoi(dent->d_name); + + c = find_client(clients, PROBE, id); + + name = read_client_sysfs(clients->sysfs_root, id, "name"); + pid = read_client_sysfs(clients->sysfs_root, id, "pid"); + + if (name && pid) { + if (!c) + add_client(clients, id, atoi(pid), name); + else + update_client(c, atoi(pid), name); + } else if (c) { + c->status = PROBE; /* Will be deleted below. */ + } + + if (name) + free(name); + if (pid) + free(pid); + } + + closedir(d); + + for_each_client(clients, c, tmp) { + if (c->status == PROBE) + free_client(c); + } +} + +static int cmp(const void *_a, const void *_b) +{ + const struct client *a = _a; + const struct client *b = _b; + long tot_a = a->total; + long tot_b = b->total; + + tot_a *= a->status == ALIVE && a->samples > 1; + tot_b *= b->status == ALIVE && b->samples > 1; + + tot_b -= tot_a; + + if (!tot_b) + return (int)b->id - a->id; + + while (tot_b > INT_MAX || tot_b < INT_MIN) + tot_b /= 2; + + return tot_b; +} + static const char *bars[] = { " ", "▏", "▎", "▍", "▌", "▋", "▊", "▉", "█" }; +static void n_spaces(const unsigned int n) +{ + unsigned int i; + + for (i = 0; i < n; i++) + putchar(' '); +} + static void print_percentage_bar(double percent, int max_len) { - int bar_len = percent * (8 * (max_len - 2)) / 100.0; - int i; + int bar_len, i, len = max_len - 2; + const int w = 8; + + assert(max_len > 0); + + bar_len = percent * (w * len) / 100.0; + if (bar_len > (len * w)) + bar_len = len * w; putchar('|'); - for (i = bar_len; i >= 8; i -= 8) - printf("%s", bars[8]); + for (i = bar_len; i >= w; i -= w) + printf("%s", bars[w]); if (i) printf("%s", bars[i]); - for (i = 0; i < (max_len - 2 - (bar_len + 7) / 8); i++) - putchar(' '); + len -= (bar_len + (w - 1)) / w; + n_spaces(len); putchar('|'); } @@ -798,6 +1137,18 @@ json_close_struct(void) fflush(stdout); } +static void +__json_add_member(const char *key, const char *val) +{ + assert(json_indent_level < ARRAY_SIZE(json_indent)); + + fprintf(out, "%s%s\"%s\": \"%s\"", + json_struct_members ? ",\n" : "", + json_indent[json_indent_level], key, val); + + json_struct_members++; +} + static unsigned int json_add_member(const struct cnt_group *parent, struct cnt_item *item, unsigned int headers) @@ -1098,8 +1449,6 @@ print_header(struct engines *engines, double t, memmove(&groups[0], &groups[1], sizeof(groups) - sizeof(groups[0])); - pops->open_struct(NULL); - *consumed = print_groups(groups); if (output_mode == INTERACTIVE) { @@ -1245,7 +1594,7 @@ print_engine(struct engines *engines, unsigned int i, double t, engine->display_name, engine_items[0].buf); val = pmu_calc(&engine->busy.val, 1e9, t, 100); - print_percentage_bar(val, max_w - len); + print_percentage_bar(val, max_w > len ? max_w - len : 0); printf("%s\n", buf); @@ -1260,7 +1609,6 @@ print_engines_footer(struct engines *engines, double t, int lines, int con_w, int con_h) { pops->close_struct(); - pops->close_struct(); if (output_mode == INTERACTIVE) { if (lines++ < con_h) @@ -1270,6 +1618,147 @@ print_engines_footer(struct engines *engines, double t, return lines; } +static int +print_clients_header(struct clients *clients, int lines, + int con_w, int con_h, int *class_w) +{ + int len; + + if (output_mode == INTERACTIVE) { + if (lines++ >= con_h) + return lines; + + printf("\033[7m"); + len = printf("%5s%16s", "PID", "NAME"); + + if (lines++ >= con_h || len >= con_w) + return lines; + + if (clients->num_classes) { + unsigned int i; + int width; + + *class_w = width = (con_w - len) / clients->num_classes; + + for (i = 0; i < clients->num_classes; i++) { + const char *name = clients->class[i].name; + int name_len = strlen(name); + int pad = (width - name_len) / 2; + int spaces = width - pad - name_len; + + if (pad < 0 || spaces < 0) + continue; + + n_spaces(pad); + printf("%s", name); + n_spaces(spaces); + len += pad + name_len + spaces; + } + } + + n_spaces(con_w - len); + printf("\033[0m\n"); + } else { + if (clients->num_classes) + pops->open_struct("clients"); + } + + return lines; +} + +static void count_engines(struct clients *clients, struct engines *engines) +{ + unsigned int i; + + for (i = 0; i < engines->num_engines; i++) { + struct engine *engine = engine_ptr(engines, i); + + clients->class[engine->class].num_engines++; + } +} + +static int +print_client(struct client *c, struct engines *engines, double t, int lines, + int con_w, int con_h, unsigned int period_us, int *class_w) +{ + struct clients *clients = c->clients; + unsigned int i; + + if (output_mode == INTERACTIVE) { + printf("%5u%16s ", c->pid, c->name); + + for (i = 0; i < clients->num_classes; i++) { + double pct; + + if (!clients->class[i].num_engines) + count_engines(clients, engines); + + pct = (double)c->val[i] / period_us / 1e3 * 100 / + clients->class[i].num_engines; + + /* + * Guard against possible time-drift between sampling + * client data and time we obtained our time-delta from + * PMU. + */ + if (pct > 100.0) + pct = 100.0; + + print_percentage_bar(pct, *class_w); + } + + putchar('\n'); + } else if (output_mode == JSON) { + char buf[64]; + + snprintf(buf, sizeof(buf), "%u", c->id); + pops->open_struct(buf); + + __json_add_member("name", c->name); + + snprintf(buf, sizeof(buf), "%u", c->pid); + __json_add_member("pid", buf); + + pops->open_struct("engine-classes"); + + for (i = 0; i < clients->num_classes; i++) { + double pct; + + snprintf(buf, sizeof(buf), "%s", + clients->class[i].name); + pops->open_struct(buf); + + pct = (double)c->val[i] / period_us / 1e3 * 100; + snprintf(buf, sizeof(buf), "%f", pct); + __json_add_member("busy", buf); + + __json_add_member("unit", "%"); + + pops->close_struct(); + } + + pops->close_struct(); + pops->close_struct(); + } + + return lines; +} + +static int +print_clients_footer(struct clients *clients, double t, + int lines, int con_w, int con_h) +{ + if (output_mode == INTERACTIVE) { + if (lines++ < con_h) + printf("\n"); + } else { + if (clients->num_classes) + pops->close_struct(); + } + + return lines; +} + static bool stop_top; static void sigint_handler(int sig) @@ -1307,6 +1796,7 @@ static char *tr_pmu_name(struct igt_device_card *card) int main(int argc, char **argv) { unsigned int period_us = DEFAULT_PERIOD_MS * 1000; + struct clients *clients = NULL; int con_w = -1, con_h = -1; char *output_path = NULL; struct engines *engines; @@ -1429,12 +1919,16 @@ int main(int argc, char **argv) ret = EXIT_SUCCESS; + clients = init_clients(card.pci_slot_name[0] ? card.card : NULL); + pmu_sample(engines); + scan_clients(clients); while (!stop_top) { bool consumed = false; - int lines = 0; + int j, lines = 0; struct winsize ws; + struct client *c; double t; /* Update terminal size. */ @@ -1448,10 +1942,18 @@ int main(int argc, char **argv) pmu_sample(engines); t = (double)(engines->ts.cur - engines->ts.prev) / 1e9; + scan_clients(clients); + if (clients) { + qsort(clients->client, clients->num_clients, + sizeof(*clients->client), cmp); + } + if (stop_top) break; while (!consumed) { + pops->open_struct(NULL); + lines = print_header(engines, t, lines, con_w, con_h, &consumed); @@ -1470,6 +1972,36 @@ int main(int argc, char **argv) lines = print_engines_footer(engines, t, lines, con_w, con_h); + + if (clients) { + int class_w; + + lines = print_clients_header(clients, lines, + con_w, con_h, + &class_w); + + for_each_client(clients, c, j) { + if (lines++ > con_h) + break; + + assert(c->status != PROBE); + if (c->status != ALIVE) + break; + + if (c->samples < 2) + continue; + + lines = print_client(c, engines, t, + lines, con_w, + con_h, period_us, + &class_w); + } + + lines = print_clients_footer(clients, t, lines, + con_w, con_h); + } + + pops->close_struct(); } if (stop_top) -- 2.25.1 _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [igt-dev] ✓ Fi.CI.BAT: success for Per client engine busyness for intel_gpu_top 2020-09-04 13:06 [Intel-gfx] [PATCH i-g-t 0/1] Per client engine busyness for intel_gpu_top Tvrtko Ursulin 2020-09-04 13:06 ` [igt-dev] [PATCH i-g-t 1/1] intel-gpu-top: Support for client stats Tvrtko Ursulin @ 2020-09-04 13:40 ` Patchwork 2020-09-04 22:51 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork ` (2 subsequent siblings) 4 siblings, 0 replies; 9+ messages in thread From: Patchwork @ 2020-09-04 13:40 UTC (permalink / raw) To: Tvrtko Ursulin; +Cc: igt-dev [-- Attachment #1.1: Type: text/plain, Size: 3154 bytes --] == Series Details == Series: Per client engine busyness for intel_gpu_top URL : https://patchwork.freedesktop.org/series/81338/ State : success == Summary == CI Bug Log - changes from IGT_5779 -> IGTPW_4954 ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/index.html Known issues ------------ Here are the changes found in IGTPW_4954 that come from known issues: ### IGT changes ### #### Issues hit #### * igt@i915_pm_rpm@basic-pci-d3-state: - fi-bsw-kefka: [PASS][1] -> [DMESG-WARN][2] ([i915#1982]) [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/fi-bsw-kefka/igt@i915_pm_rpm@basic-pci-d3-state.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/fi-bsw-kefka/igt@i915_pm_rpm@basic-pci-d3-state.html #### Possible fixes #### * igt@i915_selftest@live@gem_contexts: - fi-tgl-u2: [INCOMPLETE][3] ([i915#2045]) -> [PASS][4] [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/fi-tgl-u2/igt@i915_selftest@live@gem_contexts.html [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/fi-tgl-u2/igt@i915_selftest@live@gem_contexts.html * igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic: - fi-bsw-n3050: [DMESG-WARN][5] ([i915#1982]) -> [PASS][6] [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/fi-bsw-n3050/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/fi-bsw-n3050/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html - fi-bsw-kefka: [DMESG-WARN][7] ([i915#1982]) -> [PASS][8] [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/fi-bsw-kefka/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/fi-bsw-kefka/igt@kms_cursor_legacy@basic-busy-flip-before-cursor-atomic.html * igt@kms_cursor_legacy@basic-flip-before-cursor-atomic: - fi-icl-u2: [DMESG-WARN][9] ([i915#1982]) -> [PASS][10] [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/fi-icl-u2/igt@kms_cursor_legacy@basic-flip-before-cursor-atomic.html [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/fi-icl-u2/igt@kms_cursor_legacy@basic-flip-before-cursor-atomic.html [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982 [i915#2045]: https://gitlab.freedesktop.org/drm/intel/issues/2045 Participating hosts (36 -> 32) ------------------------------ Missing (4): fi-byt-j1900 fi-byt-clapper fi-byt-squawks fi-bsw-cyan Build changes ------------- * CI: CI-20190529 -> None * IGT: IGT_5779 -> IGTPW_4954 CI-20190529: 20190529 CI_DRM_8965: f4cbf17fababf80c1c67c6f1687fb8bf7e00a263 @ git://anongit.freedesktop.org/gfx-ci/linux IGTPW_4954: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/index.html IGT_5779: f52bf19b5f02d52fc3e201c6467ec3f511227fba @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/index.html [-- Attachment #1.2: Type: text/html, Size: 4056 bytes --] [-- Attachment #2: Type: text/plain, Size: 154 bytes --] _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 9+ messages in thread
* [igt-dev] ✗ Fi.CI.IGT: failure for Per client engine busyness for intel_gpu_top 2020-09-04 13:06 [Intel-gfx] [PATCH i-g-t 0/1] Per client engine busyness for intel_gpu_top Tvrtko Ursulin 2020-09-04 13:06 ` [igt-dev] [PATCH i-g-t 1/1] intel-gpu-top: Support for client stats Tvrtko Ursulin 2020-09-04 13:40 ` [igt-dev] ✓ Fi.CI.BAT: success for Per client engine busyness for intel_gpu_top Patchwork @ 2020-09-04 22:51 ` Patchwork 2020-09-14 17:40 ` [igt-dev] ✓ Fi.CI.BAT: success for Per client engine busyness for intel_gpu_top (rev2) Patchwork 2020-09-15 0:32 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork 4 siblings, 0 replies; 9+ messages in thread From: Patchwork @ 2020-09-04 22:51 UTC (permalink / raw) To: Tvrtko Ursulin; +Cc: igt-dev [-- Attachment #1.1: Type: text/plain, Size: 10915 bytes --] == Series Details == Series: Per client engine busyness for intel_gpu_top URL : https://patchwork.freedesktop.org/series/81338/ State : failure == Summary == CI Bug Log - changes from IGT_5779_full -> IGTPW_4954_full ==================================================== Summary ------- **FAILURE** Serious unknown changes coming with IGTPW_4954_full absolutely need to be verified manually. If you think the reported changes have nothing to do with the changes introduced in IGTPW_4954_full, please notify your bug team to allow them to document this new failure mode, which will reduce false positives in CI. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/index.html Possible new issues ------------------- Here are the unknown changes that may have been introduced in IGTPW_4954_full: ### IGT changes ### #### Possible regressions #### * igt@gem_ctx_persistence@engines-hostile@vecs0: - shard-tglb: [PASS][1] -> [FAIL][2] [1]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/shard-tglb7/igt@gem_ctx_persistence@engines-hostile@vecs0.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/shard-tglb3/igt@gem_ctx_persistence@engines-hostile@vecs0.html Known issues ------------ Here are the changes found in IGTPW_4954_full that come from known issues: ### IGT changes ### #### Issues hit #### * igt@gem_exec_reloc@basic-many-active@rcs0: - shard-apl: [PASS][3] -> [FAIL][4] ([i915#1635] / [i915#2389]) [3]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/shard-apl7/igt@gem_exec_reloc@basic-many-active@rcs0.html [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/shard-apl2/igt@gem_exec_reloc@basic-many-active@rcs0.html - shard-glk: [PASS][5] -> [FAIL][6] ([i915#2389]) +2 similar issues [5]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/shard-glk3/igt@gem_exec_reloc@basic-many-active@rcs0.html [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/shard-glk5/igt@gem_exec_reloc@basic-many-active@rcs0.html * igt@gem_exec_whisper@basic-forked: - shard-glk: [PASS][7] -> [DMESG-WARN][8] ([i915#118] / [i915#95]) [7]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/shard-glk6/igt@gem_exec_whisper@basic-forked.html [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/shard-glk1/igt@gem_exec_whisper@basic-forked.html * igt@gem_softpin@noreloc-s3: - shard-kbl: [PASS][9] -> [DMESG-WARN][10] ([i915#180]) +1 similar issue [9]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/shard-kbl1/igt@gem_softpin@noreloc-s3.html [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/shard-kbl4/igt@gem_softpin@noreloc-s3.html * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-pwrite: - shard-tglb: [PASS][11] -> [DMESG-WARN][12] ([i915#1982]) [11]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/shard-tglb7/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-pwrite.html [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/shard-tglb2/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-pwrite.html * igt@kms_plane@plane-panning-bottom-right-suspend-pipe-b-planes: - shard-iclb: [PASS][13] -> [INCOMPLETE][14] ([i915#1185] / [i915#250]) [13]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/shard-iclb4/igt@kms_plane@plane-panning-bottom-right-suspend-pipe-b-planes.html [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/shard-iclb3/igt@kms_plane@plane-panning-bottom-right-suspend-pipe-b-planes.html * igt@kms_psr@psr2_cursor_mmap_cpu: - shard-iclb: [PASS][15] -> [SKIP][16] ([fdo#109441]) [15]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/shard-iclb2/igt@kms_psr@psr2_cursor_mmap_cpu.html [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/shard-iclb1/igt@kms_psr@psr2_cursor_mmap_cpu.html #### Possible fixes #### * igt@gem_exec_reloc@basic-many-active@vecs0: - shard-glk: [FAIL][17] ([i915#2389]) -> [PASS][18] [17]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/shard-glk3/igt@gem_exec_reloc@basic-many-active@vecs0.html [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/shard-glk5/igt@gem_exec_reloc@basic-many-active@vecs0.html * igt@i915_pm_rc6_residency@rc6-fence: - shard-hsw: [WARN][19] ([i915#1519]) -> [PASS][20] [19]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/shard-hsw8/igt@i915_pm_rc6_residency@rc6-fence.html [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/shard-hsw4/igt@i915_pm_rc6_residency@rc6-fence.html * igt@kms_cursor_edge_walk@pipe-b-256x256-left-edge: - shard-glk: [DMESG-WARN][21] ([i915#1982]) -> [PASS][22] +1 similar issue [21]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/shard-glk4/igt@kms_cursor_edge_walk@pipe-b-256x256-left-edge.html [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/shard-glk1/igt@kms_cursor_edge_walk@pipe-b-256x256-left-edge.html - shard-apl: [DMESG-WARN][23] ([i915#1635] / [i915#1982]) -> [PASS][24] +1 similar issue [23]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/shard-apl6/igt@kms_cursor_edge_walk@pipe-b-256x256-left-edge.html [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/shard-apl3/igt@kms_cursor_edge_walk@pipe-b-256x256-left-edge.html * igt@kms_flip@flip-vs-suspend-interruptible@a-dp1: - shard-kbl: [DMESG-WARN][25] ([i915#180]) -> [PASS][26] +4 similar issues [25]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/shard-kbl4/igt@kms_flip@flip-vs-suspend-interruptible@a-dp1.html [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/shard-kbl1/igt@kms_flip@flip-vs-suspend-interruptible@a-dp1.html * igt@kms_flip@flip-vs-suspend-interruptible@c-vga1: - shard-hsw: [INCOMPLETE][27] ([i915#2055]) -> [PASS][28] [27]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/shard-hsw8/igt@kms_flip@flip-vs-suspend-interruptible@c-vga1.html [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/shard-hsw6/igt@kms_flip@flip-vs-suspend-interruptible@c-vga1.html * igt@kms_flip@flip-vs-wf_vblank-interruptible@a-dp1: - shard-kbl: [DMESG-WARN][29] ([i915#1982]) -> [PASS][30] +3 similar issues [29]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/shard-kbl4/igt@kms_flip@flip-vs-wf_vblank-interruptible@a-dp1.html [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/shard-kbl7/igt@kms_flip@flip-vs-wf_vblank-interruptible@a-dp1.html * igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-blt: - shard-glk: [FAIL][31] ([i915#49]) -> [PASS][32] [31]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/shard-glk2/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-blt.html [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/shard-glk5/igt@kms_frontbuffer_tracking@fbc-2p-primscrn-cur-indfb-draw-blt.html * igt@kms_frontbuffer_tracking@fbcpsr-slowdraw: - shard-tglb: [DMESG-WARN][33] ([i915#1982]) -> [PASS][34] +3 similar issues [33]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/shard-tglb2/igt@kms_frontbuffer_tracking@fbcpsr-slowdraw.html [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/shard-tglb1/igt@kms_frontbuffer_tracking@fbcpsr-slowdraw.html * igt@kms_plane_scaling@pipe-a-scaler-with-clipping-clamping: - shard-iclb: [DMESG-WARN][35] ([i915#1982]) -> [PASS][36] +1 similar issue [35]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/shard-iclb3/igt@kms_plane_scaling@pipe-a-scaler-with-clipping-clamping.html [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/shard-iclb6/igt@kms_plane_scaling@pipe-a-scaler-with-clipping-clamping.html * igt@kms_psr2_su@page_flip: - shard-tglb: [SKIP][37] ([i915#1911]) -> [PASS][38] [37]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/shard-tglb3/igt@kms_psr2_su@page_flip.html [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/shard-tglb5/igt@kms_psr2_su@page_flip.html * igt@kms_psr@psr2_sprite_mmap_gtt: - shard-iclb: [SKIP][39] ([fdo#109441]) -> [PASS][40] +2 similar issues [39]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/shard-iclb4/igt@kms_psr@psr2_sprite_mmap_gtt.html [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/shard-iclb2/igt@kms_psr@psr2_sprite_mmap_gtt.html #### Warnings #### * igt@kms_content_protection@srm: - shard-apl: [TIMEOUT][41] ([i915#1319] / [i915#1635] / [i915#1958]) -> [TIMEOUT][42] ([i915#1319] / [i915#1635]) [41]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/shard-apl1/igt@kms_content_protection@srm.html [42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/shard-apl6/igt@kms_content_protection@srm.html * igt@kms_dp_dsc@basic-dsc-enable-edp: - shard-iclb: [DMESG-WARN][43] ([i915#1226]) -> [SKIP][44] ([fdo#109349]) [43]: https://intel-gfx-ci.01.org/tree/drm-tip/IGT_5779/shard-iclb2/igt@kms_dp_dsc@basic-dsc-enable-edp.html [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/shard-iclb4/igt@kms_dp_dsc@basic-dsc-enable-edp.html [fdo#109349]: https://bugs.freedesktop.org/show_bug.cgi?id=109349 [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441 [i915#118]: https://gitlab.freedesktop.org/drm/intel/issues/118 [i915#1185]: https://gitlab.freedesktop.org/drm/intel/issues/1185 [i915#1226]: https://gitlab.freedesktop.org/drm/intel/issues/1226 [i915#1319]: https://gitlab.freedesktop.org/drm/intel/issues/1319 [i915#1519]: https://gitlab.freedesktop.org/drm/intel/issues/1519 [i915#1635]: https://gitlab.freedesktop.org/drm/intel/issues/1635 [i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180 [i915#1911]: https://gitlab.freedesktop.org/drm/intel/issues/1911 [i915#1958]: https://gitlab.freedesktop.org/drm/intel/issues/1958 [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982 [i915#2055]: https://gitlab.freedesktop.org/drm/intel/issues/2055 [i915#2389]: https://gitlab.freedesktop.org/drm/intel/issues/2389 [i915#250]: https://gitlab.freedesktop.org/drm/intel/issues/250 [i915#49]: https://gitlab.freedesktop.org/drm/intel/issues/49 [i915#95]: https://gitlab.freedesktop.org/drm/intel/issues/95 Participating hosts (8 -> 8) ------------------------------ No changes in participating hosts Build changes ------------- * CI: CI-20190529 -> None * IGT: IGT_5779 -> IGTPW_4954 CI-20190529: 20190529 CI_DRM_8965: f4cbf17fababf80c1c67c6f1687fb8bf7e00a263 @ git://anongit.freedesktop.org/gfx-ci/linux IGTPW_4954: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/index.html IGT_5779: f52bf19b5f02d52fc3e201c6467ec3f511227fba @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4954/index.html [-- Attachment #1.2: Type: text/html, Size: 12919 bytes --] [-- Attachment #2: Type: text/plain, Size: 154 bytes --] _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 9+ messages in thread
* [igt-dev] ✓ Fi.CI.BAT: success for Per client engine busyness for intel_gpu_top (rev2) 2020-09-04 13:06 [Intel-gfx] [PATCH i-g-t 0/1] Per client engine busyness for intel_gpu_top Tvrtko Ursulin ` (2 preceding siblings ...) 2020-09-04 22:51 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork @ 2020-09-14 17:40 ` Patchwork 2020-09-15 0:32 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork 4 siblings, 0 replies; 9+ messages in thread From: Patchwork @ 2020-09-14 17:40 UTC (permalink / raw) To: Tvrtko Ursulin; +Cc: igt-dev [-- Attachment #1.1: Type: text/plain, Size: 5849 bytes --] == Series Details == Series: Per client engine busyness for intel_gpu_top (rev2) URL : https://patchwork.freedesktop.org/series/81338/ State : success == Summary == CI Bug Log - changes from CI_DRM_9007 -> IGTPW_4980 ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/index.html Known issues ------------ Here are the changes found in IGTPW_4980 that come from known issues: ### IGT changes ### #### Issues hit #### * igt@gem_flink_basic@double-flink: - fi-tgl-y: [PASS][1] -> [DMESG-WARN][2] ([i915#402]) +1 similar issue [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/fi-tgl-y/igt@gem_flink_basic@double-flink.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/fi-tgl-y/igt@gem_flink_basic@double-flink.html * igt@i915_module_load@reload: - fi-tgl-u2: [PASS][3] -> [DMESG-WARN][4] ([i915#1982]) [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/fi-tgl-u2/igt@i915_module_load@reload.html [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/fi-tgl-u2/igt@i915_module_load@reload.html * igt@kms_flip@basic-flip-vs-wf_vblank@b-edp1: - fi-icl-u2: [PASS][5] -> [DMESG-WARN][6] ([i915#1982]) [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/fi-icl-u2/igt@kms_flip@basic-flip-vs-wf_vblank@b-edp1.html [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/fi-icl-u2/igt@kms_flip@basic-flip-vs-wf_vblank@b-edp1.html * igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-c: - fi-tgl-y: [PASS][7] -> [DMESG-WARN][8] ([i915#1982]) [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/fi-tgl-y/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-c.html [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/fi-tgl-y/igt@kms_pipe_crc_basic@compare-crc-sanitycheck-pipe-c.html #### Possible fixes #### * igt@gem_flink_basic@bad-flink: - fi-tgl-y: [DMESG-WARN][9] ([i915#402]) -> [PASS][10] [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/fi-tgl-y/igt@gem_flink_basic@bad-flink.html [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/fi-tgl-y/igt@gem_flink_basic@bad-flink.html * igt@i915_selftest@live@execlists: - fi-icl-y: [INCOMPLETE][11] ([i915#2276]) -> [PASS][12] [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/fi-icl-y/igt@i915_selftest@live@execlists.html [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/fi-icl-y/igt@i915_selftest@live@execlists.html * igt@kms_busy@basic@flip: - fi-tgl-y: [DMESG-WARN][13] ([i915#1982]) -> [PASS][14] [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/fi-tgl-y/igt@kms_busy@basic@flip.html [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/fi-tgl-y/igt@kms_busy@basic@flip.html * igt@kms_chamelium@common-hpd-after-suspend: - fi-kbl-7500u: [DMESG-WARN][15] ([i915#2203]) -> [PASS][16] [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/fi-kbl-7500u/igt@kms_chamelium@common-hpd-after-suspend.html [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/fi-kbl-7500u/igt@kms_chamelium@common-hpd-after-suspend.html #### Warnings #### * igt@gem_exec_suspend@basic-s0: - fi-kbl-x1275: [DMESG-WARN][17] ([i915#62] / [i915#92]) -> [DMESG-WARN][18] ([i915#62] / [i915#92] / [i915#95]) +5 similar issues [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/fi-kbl-x1275/igt@gem_exec_suspend@basic-s0.html [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/fi-kbl-x1275/igt@gem_exec_suspend@basic-s0.html * igt@i915_pm_rpm@basic-pci-d3-state: - fi-tgl-y: [DMESG-WARN][19] ([i915#1982] / [i915#2411]) -> [DMESG-WARN][20] ([i915#2411]) [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/fi-tgl-y/igt@i915_pm_rpm@basic-pci-d3-state.html [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/fi-tgl-y/igt@i915_pm_rpm@basic-pci-d3-state.html * igt@kms_force_connector_basic@force-edid: - fi-kbl-x1275: [DMESG-WARN][21] ([i915#62] / [i915#92] / [i915#95]) -> [DMESG-WARN][22] ([i915#62] / [i915#92]) +2 similar issues [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/fi-kbl-x1275/igt@kms_force_connector_basic@force-edid.html [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/fi-kbl-x1275/igt@kms_force_connector_basic@force-edid.html {name}: This element is suppressed. This means it is ignored when computing the status of the difference (SUCCESS, WARNING, or FAILURE). [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982 [i915#2203]: https://gitlab.freedesktop.org/drm/intel/issues/2203 [i915#2276]: https://gitlab.freedesktop.org/drm/intel/issues/2276 [i915#2411]: https://gitlab.freedesktop.org/drm/intel/issues/2411 [i915#402]: https://gitlab.freedesktop.org/drm/intel/issues/402 [i915#62]: https://gitlab.freedesktop.org/drm/intel/issues/62 [i915#92]: https://gitlab.freedesktop.org/drm/intel/issues/92 [i915#95]: https://gitlab.freedesktop.org/drm/intel/issues/95 Participating hosts (45 -> 39) ------------------------------ Missing (6): fi-ilk-m540 fi-hsw-4200u fi-byt-squawks fi-bsw-cyan fi-byt-clapper fi-bdw-samus Build changes ------------- * CI: CI-20190529 -> None * IGT: IGT_5782 -> IGTPW_4980 CI-20190529: 20190529 CI_DRM_9007: 30b3e38bd6d569451279af2767b620d0ef88665d @ git://anongit.freedesktop.org/gfx-ci/linux IGTPW_4980: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/index.html IGT_5782: ccfb27dab0f06c009d332053548920cb740e4258 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/index.html [-- Attachment #1.2: Type: text/html, Size: 7574 bytes --] [-- Attachment #2: Type: text/plain, Size: 154 bytes --] _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 9+ messages in thread
* [igt-dev] ✓ Fi.CI.IGT: success for Per client engine busyness for intel_gpu_top (rev2) 2020-09-04 13:06 [Intel-gfx] [PATCH i-g-t 0/1] Per client engine busyness for intel_gpu_top Tvrtko Ursulin ` (3 preceding siblings ...) 2020-09-14 17:40 ` [igt-dev] ✓ Fi.CI.BAT: success for Per client engine busyness for intel_gpu_top (rev2) Patchwork @ 2020-09-15 0:32 ` Patchwork 4 siblings, 0 replies; 9+ messages in thread From: Patchwork @ 2020-09-15 0:32 UTC (permalink / raw) To: Tvrtko Ursulin; +Cc: igt-dev [-- Attachment #1.1: Type: text/plain, Size: 11941 bytes --] == Series Details == Series: Per client engine busyness for intel_gpu_top (rev2) URL : https://patchwork.freedesktop.org/series/81338/ State : success == Summary == CI Bug Log - changes from CI_DRM_9007_full -> IGTPW_4980_full ==================================================== Summary ------- **SUCCESS** No regressions found. External URL: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/index.html Known issues ------------ Here are the changes found in IGTPW_4980_full that come from known issues: ### IGT changes ### #### Issues hit #### * igt@gem_exec_whisper@basic-fds-all: - shard-glk: [PASS][1] -> [DMESG-WARN][2] ([i915#118] / [i915#95]) [1]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-glk9/igt@gem_exec_whisper@basic-fds-all.html [2]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-glk7/igt@gem_exec_whisper@basic-fds-all.html * igt@gem_huc_copy@huc-copy: - shard-tglb: [PASS][3] -> [SKIP][4] ([i915#2190]) [3]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-tglb5/igt@gem_huc_copy@huc-copy.html [4]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-tglb6/igt@gem_huc_copy@huc-copy.html * igt@i915_pm_dc@dc6-psr: - shard-iclb: [PASS][5] -> [FAIL][6] ([i915#454]) [5]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-iclb1/igt@i915_pm_dc@dc6-psr.html [6]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-iclb6/igt@i915_pm_dc@dc6-psr.html * igt@kms_big_fb@linear-64bpp-rotate-180: - shard-apl: [PASS][7] -> [DMESG-WARN][8] ([i915#1635] / [i915#1982]) +1 similar issue [7]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-apl8/igt@kms_big_fb@linear-64bpp-rotate-180.html [8]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-apl7/igt@kms_big_fb@linear-64bpp-rotate-180.html * igt@kms_cursor_legacy@2x-long-cursor-vs-flip-legacy: - shard-hsw: [PASS][9] -> [FAIL][10] ([i915#96]) +1 similar issue [9]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-hsw6/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-legacy.html [10]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-hsw8/igt@kms_cursor_legacy@2x-long-cursor-vs-flip-legacy.html * igt@kms_cursor_legacy@cursor-vs-flip-toggle: - shard-hsw: [PASS][11] -> [FAIL][12] ([i915#2370]) [11]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-hsw6/igt@kms_cursor_legacy@cursor-vs-flip-toggle.html [12]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-hsw1/igt@kms_cursor_legacy@cursor-vs-flip-toggle.html * igt@kms_draw_crc@draw-method-xrgb2101010-pwrite-untiled: - shard-glk: [PASS][13] -> [DMESG-WARN][14] ([i915#1982]) +1 similar issue [13]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-glk6/igt@kms_draw_crc@draw-method-xrgb2101010-pwrite-untiled.html [14]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-glk9/igt@kms_draw_crc@draw-method-xrgb2101010-pwrite-untiled.html * igt@kms_hdr@bpc-switch-suspend: - shard-kbl: [PASS][15] -> [DMESG-WARN][16] ([i915#180]) +8 similar issues [15]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-kbl6/igt@kms_hdr@bpc-switch-suspend.html [16]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-kbl1/igt@kms_hdr@bpc-switch-suspend.html * igt@kms_psr@psr2_primary_mmap_cpu: - shard-iclb: [PASS][17] -> [SKIP][18] ([fdo#109441]) +2 similar issues [17]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-iclb2/igt@kms_psr@psr2_primary_mmap_cpu.html [18]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-iclb7/igt@kms_psr@psr2_primary_mmap_cpu.html * igt@kms_vblank@pipe-c-query-busy: - shard-tglb: [PASS][19] -> [DMESG-WARN][20] ([i915#1982]) [19]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-tglb2/igt@kms_vblank@pipe-c-query-busy.html [20]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-tglb5/igt@kms_vblank@pipe-c-query-busy.html #### Possible fixes #### * igt@gem_ctx_persistence@legacy-engines-mixed-process@blt: - shard-apl: [FAIL][21] ([i915#1635] / [i915#2374]) -> [PASS][22] [21]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-apl1/igt@gem_ctx_persistence@legacy-engines-mixed-process@blt.html [22]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-apl3/igt@gem_ctx_persistence@legacy-engines-mixed-process@blt.html * igt@gem_exec_whisper@basic-fds-forked: - shard-glk: [DMESG-WARN][23] ([i915#118] / [i915#95]) -> [PASS][24] [23]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-glk1/igt@gem_exec_whisper@basic-fds-forked.html [24]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-glk8/igt@gem_exec_whisper@basic-fds-forked.html * igt@gem_ppgtt@flink-and-close-vma-leak: - shard-apl: [FAIL][25] ([i915#1635] / [i915#644]) -> [PASS][26] [25]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-apl7/igt@gem_ppgtt@flink-and-close-vma-leak.html [26]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-apl2/igt@gem_ppgtt@flink-and-close-vma-leak.html * igt@i915_pm_rc6_residency@rc6-fence: - shard-hsw: [WARN][27] ([i915#1519]) -> [PASS][28] [27]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-hsw8/igt@i915_pm_rc6_residency@rc6-fence.html [28]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-hsw4/igt@i915_pm_rc6_residency@rc6-fence.html * igt@kms_color@pipe-b-ctm-max: - shard-apl: [FAIL][29] ([i915#1635] / [i915#168]) -> [PASS][30] [29]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-apl7/igt@kms_color@pipe-b-ctm-max.html [30]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-apl2/igt@kms_color@pipe-b-ctm-max.html - shard-kbl: [FAIL][31] ([i915#168]) -> [PASS][32] [31]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-kbl3/igt@kms_color@pipe-b-ctm-max.html [32]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-kbl2/igt@kms_color@pipe-b-ctm-max.html * igt@kms_cursor_legacy@short-flip-after-cursor-atomic-transitions: - shard-kbl: [DMESG-WARN][33] ([i915#1982]) -> [PASS][34] +3 similar issues [33]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-kbl4/igt@kms_cursor_legacy@short-flip-after-cursor-atomic-transitions.html [34]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-kbl1/igt@kms_cursor_legacy@short-flip-after-cursor-atomic-transitions.html - shard-tglb: [DMESG-WARN][35] ([i915#1982]) -> [PASS][36] [35]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-tglb5/igt@kms_cursor_legacy@short-flip-after-cursor-atomic-transitions.html [36]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-tglb3/igt@kms_cursor_legacy@short-flip-after-cursor-atomic-transitions.html * igt@kms_draw_crc@draw-method-xrgb2101010-pwrite-untiled: - shard-apl: [DMESG-WARN][37] ([i915#1635] / [i915#1982]) -> [PASS][38] +1 similar issue [37]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-apl4/igt@kms_draw_crc@draw-method-xrgb2101010-pwrite-untiled.html [38]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-apl4/igt@kms_draw_crc@draw-method-xrgb2101010-pwrite-untiled.html * igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-render: - shard-kbl: [FAIL][39] ([i915#49]) -> [PASS][40] [39]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-kbl7/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-render.html [40]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-kbl7/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-render.html - shard-apl: [FAIL][41] ([i915#1635] / [i915#49]) -> [PASS][42] [41]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-apl4/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-render.html [42]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-apl6/igt@kms_frontbuffer_tracking@fbc-1p-primscrn-cur-indfb-draw-render.html * igt@kms_frontbuffer_tracking@fbc-suspend: - shard-kbl: [DMESG-WARN][43] ([i915#180]) -> [PASS][44] +3 similar issues [43]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-kbl1/igt@kms_frontbuffer_tracking@fbc-suspend.html [44]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-kbl7/igt@kms_frontbuffer_tracking@fbc-suspend.html * igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-move: - shard-iclb: [DMESG-WARN][45] ([i915#1982]) -> [PASS][46] [45]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-iclb3/igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-move.html [46]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-iclb8/igt@kms_frontbuffer_tracking@psr-1p-primscrn-spr-indfb-move.html * igt@kms_psr@psr2_sprite_blt: - shard-iclb: [SKIP][47] ([fdo#109441]) -> [PASS][48] [47]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-iclb6/igt@kms_psr@psr2_sprite_blt.html [48]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-iclb2/igt@kms_psr@psr2_sprite_blt.html * igt@perf@polling-small-buf: - shard-iclb: [FAIL][49] ([i915#1722]) -> [PASS][50] [49]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-iclb7/igt@perf@polling-small-buf.html [50]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-iclb2/igt@perf@polling-small-buf.html #### Warnings #### * igt@i915_pm_dc@dc3co-vpb-simulation: - shard-tglb: [DMESG-WARN][51] ([i915#2411]) -> [SKIP][52] ([i915#1904]) [51]: https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9007/shard-tglb1/igt@i915_pm_dc@dc3co-vpb-simulation.html [52]: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/shard-tglb6/igt@i915_pm_dc@dc3co-vpb-simulation.html [fdo#109441]: https://bugs.freedesktop.org/show_bug.cgi?id=109441 [i915#118]: https://gitlab.freedesktop.org/drm/intel/issues/118 [i915#1519]: https://gitlab.freedesktop.org/drm/intel/issues/1519 [i915#1635]: https://gitlab.freedesktop.org/drm/intel/issues/1635 [i915#168]: https://gitlab.freedesktop.org/drm/intel/issues/168 [i915#1722]: https://gitlab.freedesktop.org/drm/intel/issues/1722 [i915#180]: https://gitlab.freedesktop.org/drm/intel/issues/180 [i915#1904]: https://gitlab.freedesktop.org/drm/intel/issues/1904 [i915#1982]: https://gitlab.freedesktop.org/drm/intel/issues/1982 [i915#2190]: https://gitlab.freedesktop.org/drm/intel/issues/2190 [i915#2370]: https://gitlab.freedesktop.org/drm/intel/issues/2370 [i915#2374]: https://gitlab.freedesktop.org/drm/intel/issues/2374 [i915#2411]: https://gitlab.freedesktop.org/drm/intel/issues/2411 [i915#454]: https://gitlab.freedesktop.org/drm/intel/issues/454 [i915#49]: https://gitlab.freedesktop.org/drm/intel/issues/49 [i915#644]: https://gitlab.freedesktop.org/drm/intel/issues/644 [i915#95]: https://gitlab.freedesktop.org/drm/intel/issues/95 [i915#96]: https://gitlab.freedesktop.org/drm/intel/issues/96 Participating hosts (11 -> 8) ------------------------------ Missing (3): pig-skl-6260u pig-glk-j5005 pig-icl-1065g7 Build changes ------------- * CI: CI-20190529 -> None * IGT: IGT_5782 -> IGTPW_4980 * Piglit: piglit_4509 -> None CI-20190529: 20190529 CI_DRM_9007: 30b3e38bd6d569451279af2767b620d0ef88665d @ git://anongit.freedesktop.org/gfx-ci/linux IGTPW_4980: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/index.html IGT_5782: ccfb27dab0f06c009d332053548920cb740e4258 @ git://anongit.freedesktop.org/xorg/app/intel-gpu-tools piglit_4509: fdc5a4ca11124ab8413c7988896eec4c97336694 @ git://anongit.freedesktop.org/piglit == Logs == For more details see: https://intel-gfx-ci.01.org/tree/drm-tip/IGTPW_4980/index.html [-- Attachment #1.2: Type: text/html, Size: 14303 bytes --] [-- Attachment #2: Type: text/plain, Size: 154 bytes --] _______________________________________________ igt-dev mailing list igt-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/igt-dev ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2020-09-15 0:32 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2020-09-04 13:06 [Intel-gfx] [PATCH i-g-t 0/1] Per client engine busyness for intel_gpu_top Tvrtko Ursulin 2020-09-04 13:06 ` [igt-dev] [PATCH i-g-t 1/1] intel-gpu-top: Support for client stats Tvrtko Ursulin 2020-09-07 9:31 ` Petri Latvala 2020-09-07 9:53 ` [Intel-gfx] " Tvrtko Ursulin 2020-09-14 15:39 ` [igt-dev] [PATCH i-g-t v4] " Tvrtko Ursulin 2020-09-04 13:40 ` [igt-dev] ✓ Fi.CI.BAT: success for Per client engine busyness for intel_gpu_top Patchwork 2020-09-04 22:51 ` [igt-dev] ✗ Fi.CI.IGT: failure " Patchwork 2020-09-14 17:40 ` [igt-dev] ✓ Fi.CI.BAT: success for Per client engine busyness for intel_gpu_top (rev2) Patchwork 2020-09-15 0:32 ` [igt-dev] ✓ Fi.CI.IGT: " Patchwork
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox