Disable DVS Fairness of Service

Describes how to disable Fairness of Service, which is enabled by default and ensures that demanding clients do not make other clients wait for long periods.

Fairness of Service, described below, is enabled by default. This procedure describes how to disable it.

DVS creates user- or job-specific request queues for clients. Originally, DVS used one queue to handle requests in a FIFO (first-in, first out) fashion. This meant that since all clients shared one queue, a demanding job could tax the server disproportionately and the other clients would have to wait until the demanding client's request(s) completed. Fairness of Service was implemented to address that issue. With it enabled, DVS creates a list of queues—one queue for each client and/or job. The list of queues is processed in a circular fashion. When a message thread is available, it fetches the first queue on the list, moves that queue to the end of the list, and processes the first message in that queue. This helps to distribute the workload and potentially helps contending applications perform better.

  1. Stop DVS on all servers.
    Note that stopping and restarting DVS on all server nodes would typically be done only during a maintenance interval. See Quiesce a DVS-projected File System for information about how to do this.
  2. Disable Fairness of Service by setting the single message queue parameter to 1.
    Use one of the following kernel module parameters to set the single message queue parameter. Because these parameters cannot be set using the configurator, use the procedure Change Kernel Module Parameters Prior to Boot using Modprobe.d Files and Simple Sync and the following information, both from the topic Configure DVS using Modprobe or Proc Files.
    dvsipc_single_msg_queue
    Disables fairness of service, which is enabled by default. Setting this parameter to 1 disables fairness of service by forcing DVS to use a single message queue instead of a list of queues.
    • Default value: 0 (fairness of service enabled)
    • To view read-only: cat /sys/module/dvsipc/parameters/dvsipc_single_msg_queue
    • To change prior to boot, use the single_msg_queue field of the dvs_instance_info parameter. If no other fields in dvs_instance_info need to be changed, it may be easier to change the dvsipc_single_msg_queue parameter directly by adding these lines to <simple sync path>/etc/modprobe.d/dvs-local.conf:
      # Disable fairness of service
      options dvsipc dvsipc_single_msg_queue=1
      
      # Enable fairness of service
      options dvsipc dvsipc_single_msg_queue=0
      
    • To change dynamically: N/A
    dvs_instance_info
    Contains the following fields, which are parameters for the DVS thread pool in the DVS IPC layer. Most of these fields can be changed through other module parameters (e.g., dvsipc_msg_thread_limit and dvsipc_single_msg_queue); however, this module parameter has priority over the individual ones and if set, will override them.
    FieldDefinition
    thread_minNumber of threads created at startup.
    thread_maxMaximum number of persistent threads.
    thread_limitMaximum number of valid threads that DVS IPC allows to exist at one time. DVS IPC will dynamically scale up the number of threads to this number as the load increases.
    thread_concurrent_createsMaximum number of IPC threads that can be in the process of forking a new thread.
    thread_niceNice value for the threads.
    single_msg_queueDisables/enables fairness of service. Setting to 1 disables fairness of service by processing incoming requests with a FIFO method. Setting to 0 (default) groups requests into different queues (qhdrs) based on apid, and round-robbins the queues to maintain quality of service (QOS) among jobs.
    init_free_qhdrsLow water mark for the pool of unused qhdrs. When the pool falls below this number, more are allocated. Used only if single_msg_queue = 0.
    max_free_qhdrsMaximum number of unused qhdrs that can exist before the system starts freeing them. Used only if single_msg_queue = 0.
    Interactions among fields:
    • thread_min <= thread_max <= thread_limit
    • thread_concurrent_creates <= thread_limit
    • init_free_qhdrs and max_free_qhdrs used only when single_msg_queue == 0
    Important: For this parameter to be valid, values must be specified for all of the fields. To avoid unintentional changes, be careful when changing any field values.
    • Default value: see modprobe.d examples
    • To view read-only: cat /sys/module/dvsipc/parameters/dvs_instance_info
    • To change prior to boot, add these lines to <simple sync path>/etc/modprobe.d/dvs-local.conf (comment out either the compute or service line, depending on the type of node(s) being configured):
      # Set parameters for DVS thread pool in DVS IPC layer
      # Defaults for compute nodes
      options dvsipc dvs_instance_info=4,16,1000,0,0,0,1,1
      
      # Defaults for service nodes
      options dvsipc dvs_instance_info=16,64,1000,0,0,0,64,2048
      
      For compute nodes, this translates to dvs_instance_info = thread_min = 4, thread_max = 16, thread_limit = 1000, thread_concurrent_creates = 0, thread_nice = 0, single_msg_queue = 0, init_free_qhdrs = 1, max_free_qhdrs = 1.

      For service nodes, this translates to dvs_instance_info=thread_min = 16, thread_max = 64, thread_limit = 1000, thread_concurrent_creates = 0, nice = 0, single_msg_queue = 0, init_free_qhdrs = 64, max_free_qhdrs = 2048.

      Note that if using the defaults for a compute node, ensure that dvsipc_config_type=0 is also set, and likewise, for a service node, ensure that dvsipc_config_type=1 for consistency.

    • To change dynamically: N/A
  3. Restart DVS on all servers.