A.7.1 support under linux, A.7.1, Support under linux – AMD ATHLON 64 User Manual

Page 44

Advertising
background image

44

Appendix A

40555

Rev. 3.00

June 2006

Performance Guidelines for AMD Athlon™ 64 and AMD Opteron™
ccNUMA Multiprocessor Systems

A.7

Tools and APIs for Thread/Process and Memory
Placement (Affinity) for AMD64 ccNUMA
Multiprocessor Systems

This following sections discuss tools and APIs available for assigning thread/process and memory
affinity under various operating systems.

A.7.1

Support Under Linux

®

Linux provides command-line utilities to explicitly set process/thread and meory affinity to both
nodes and cores on a node[

5

]. Additionally, libnuma, a shared library, is provided for more precise

affinity control from within applications.

Controlling Process and Thread Affinity

The Linux command-line utlities offer high-level affinity control options. The numactl utility is a
command line tool for running a process with a specific node affinity.

For example, to run the

foobar

program on the cores of node 0, enter the following at the command

prompt:

numactl --cpubind=0 foobar

Application and kernel developers can use the libnuma shared library, which can be linked to
programs and offers a stable API for setting thread affinity to a given node or set of nodes. Interested
developers should consult the Linux man pages for details on the various functions available.

On a dual-core processor, a node has more than one core. If a process or thread is affined to a
particular node using the tools or API discussed above, it may still migrate back and forth between the
two cores of that node. This migration may or may not affect performance.

The taskset utility is a command-line tool for setting the process affinity for a specified program to
any core. For example, to run program

foobar

on the two cores of node 0, enter the following on the

command line:

taskset -c 0,1 foobar

In SuSE Linux Enterprise Server 10/10.1, the numactl utility can be used instead of taskset to set
process affinity to any core.

Linux provides several functions by which to set the thread affinity to any core or set of cores:

pthread_attr_setaffinity_np( ) and pthread_create( ) are provided as a part of the older nptl
library; they can be used to set the affinity parameter and then create a thread using that affinity.

sched_setaffinity( ) system call and schedutils scheduler utilities.

Advertising