Difference between revisions of "CRIT"
(Show what we have for now) |
|||
| Line 1: | Line 1: | ||
This page describes the CRiu Image Tool. | This page describes the CRiu Image Tool. | ||
| + | {{Note|As for now(24 Nov 2014) it is not added to the official repo, but you could checkout it [https://github.com/efiop/criu/tree/crit-test here].}} | ||
| + | |||
| + | == Usage == | ||
| + | <pre>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) | ||
| + | </pre> | ||
== Functionality == | == Functionality == | ||
=== Convert images to human-readable and back === | === 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'''<br> | ||
| + | It uses [https://developers.google.com/protocol-buffers/docs/reference/python/google.protobuf.text_format-module text_format] as a human-readable format for protobuf messages. | ||
| + | Output file is structured like: | ||
| + | With "--format raw": | ||
| + | <pre> | ||
| + | #<magic value> | ||
| + | #0 | ||
| + | <pb entry in text_format> | ||
| + | .... | ||
| + | #N | ||
| + | <pb entry in text_format> | ||
| + | </pre> | ||
| + | With "--format nice": | ||
| + | <pre> | ||
| + | #<magic name> | ||
| + | #0 <pb entry name> | ||
| + | <pb entry in text_format with tabs> | ||
| + | .... | ||
| + | #N <pb entry name> | ||
| + | <pb entry in text_format with tabs> | ||
| + | </pre> | ||
| − | + | So, here is how core file will look like with --format nice: | |
| + | <pre> | ||
| + | #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 { | ||
| + | } | ||
| + | } | ||
| + | </pre> | ||
=== Convert to json (and back) === | === Convert to json (and back) === | ||
| Line 11: | Line 309: | ||
Same as before, but the human-readable format is JSON | Same as before, but the human-readable format is JSON | ||
| + | '''Status: Ready'''<br> | ||
| + | For now, it does it in a dumb way, by just wrapping text_format in brackets and adding ";" where needed. | ||
| + | Example: | ||
| + | <pre> | ||
| + | { | ||
| + | "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" | ||
| + | } | ||
| + | } | ||
| + | } | ||
| + | </pre> | ||
=== Generate core files out of task images === | === Generate core files out of task images === | ||
All the needed information is in core-$pid.img and pagemap-$pid.img | All the needed information is in core-$pid.img and pagemap-$pid.img | ||
| + | |||
| + | '''Status: Not ready''' | ||
=== On-the-fly conversion === | === 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 | 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 === | === 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. | 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 === | === Show images statistics === | ||
E.g. -- total number of processes, files, memory, sockets, etc. | E.g. -- total number of processes, files, memory, sockets, etc. | ||
| + | |||
| + | Status: Not ready | ||
=== Check/validate images === | === Check/validate images === | ||
| Line 32: | Line 602: | ||
* all images are present | * all images are present | ||
* the inter-images IDs are in consistent state | * the inter-images IDs are in consistent state | ||
| + | |||
| + | '''Status: Not ready''' | ||
Revision as of 19:26, 24 November 2014
This page describes the CRiu Image Tool.
| 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