
==========================
Customizing CPUSET
==========================

CPUSET in the ``/etc/scylla.d/cpuset.conf`` file is automatically configured by running the ``scylla_setup`` 
(or ``scylla_cpuset_setup``) script. If you want to customize CPUSET, you must modify both the ``cpuset.conf`` 
and ``perftune.yaml`` files.

Note that the ``scylla-server`` service will generate ``/etc/scylla.d/perftune.yaml`` *only if* the file doesn't exist.

Examples
----------
Here are a few examples of possible configurations. In the examples, ``eth5`` is used as a NIC name and ``/var/lib/scylla`` as a data directory.

Example 1
^^^^^^^^^^

* 16 CPUs system.
* You want to run ScyllaDB on CPUs 3, 4, 5, and have IRQs handled on the same CPUs, while allowing other apps on the same machine to benefit 
  from XFS/RFS/RPS from ``eth5``.

**cpuset.conf:**

.. code-block:: none

    CPUSET="--cpuset 3,4,5 "

**perftune.yaml:**

.. code-block:: none

    cpu_mask: '0xffff'
    dir:
    - /var/lib/scylla
    irq_cpu_mask: '0x38'
    nic:
    - eth5
    tune:
    - net
    - disks


Example 2
^^^^^^^^^^

* 16 CPUs system.
* You want to run ScyllaDB on CPUs 3, 4, 5, and have IRQs handled on the same CPUs, and ScyllaDB is going to be the only application 
  that will use ``eth5``.

**cpuset.conf:**

.. code-block:: none
    
    CPUSET="--cpuset 3,4,5 "


**perftune.yaml:**

.. code-block:: none

    cpu_mask: '0x38'
    dir:
    - /var/lib/scylla
    irq_cpu_mask: '0x38'
    nic:
    - eth5
    tune:
    - net
    - disks

Example 3
^^^^^^^^^^

* 16 CPUs system.
* You want to run ScyllaDB on CPUs 3, 4, 5, and IRQs handled on CPUs 6,7,8, while allowing other apps on the same machine to benefit 
  from XFS/RFS/RPS from ``eth5``.


**cpuset.conf:**

.. code-block:: none
    
    CPUSET="--cpuset 3,4,5 "

**perftune.yaml:**

.. code-block:: none

    cpu_mask: '0xffff'
    dir:
    - /var/lib/scylla
    irq_cpu_mask: '0x1c0'
    nic:
    - eth5
    tune:
    - net
    - disks
