Changes

Jump to: navigation, search

CRIT

14,657 bytes added, 19:26, 24 November 2014
Show what we have for now
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 ==
=== 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>
This So, here is the replacement for (rather nasty) criu show code. Also this is the way to edit the images before restoring from themhow 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) ===
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 ===
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 ===
* all images are present
* the inter-images IDs are in consistent state
 
'''Status: Not ready'''
84
edits

Navigation menu