You will receive access to a new repository with the initial API design from another team. Your task is to review it. This task is done individually, which means that you will receive two reviews for your own design.

Review format

The task is split into two parts. In the first part, you are expected to create an (additional) example application using the provided API. In the second part, you are expected to summarize your API review in several paragraphs of text (not a bullet list).

Example application

Implement a skeleton of the numactl command (see man page for details). Keep in mind that the purpose of the task is learning the new API, not implementing numactl features. Your skeleton application is therefore expected to say what it would be doing, not actually do it, just like in the following example:

args = ... // configure the arguments
args.parse(argv)
if args.has("--show"):
   printf("policy: default"); print("...")
elif args.has("--hardware"):
   printf("available: 2 nodes (0-1)"); print("...")
elif:
   printf("will run %s", args.get_command())
   printf("CPU node bind: %s", args.get("-C").join(","))
   ...

Your numactl skeleton must support the following invocation styles:

  • Without any parameters, the program should print help.
  • Given the --hardware switch, it should emulate printing the current hardware configuration.
  • Given the --show switch, it should emulate printing the current NUMA policy.
  • Given options -m, -p, -i, and -C, it should emulate running another program with the modified NUMA policy.

See slides for further examples.

Review outline

Your review should adhere to the following (rough) outline:

  • Overall impression (1-2 paragraphs).

    Here you should summarize the basic concepts provided by the library, check whether the API is reasonably comfortable and documented, and find out what the library can/cannot do in the context of the task-1 requirements. At this point, you should not (need to) discuss low-level technical details.

  • Writing numactl (1-2 paragraphs).

    Here you should describe whether and how the concepts required to implement the numactl example match the concepts offered by the library. Point out what was easy (conceptual match), difficult (conceptual mismatch but workaround possible), or impossible to implement with the help of the library.

  • Detailed comments.

    Here you should provide detailed comments on specific issues (or highlights). The checklist from slides provides a few guiding questions to aid in systematic API exploration.

Submission

Submit your work (the numactl snippet and the comments) in a single markdown text file placed in the root directory of the master branch of your repository and name it REVIEW.md. Tag the final commit using the task-2-submission tag.