Long-Term Supported Versions

    Innovation Versions

      Rubik Configuration Description

      The Rubik program is written in Go and compiled into a static executable file to minimize the coupling with the system.

      Commands

      Besides the -v option for querying version information, Rubik does not support other options. The following is an example of version query output:

      $ ./rubik -v
      Version:       2.0.0
      Release:       3.oe2203sp3
      Go Version:    go1.18.8
      Git Commit:    bcaace8
      Built:         2023-03-30
      OS/Arch:       linux/amd64
      

      Configuration

      When the Rubik binary file is executed, Rubik parses configuration file /var/lib/rubik/config.json.

      Custom configuration file path is currently not supported to avoid confusion. When Rubik runs as a Daemonset in a Kubernetes cluster, modify the ConfigMap in the hack/rubik-daemonset.yaml file to configure Rubik.

      The configuration file is in JSON format and keys are in lower camel case.

      An example configuration file is as follows:

      {
        "agent": {
          "logDriver": "stdio",
          "logDir": "/var/log/rubik",
          "logSize": 2048,
          "logLevel": "info",
          "cgroupRoot": "/sys/fs/cgroup",
          "enabledFeatures": [
            "preemption",
            "dynCache",
            "ioLimit",
            "ioCost",
            "quotaBurst",
            "quotaTurbo",
            "psi"
          ]
        },
        "preemption": {
          "resource": [
            "cpu",
            "memory"
          ]
        },
        "quotaTurbo": {
          "highWaterMark": 50,
          "syncInterval": 100
        },
        "dynCache": {
          "defaultLimitMode": "static",
          "adjustInterval": 1000,
          "perfDuration": 1000,
          "l3Percent": {
            "low": 20,
            "mid": 30,
            "high": 50
          },
          "memBandPercent": {
            "low": 10,
            "mid": 30,
            "high": 50
          }
        },
        "ioCost": [
          {
            "nodeName": "k8s-single",
            "config": [
              {
                "dev": "sdb",
                "enable": true,
                "model": "linear",
                "param": {
                  "rbps": 10000000,
                  "rseqiops": 10000000,
                  "rrandiops": 10000000,
                  "wbps": 10000000,
                  "wseqiops": 10000000,
                  "wrandiops": 10000000
                }
              }
            ]
          }
        ],
        "psi": {
          "interval": 10,
          "resource": [
            "cpu",
            "memory",
            "io"
          ],
          "avg10Threshold": 5.0
        }
      }
      

      Rubik configuration items include common items and feature items. Common items are under the agent section and are applied globally. Feature items are applied to sub-features that are enabled in the enabledFeatures field under agent.

      agent

      The agent section stores common configuration items related to Rubik running, such as log configurations and cgroup mount points.

      Key[=Default Value]TypeDescriptionExample Value
      logDriver=stdiostringLog driver, which can be the standard I/O or filestdio, file
      logDir=/var/log/rubikstringLog directoryAnu readable and writable directory
      logSize=1024intTotal size of logs in MB when logDriver=file[10, $2^{20}$]
      logLevel=infostringLog leveldebug,info,warn,error
      cgroupRoot=/sys/fs/cgroupstringMount point of the system cgroupMount point of the system cgroup
      enabledFeatures=[]string arrayList of Rubik features to be enabledRubik features. see Feature Introduction for details.

      preemption

      The preemption field stores configuration items of the absolute preemption feature, including CPU and memory preemption. You can configure this field to use either or both of CPU and memory preemption.

      Key[=Default Value]TypeDescriptionExample Value
      resource=[]string arrayResource type to be accessedcpu, memory

      dynCache

      The dynCache field stores configuration items related to pod memory bandwidth and last-level cache (LLC) limits. l3Percent indicates the watermarks of each LLC level. memBandPercent indicates watermarks of memory bandwidth in MB.

      Key[=Default Value]TypeDescriptionExample Value
      defaultLimitMode=staticstringdynCache control modestatic, dynamic
      adjustInterval=1000      int    Interval for dynCache control, in milliseconds[10, 10000]
      perfDuration=1000        int    perf execution duration for dynCache, in milliseconds[10, 10000]
      l3Percent                map    Watermarks of each L3 cache level of dynCache in percents     
      .low=20                  int    Watermark of the low L3 cache level[10, 100]    
      .mid=30                  int    Watermark of the middle L3 cache level  [low, 100]  
      .high=50                int    Watermark of the high L3 cache level  [mid, 100]  
      memBandPercent          map    Watermarks of each memory bandwidth level of dynCache in percents 
      .low=10                  int    Watermark of the low bandwidth level in MB[10, 100]  
      .mid=30                  int    Watermark of the middle bandwidth level in MB  [low, 100]  
      .high=50                int    Watermark of the high bandwidth level in MB[mid, 100]  

      quotaTurbo

      The quotaTurbo field stores configuration items of the user-mode elastic traffic limiting feature.

      Key[=Default Value]TypeDescriptionExample Value
      highWaterMark=60intHigh watermark of CPU load[0, alarmWaterMark)
      alarmWaterMark=80intAlarm watermark of CPU load(highWaterMark,100]
      syncInterval=100intInterval for triggering container quota updates, in milliseconds[100,10000]

      ioCost

      The ioCost field stores configuration items of the iocost-based I/O weight control feature. The field is an array whose elements are names of nodes (nodeName) and their device configuration arrays (config).

      KeyTypeDescriptionExample Value
      nodeNamestringNode nameKubernetes cluster node name
      configarrayConfigurations of a block device/

      config parameters of a block device:

      Key[=Default Value]TypeDescriptionExample Value
      devstringPhysical block device name/
      modelstringiocost modellinear
      param/Device parameters specific to the model/

      For the linear model, the param field supports the following parameters:

      Key[=Default Value]TypeDescriptionExample Value
      rbpsint64Maximum read bandwidth(0, $2^{63}$)
      rseqiopsint64Maximum sequential read IOPS(0, $2^{63}$)
      rrandiopsint64Maximum random read IOPS(0, $2^{63}$)
      wbpsint64Maximum write bandwidth(0, $2^{63}$)
      wseqiopsint64Maximum sequential write IOPS(0, $2^{63}$)
      wrandiopsint64Maximum random write IOPS(0, $2^{63}$)

      psi

      The psi field stores configuration items of the PSI-based interference detection feature. This feature can monitor CPUs, memory, and I/O resources.You can configure this field to monitor the PSI of any or all of the resources.

      Key[=Default Value]TypeDescriptionExample Value
      interval=10intInterval for PSI monitoring, in seconds[10,30]
      resource=[]string arrayResource type to be accessedcpu, memory, io
      avg10Threshold=5.0floatAverage percentage of blocking time of a job in 10 seconds. If this threshold is reached, offline services are evicted.[5.0,100]

      Bug Catching

      Buggy Content

      Bug Description

      Submit As Issue

      It's a little complicated....

      I'd like to ask someone.

      PR

      Just a small problem.

      I can fix it online!

      Bug Type
      Specifications and Common Mistakes

      ● Misspellings or punctuation mistakes;

      ● Incorrect links, empty cells, or wrong formats;

      ● Chinese characters in English context;

      ● Minor inconsistencies between the UI and descriptions;

      ● Low writing fluency that does not affect understanding;

      ● Incorrect version numbers, including software package names and version numbers on the UI.

      Usability

      ● Incorrect or missing key steps;

      ● Missing prerequisites or precautions;

      ● Ambiguous figures, tables, or texts;

      ● Unclear logic, such as missing classifications, items, and steps.

      Correctness

      ● Technical principles, function descriptions, or specifications inconsistent with those of the software;

      ● Incorrect schematic or architecture diagrams;

      ● Incorrect commands or command parameters;

      ● Incorrect code;

      ● Commands inconsistent with the functions;

      ● Wrong screenshots.

      Risk Warnings

      ● Lack of risk warnings for operations that may damage the system or important data.

      Content Compliance

      ● Contents that may violate applicable laws and regulations or geo-cultural context-sensitive words and expressions;

      ● Copyright infringement.

      How satisfied are you with this document

      Not satisfied at all
      Very satisfied
      Submit
      Click to create an issue. An issue template will be automatically generated based on your feedback.
      Bug Catching
      编组 3备份