Documentation/admin-guide/cpu-isolation.rst

Source file repositories/reference/linux-study-clean/Documentation/admin-guide/cpu-isolation.rst

File Facts

System
Linux kernel
Corpus path
Documentation/admin-guide/cpu-isolation.rst
Extension
.rst
Size
11379 bytes
Lines
358
Domain
Support Tooling And Documentation
Bucket
Documentation
Inferred role
Support Tooling And Documentation: documentation
Status
atlas-only

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

if (fd < 0) {
          perror("Can't open cpuset file...\n");
          return 0;
      }

      write(fd, "0\n", 2);
      close(fd);

      // Run an endless dummy loop until the launcher kills us
      while (1)
      ;

      return 0;
  }

Build it and save for later step:

::

  # gcc user_loop.c -o user_loop

The launcher
------------

The below launcher runs the above program for 10 seconds and traces
the noise resulting from preempting tasks and IRQs.

::

  TRACING=/sys/kernel/tracing/
  # Make sure tracing is off for now
  echo 0 > $TRACING/tracing_on
  # Flush previous traces
  echo > $TRACING/trace
  # Record disturbance from other tasks
  echo 1 > $TRACING/events/sched/sched_switch/enable
  # Record disturbance from interrupts
  echo 1 > $TRACING/events/irq_vectors/enable
  # Now we can start tracing
  echo 1 > $TRACING/tracing_on
  # Run the dummy user_loop for 10 seconds on CPU 7
  ./user_loop &
  USER_LOOP_PID=$!
  sleep 10
  kill $USER_LOOP_PID
  # Disable tracing and save traces from CPU 7 in a file
  echo 0 > $TRACING/tracing_on
  cat $TRACING/per_cpu/cpu7/trace > trace.7

If no specific problem arose, the output of trace.7 should look like
the following:

::

  <idle>-0 [007] d..2. 1980.976624: sched_switch: prev_comm=swapper/7 prev_pid=0 prev_prio=120 prev_state=R ==> next_comm=user_loop next_pid=1553 next_prio=120
  user_loop-1553 [007] d.h.. 1990.946593: reschedule_entry: vector=253
  user_loop-1553 [007] d.h.. 1990.946593: reschedule_exit: vector=253

That is, no specific noise triggered between the first trace and the
second during 10 seconds when user_loop was running.

Debugging
=========

Of course things are never so easy, especially on this matter.
Chances are that actual noise will be observed in the aforementioned
trace.7 file.

The best way to investigate further is to enable finer grained
tracepoints such as those of subsystems producing asynchronous

Annotation

Implementation Notes