CRIT

Revision as of 19:26, 24 November 2014 by Efiop (talk | contribs) (Show what we have for now)

This page describes the CRiu Image Tool.

Note.svg Note: As for now(24 Nov 2014) it is not added to the official repo, but you could checkout it here.

Usage

Usage: crit [-h] [-i IN] [-o OUT] [-f {raw,nice}] [-t {json}] {convert}

CRiu Image Tool

positional arguments:
  {convert}             use "covert" to convert CRIU image to/from human-
                        readable format

optional arguments:
  -h, --help            show this help message and exit
  -i IN, --in IN        input file (stdin by default)
  -o OUT, --out OUT     output file (stdout by default
  -f {raw,nice}, --format {raw,nice}
                        well-formated output (by default: raw for files and
                        nice for stdout)
  -t {json}, --type {json}
                        Type of output file (by default img is converted to
                        txt and vice versa)

Functionality

Convert images to human-readable and back

This is the replacement for (rather nasty) criu show code. Also this is the way to edit the images before restoring from them.

Status: Ready
It uses text_format as a human-readable format for protobuf messages. Output file is structured like: With "--format raw":

#<magic value>
#0
<pb entry in text_format>
....
#N
<pb entry in text_format>

With "--format nice":

#<magic name>
#0 <pb entry name>
<pb entry in text_format with tabs>
....
#N <pb entry name>
<pb entry in text_format with tabs>

So, here is how core file will look like with --format nice:

#CORE
#0 core_entry
    mtype: X86_64
    thread_info {
      clear_tid_addr: 0
      gpregs {
        r15: 0
        r14: 19884608
        r13: 1
        r12: 0
        bp: 19879232
        bx: 0
        r11: 582
        r10: 0
        r9: 0
        r8: 19879232
        ax: 61
        cx: 18446744073709551615
        dx: 0
        si: 140733241187376
        di: 18446744073709551615
        orig_ax: 61
        ip: 213251769082
        cs: 51
        flags: 582
        sp: 140733241187336
        ss: 43
        fs_base: 140140334651200
        gs_base: 0
        ds: 0
        es: 0
        fs: 0
        gs: 0
      }
      fpregs {
        cwd: 895
        swd: 0
        twd: 0
        fop: 0
        rip: 0
        rdp: 0
        mxcsr: 8064
        mxcsr_mask: 65535
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        st_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 4294967295
        xmm_space: 4294967295
        xmm_space: 16777215
        xmm_space: 16843009
        xmm_space: 16843009
        xmm_space: 16843009
        xmm_space: 4478800
        xmm_space: 661857632
        xmm_space: 1869488186
        xmm_space: 543236212
        xmm_space: 1970037624
        xmm_space: 1680696676
        xmm_space: 775778921
        xmm_space: 544500071
        xmm_space: 2019896621
        xmm_space: 1685417059
        xmm_space: 1768172901
        xmm_space: 1747860850
        xmm_space: 809328999
        xmm_space: 909327153
        xmm_space: 1932405306
        xmm_space: 809334896
        xmm_space: 909327153
        xmm_space: 2016291386
        xmm_space: 1030123635
        xmm_space: 859517232
        xmm_space: 14902
        xmm_space: 0
        xmm_space: 65
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 4294967295
        xmm_space: 4294967295
        xmm_space: 4294967295
        xmm_space: 4294967295
        xmm_space: 4294967040
        xmm_space: 4294967295
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
        xmm_space: 0
      }
    }
    tc {
      task_state: 1
      exit_code: 0
      personality: 0
      flags: 1077960704
      blk_sigset: 65536
      comm: "loop.sh"
      timers {
        real {
          isec: 0
          iusec: 0
          vsec: 0
          vusec: 0
        }
        virt {
          isec: 0
          iusec: 0
          vsec: 0
          vusec: 0
        }
        prof {
          isec: 0
          iusec: 0
          vsec: 0
          vusec: 0
        }
      }
      rlimits {
        rlimits {
          cur: 18446744073709551615
          max: 18446744073709551615
        }
        rlimits {
          cur: 18446744073709551615
          max: 18446744073709551615
        }
        rlimits {
          cur: 18446744073709551615
          max: 18446744073709551615
        }
        rlimits {
          cur: 8388608
          max: 18446744073709551615
        }
        rlimits {
          cur: 0
          max: 18446744073709551615
        }
        rlimits {
          cur: 18446744073709551615
          max: 18446744073709551615
        }
        rlimits {
          cur: 3898
          max: 3898
        }
        rlimits {
          cur: 1024
          max: 4096
        }
        rlimits {
          cur: 65536
          max: 65536
        }
        rlimits {
          cur: 18446744073709551615
          max: 18446744073709551615
        }
        rlimits {
          cur: 18446744073709551615
          max: 18446744073709551615
        }
        rlimits {
          cur: 3898
          max: 3898
        }
        rlimits {
          cur: 819200
          max: 819200
        }
        rlimits {
          cur: 0
          max: 0
        }
        rlimits {
          cur: 0
          max: 0
        }
        rlimits {
          cur: 18446744073709551615
          max: 18446744073709551615
        }
      }
      cg_set: 1
      signals_s {
      }
    }
    thread_core {
      futex_rla: 0
      futex_rla_len: 24
      sched_nice: 0
      sched_policy: 0
      sas {
        ss_sp: 0
        ss_size: 0
        ss_flags: 2
      }
      signals_p {
      }
    }

Convert to json (and back)

Same as before, but the human-readable format is JSON

Status: Ready
For now, it does it in a dumb way, by just wrapping text_format in brackets and adding ";" where needed. Example:

{
    "magic": "CORE",
    "0": {
        "mtype": "X86_64", 
        "thread_core": {
            "futex_rla_len": "24", 
            "sched_policy": "0", 
            "sched_nice": "0", 
            "futex_rla": "0", 
            "signals_p": {}, 
            "sas": {
                "ss_size": "0", 
                "ss_sp": "0", 
                "ss_flags": "2"
            }
        }, 
        "pbtype": "core_entry", 
        "thread_info": {
            "fpregs": {
                "st_space": [
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0"
                ], 
                "fop": "0", 
                "rdp": "0", 
                "twd": "0", 
                "mxcsr": "8064", 
                "swd": "0", 
                "rip": "0", 
                "xmm_space": [
                    "0", 
                    "0", 
                    "4294967295", 
                    "4294967295", 
                    "16777215", 
                    "16843009", 
                    "16843009", 
                    "16843009", 
                    "4478800", 
                    "661857632", 
                    "1869488186", 
                    "543236212", 
                    "1970037624", 
                    "1680696676", 
                    "775778921", 
                    "544500071", 
                    "2019896621", 
                    "1685417059", 
                    "1768172901", 
                    "1747860850", 
                    "809328999", 
                    "909327153", 
                    "1932405306", 
                    "809334896", 
                    "909327153", 
                    "2016291386", 
                    "1030123635", 
                    "859517232", 
                    "14902", 
                    "0", 
                    "65", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "4294967295", 
                    "4294967295", 
                    "4294967295", 
                    "4294967295", 
                    "4294967040", 
                    "4294967295", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0", 
                    "0"
                ], 
                "cwd": "895", 
                "mxcsr_mask": "65535"
            }, 
            "clear_tid_addr": "0", 
            "gpregs": {
                "gs": "0", 
                "ip": "213251769082", 
                "cx": "18446744073709551615", 
                "cs": "51", 
                "ax": "61", 
                "orig_ax": "61", 
                "di": "18446744073709551615", 
                "es": "0", 
                "gs_base": "0", 
                "r14": "19884608", 
                "r15": "0", 
                "r12": "0", 
                "r13": "1", 
                "r10": "0", 
                "r11": "582", 
                "fs_base": "140140334651200", 
                "bp": "19879232", 
                "dx": "0", 
                "bx": "0", 
                "ds": "0", 
                "ss": "43", 
                "sp": "140733241187336", 
                "r8": "19879232", 
                "r9": "0", 
                "fs": "0", 
                "si": "140733241187376", 
                "flags": "582"
            }
        }, 
        "tc": {
            "timers": {
                "real": {
                    "isec": "0", 
                    "vusec": "0", 
                    "iusec": "0", 
                    "vsec": "0"
                }, 
                "virt": {
                    "isec": "0", 
                    "vusec": "0", 
                    "iusec": "0", 
                    "vsec": "0"
                }, 
                "prof": {
                    "isec": "0", 
                    "vusec": "0", 
                    "iusec": "0", 
                    "vsec": "0"
                }
            }, 
            "cg_set": "1", 
            "signals_s": {}, 
            "blk_sigset": "65536", 
            "exit_code": "0", 
            "rlimits": {
                "rlimits": [
                    {
                        "max": "18446744073709551615", 
                        "cur": "18446744073709551615"
                    }, 
                    {
                        "max": "18446744073709551615", 
                        "cur": "18446744073709551615"
                    }, 
                    {
                        "max": "18446744073709551615", 
                        "cur": "18446744073709551615"
                    }, 
                    {
                        "max": "18446744073709551615", 
                        "cur": "8388608"
                    }, 
                    {
                        "max": "18446744073709551615", 
                        "cur": "0"
                    }, 
                    {
                        "max": "18446744073709551615", 
                        "cur": "18446744073709551615"
                    }, 
                    {
                        "max": "3898", 
                        "cur": "3898"
                    }, 
                    {
                        "max": "4096", 
                        "cur": "1024"
                    }, 
                    {
                        "max": "65536", 
                        "cur": "65536"
                    }, 
                    {
                        "max": "18446744073709551615", 
                        "cur": "18446744073709551615"
                    }, 
                    {
                        "max": "18446744073709551615", 
                        "cur": "18446744073709551615"
                    }, 
                    {
                        "max": "3898", 
                        "cur": "3898"
                    }, 
                    {
                        "max": "819200", 
                        "cur": "819200"
                    }, 
                    {
                        "max": "0", 
                        "cur": "0"
                    }, 
                    {
                        "max": "0", 
                        "cur": "0"
                    }, 
                    {
                        "max": "18446744073709551615", 
                        "cur": "18446744073709551615"
                    }
                ]
            }, 
            "comm": "\"loop.sh\"", 
            "flags": "1077960704", 
            "task_state": "1", 
            "personality": "0"
        }
    }
}

Generate core files out of task images

All the needed information is in core-$pid.img and pagemap-$pid.img

Status: Not ready

On-the-fly conversion

There's an idea to make CRIU spawn CRIT and read images "through" it, to allow for at-the-restore-time modifications

Status: Not ready

Convert between different image versions

Right now we store the images version in inventory.img and collect info about what's bad with V1 images. If some day we have v2, CRIT will convert from v1. And for backward compatibility we'll use on-the-fly conversion when restoring from old images.

Status: Not ready

Show images statistics

E.g. -- total number of processes, files, memory, sockets, etc.

Status: Not ready

Check/validate images

Check that

  • all images are present
  • the inter-images IDs are in consistent state

Status: Not ready