If one runs multiple Virtuoso processes on a physical machine it
may be advantageous to bind the processes to a physical CPU. In
this way one may be certain that memory allocated for the processes
is local to the CPU on which the process runs. This is specially
important for servers with more than 2 CPU sockets, as there can be
high variability in memory access latency Even with dual-socket
Intel servers there caan be performance gains of up to 20% from
setting CPU affinity if the workload is well balanced. On the other
hand if the workload is not balanced, binding a process to a CPU
may lead to less platform utilization than not specifying
There are two settings in the virtuoso.ini for affinity:
is the overall affinity for threads of the server process and is
specified by comma-separated CPU numbers or ranges of numbers.
is the affinity of the thread handling incoming cluster traffic.
In the interest of low latency, it may be advantageous to bind the
listener thread to a core of its own, so that it will never be
preempted. This can decrease the incidence of blocking on write for
other processes since incoming messages will be read at full
interface speed all the time.
specifies that the process is bound to CPU 0 of a dual socket 16
core 32 thread system.
See numactl -- hardware for the actual numbers of the cores on
each CPU. CPU 0, i.e. first thread of first core is here
exclusively allocated to network traffic and canbnot be preempted
by any other thread running for the server process.