Skip to content
Lionel Landwerlin edited this page Jan 26, 2018 · 5 revisions

Overview of the codebase:

gputop-server/

C code for the libgputop.so server-side code

  • gputop-string.c - utility api for concatenating formatted text
  • gputop-list.c - linux kernel style linked list api
  • gputop-util.c - array utility api + malloc wrapper + a few io utilities
  • gputop-cpu.c - for /proc cpu stats
  • gputop-hash-table.c - what it says on the tin
  • gputop-ioctl.c - we wrap ioctl() to track GEM ctx handles
  • gputop-ncurses.c - a left over filename this doesn't use ncurses any more. This provides the main entry point for the gputop server code which is linked as a shared library and the entry point is an attribute((constructor)) symbol in here
  • gputop-log.c - logging api
  • gputop-gl.c - for GL profiling, this deals with tracking contexts and surfaces and wrapping interesting entry GL/GLX/EGL points.
  • gputop-main.c - this is linked into a frontend executable for setting environment variables (note the rest of the gputop-server code is not directly linked with this executable, it's linked into a libgputop.so library. After setting environment variables this launches an application with an LD_PRELOAD which will load the rest of the server code. For system-wide monitoring it runs a dummy gputop-system program just to be consistent with profiling a single application.
  • gputop.pb-c.c - Generated Protobuf code used for the client/server RPC api
  • gputop-server.c - deals with listening for clients to connect, processing RPC requests and forwarding replies and metrics.
  • gputop-system.c - dummy program for gputop-main.c to run, only for consistency, when monitoring the system
  • gputop-debugfs.c - debugfs utilities
  • gputop-perf.c - This is where most of the code for interacting with the kernel is, to interact with the i915-perf/DAPC interface.

gputop-client-c/

Shared code for handling counter normalization. Better suited to C than Javascript.

  • gputop-client-c.c - The entry points into the client-side C code shared by all clients

  • gputop-oa-counters.c - given two OA reports at a time, this decodes the OA report format and drives counter normilzation.

  • gputop-client-c-runtime.h - the interface between the client-c code and the environment it's embedded (e.g. node, or the browser via Emscripten.) This would need adapting to embed within a Python C module. gputop-client-c-runtime.c - some shared (between different runtime environments) logging utilities

  • gputop-client-c.js - Node.js module's 'main' file

  • gputop-client-c-bindings.cpp - Node.js Javascript bindings (V8 bindings) for all client-side C entry points

  • gputop-client-c-bindings.h - Some types for the Node.js bindings

  • gputop-client-c-runtime-bindings.cpp - Implementation of the runtime interface for Node.js

  • gputop-web-lib.js - Implementation of the runtime interface for the browser using Emscripten

  • Makefile.emscripten - rules for compiling this source using the Emscripten toolchain

  • oa-bdw.c - autogenerated code for normalizing OA counters.

  • oa-hsw.c

  • oa-skl.c

  • oa-chv.c

Clone this wiki locally