Date: Wed, 7 Jun 2023 21:25:41 +0300 From: Vitaliy Gusev <gusev.vitaliy@gmail.com> To: =?utf-8?Q?Corvin_K=C3=B6hne?= <corvink@FreeBSD.org> Cc: virtualization@freebsd.org, freebsd-hackers@freebsd.org Subject: Re: BHYVE SNAPSHOT image format proposal Message-ID: <986A83D8-E0E0-4030-9369-A5B3500E27C6@gmail.com> In-Reply-To: <d92db9bfbea181d6eb9d57b579d67e8e118ef4de.camel@FreeBSD.org> References: <67FDC8A8-86A6-4AE4-85F0-FF7BEF9F2F06@gmail.com> <6b98da58a5bd8e83bc466efa20b5a900298210aa.camel@FreeBSD.org> <8387AC83-6667-48E5-A3FA-11475EA96A5F@gmail.com> <d92db9bfbea181d6eb9d57b579d67e8e118ef4de.camel@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--Apple-Mail=_95CB93A3-5926-4337-8EBD-2B9AD8CCD631 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 Hi Corvin,=20 > On 6 Jun 2023, at 15:59, Corvin K=C3=B6hne <corvink@FreeBSD.org> = wrote: >> ... >=20 > We may have different version of the format from the same produce. > IMHO, it makes sense to have a dedicated IDENT and VERSION field to > easily figure out >=20 > 1) if the producer of the image is known > 2) if we support that version of the producer >=20 > Even if you allocated a huge amount of free space, someone would need > more. So, what do you think about this format: >=20 > = +---------------------------------------------------------------------+ > | IDENT - 16 BYTES = | > = +-------------------+-----------------------+-------------------------+ > | VERSION - 4 BYTES | NVLIST SIZE - 4 BYTES | NVLIST OFFSET - 8 BYTES = | > = +-------------------+-----------------------+-------------------------+ > | POSSIBLE FREE SPACE (e.g. for custom data, alignment etc.) = | > = +---------------------------------------------------------------------+ > | NVLIST DATA = | > = +---------------------------------------------------------------------+ > | POSSIBLE FREE SPACE (for whatever reason) = | > = +---------------------------------------------------------------------+ > | SNAPSHOT DATA = | > = +=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2= =80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80= =94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94= =E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2= =80=94+ >=20 Note, simple string "BHYVE CHECKPOINT IMAGE=E2=80=9D has 22 bytes. So 16 = bytes seems too small.=20 So I would not to complicate a header first.=20 I would rather describe ideas, conditions and then solutions: Need to distinguish snapshot image file from other files.=20 Solution: Header should have "magic id=E2=80=9D. Need a barrier for resuming if image "is not ours=E2=80=9D. Idea is not = to allow to resume images from other producers. The reason to have it and use it instead of header versioning:=20 Imagine that mainstream has its own implementation and company=E2=80=99s = fork repo has its own implementation. How to ensure that the versions in = an image file are ours and not somebody=E2=80=99s else? Solution: Header should have =E2=80=9CProducer id=E2=80=9D string. Example: Snapshot image file has empty Producer string , but bhyve has = current Producer as =E2=80=9CMYCOMPANY=E2=80=9D. Strings are not equal, = resume must fail. The Rule above does not restrict getting/decoding data from an image = file. It should be possible to look at an image file and analyse = internals, to get/decode values, etc. Solution: Have additional option either in bhyve or bhyvectl to get into = image file. Following nvlist header data should have a short information about image = file and its internals. Solution: NV HEADER can have several sections: =E2=80=9Cconfig=E2=80=9D, = =E2=80=9Ckernel=E2=80=9D, =E2=80=9Cdevices=E2=80=9D, =E2=80=9Cmemory=E2=80= =9D, =E2=80=A6 Versioning of NV HEADER. Idea is to have an information in advance = whether it is possible to be resumed or not. In other words, before do = resume, get information about ability to resume. Solution: Each Section should have =E2=80=9Cversion=E2=80=9D and = =E2=80=9Csubversion=E2=80=9D. While =E2=80=9Cversion=E2=80=9D is = responsible for both types of compatibility: backward and forward, = =E2=80=9Csubversion=E2=80=9D is for forward compatibility only. Rules for check: If bh_version =3D=3D version && bh_subversion >=3D subversion = then Bhyve able to resume the Section Else Bhyve cannot resume the Section Endif Example 1: Section in image has =E2=80=9Cversion=3D1", = =E2=80=9Csubversion=3D5=E2=80=9D, Bhyve has =E2=80=9Cversion=3D1", = =E2=80=9Csubversion=3D6". That means, bhyve can resume the Section. Example 2: The same image Section, but bhyve has =E2=80=9Cversion=3D1", = =E2=80=9Csubversion=3D4". Bhyve cannot resume the Section. Example 3: The same image Section, but bhyve has =E2=80=9Cversion=3D2", = =E2=80=9Csubversion=3D5=E2=80=9D. Bhyve cannot resume the Section. Rules for increasing versions: - If during code-change =E2=80=9Cbackward=E2=80=9D compatibility is = broken, =E2=80=9Cversion=E2=80=9D should be increased and = =E2=80=9Csubversion=E2=80=9D is set to 0. - If during code-change =E2=80=9Cforward=E2=80=9D compatibility is = broken, =E2=80=9Csubversion=E2=80=9D should be increased. Other versioning in HEADER is redundant. If something is changed in the = format, =E2=80=9Cmagic id=E2=80=9D can be changed appropriately. Solution: =E2=80=9Cmagic id=E2=80=9D should be stable and not changed = for a long time. As result I would suggest to give at least 32 bytes for "magic id=E2=80=9D= / ident and 32 bytes for =E2=80=9Cproducer id=E2=80=9D. Format of entire image file can be: +-----------------------------------------------------------------+ | HEADER MAGIC ID - 32 BYTES | +-----------------------------------------------------------------+ | HEADER PRODUCER ID - 32 BYTES | = +=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2= =80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94--------------= --=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94= --=E2=80=94-----------------------+ | NVLIST HEADER SIZE - 4 BYTES |=20 +-----------------------------------------------------------------+ | NVLIST HEADER DATA (SECTIONS) | +-----------------------------------------------------------------+ | SNAPSHOT DATA | +-----------------------------------------------------------------+ MAGIC ID: should be hardcoded: "BHYVE CHECKPOINT IMAGE=E2=80=9D. PRODUCER ID: can be empty and supported by producer, i.e. reserved.=20 NVLIST HEADER SIZE: has enough dimension, but in general size is less = than 4KB NVLIST HEADER DATA: Packed nvlist data, contains Sections: = =E2=80=9Cconfig=E2=80=9D, =E2=80=9Ckernel=E2=80=9D, =E2=80=9Cdevices=E2=80= =9D, =E2=80=9Cmemory=E2=80=9D, =E2=80=A6 : [config] offset =3D 0x1000 (4096) size =3D 0x1f6 (502) type =3D text vers =3D 1 subvers =3D 5 [kernel] offset =3D 0x11f6 (4598) size =3D 0x19a7 (6567) type =3D nvlist vers =3D 1 subvers =3D 0 [devices] offset =3D 0x2b9d (11165) size =3D 0x10145ba (16860602) type =3D nvlist vers =3D 2 subvers =3D 1 [memory] offset =3D 0x1200000 (18874368) size =3D 0x3ce00000 (1021313024) type =3D pages vers =3D 1 subvers =3D 0=20 I hope I gained a whole understanding. Thanks, Vitaliy Gusev --Apple-Mail=_95CB93A3-5926-4337-8EBD-2B9AD8CCD631 Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 <html><head><meta http-equiv=3D"content-type" content=3D"text/html; = charset=3Dutf-8"></head><body style=3D"overflow-wrap: break-word; = -webkit-nbsp-mode: space; line-break: after-white-space;">Hi = Corvin, <br><br><blockquote type=3D"cite">On 6 Jun 2023, at 15:59, = Corvin K=C3=B6hne <corvink@FreeBSD.org> = wrote:</blockquote><blockquote type=3D"cite"><blockquote = type=3D"cite">...</blockquote><br>We may have different version of the = format from the same produce.<br>IMHO, it makes sense to have a = dedicated IDENT and VERSION field to<br>easily figure out<br><br>1) if = the producer of the image is known<br>2) if we support that version of = the producer<br><br>Even if you allocated a huge amount of free space, = someone would need<br>more. So, what do you think about this = format:<br><br>+----------------------------------------------------------= -----------+<br>| IDENT - 16 BYTES = &n= bsp; &nbs= p; = &n= bsp; |<br>+-------------------+-----------------------+--------------= -----------+<br>| VERSION - 4 BYTES | NVLIST SIZE - 4 BYTES | NVLIST = OFFSET - 8 BYTES = |<br>+-------------------+-----------------------+------------------------= -+<br>| POSSIBLE FREE SPACE (e.g. for custom data, alignment etc.) = |<br>+--------------= -------------------------------------------------------+<br>| NVLIST = DATA = &n= bsp; &nbs= p; = &n= bsp; |<br>+----------------------------= -----------------------------------------+<br>| POSSIBLE FREE SPACE (for = whatever reason) = &n= bsp; &nbs= p; |<br>+------------------------------------------------------------= ---------+<br>| SNAPSHOT DATA = &n= bsp; &nbs= p; = &n= bsp; |<br>+=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80= =94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94= =E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2= =80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80= =94=E2=80=94=E2=80=94=E2=80=94=E2=80=94+<br><br></blockquote><br>Note, = simple string "<font face=3D"Monaco" size=3D"2">BHYVE CHECKPOINT = IMAGE</font>=E2=80=9D has 22 bytes. So 16 bytes seems<br>too = small. <br><br>So I would not to complicate a header = first. <div><br></div><div>I would rather describe ideas, = conditions and then solutions:<br><br><div><ol = class=3D"MailOutline"><li>Need to distinguish snapshot image file = from other files. <br><u>Solution</u>: Header should have "magic = id=E2=80=9D.<br><br></li><li>Need a barrier for resuming if image = "is not ours=E2=80=9D. Idea is not to allow to resume images from other = producers.<br><br>The reason to have it and use it instead of header = versioning: <br><br>Imagine that mainstream has its own implementation = and company=E2=80=99s fork repo has its own implementation. How to = <b>ensure</b> that the <b>versions</b> in an image file are ours = and not somebody=E2=80=99s else?<br><br><u>Solution</u>: Header = should have =E2=80=9CProducer id=E2=80=9D string.<br><br>Example: = Snapshot image file has empty Producer string , but bhyve has current = Producer as =E2=80=9CMYCOMPANY=E2=80=9D. Strings are not equal, resume = must fail.<br><br></li><li>The Rule above does not restrict = getting/decoding data from an image file. It should be possible to look = at an image file and analyse internals, to get/decode values, = etc.<br><u>Solution</u>: Have additional option either in bhyve or = bhyvectl to get into image file.<br><br></li><li>Following nvlist header = data should have a short information about image file and its = internals.<br><u>Solution</u>: NV HEADER can have several sections: = =E2=80=9Cconfig=E2=80=9D, =E2=80=9Ckernel=E2=80=9D, =E2=80=9Cdevices=E2=80= =9D, =E2=80=9Cmemory=E2=80=9D, =E2=80=A6<br><br></li><li>Versioning of = NV HEADER. Idea is to have an information in advance whether it is = possible to be resumed or not. In other words, before do resume, get = information about ability to resume.<br><br><u>Solution</u>: Each = Section should have =E2=80=9Cversion=E2=80=9D and = =E2=80=9Csubversion=E2=80=9D. While =E2=80=9Cversion=E2=80=9D is = responsible for both types of compatibility: backward and forward, = =E2=80=9Csubversion=E2=80=9D is for forward compatibility = only.<br><br><u>Rules for check</u>:<br> If = bh_version =3D=3D version && bh_subversion >=3D subversion = then<br> = Bhyve able to resume the Section<br> = Else<br> = Bhyve cannot resume the Section<br> = Endif<br><u style=3D"text-decoration: underline;"><br>Example 1</u><span = style=3D"text-decoration: none;">: Section in image has =E2=80=9Cversion=3D= 1", =E2=80=9Csubversion=3D5=E2=80=9D, Bhyve has =E2=80=9Cversion=3D1= ", =E2=80=9Csubversion=3D6". That means, bhyve can resume the = Section.</span><br style=3D"text-decoration: none;"><br = style=3D"text-decoration: none;"><u style=3D"text-decoration: = underline;">Example 2</u><span style=3D"text-decoration: none;">: The = same image Section, but bhyve has =E2=80=9Cversion=3D1", = =E2=80=9Csubversion=3D4". Bhyve cannot resume the Section.</span><br = style=3D"text-decoration: none;"><br>Example 3: The same image Section, = but bhyve has =E2=80=9Cversion=3D2", =E2=80=9Csubversion=3D5=E2=80=9D. = Bhyve cannot resume the Section.<br><br><u>Rules for increasing = versions</u>:<br> - If during code-change =E2=80=9Cbackward=E2= =80=9D compatibility is broken, =E2=80=9Cversion=E2=80=9D should be = increased and =E2=80=9Csubversion=E2=80=9D is set to 0.<br> - = If during code-change =E2=80=9Cforward=E2=80=9D compatibility is = broken, =E2=80=9Csubversion=E2=80=9D should be = increased.<br><br></li><li>Other versioning in HEADER is redundant. If = something is changed in the format, =E2=80=9Cmagic id=E2=80=9D can be = changed appropriately.<br><u>Solution</u>: =E2=80=9Cmagic id=E2=80=9D = should be stable and not changed for a long = time.</li></ol><div><br></div></div><br>As result I would suggest to = give at least 32 bytes for "magic id=E2=80=9D / ident and 32 bytes for = =E2=80=9Cproducer id=E2=80=9D.<div><br></div><div>Format of entire image = file can be:<br><br><br><blockquote type=3D"cite"></blockquote><font = face=3D"Monaco" = size=3D"2">+--------------------------------------------------------------= ---+<br></font><blockquote type=3D"cite"></blockquote><font = face=3D"Monaco" size=3D"2">| = HEADER MAGIC ID - 32 BYTES = |<br></font><blockquote = type=3D"cite"></blockquote><font face=3D"Monaco" = size=3D"2">+--------------------------------------------------------------= ---+<br></font><blockquote type=3D"cite"></blockquote><font = face=3D"Monaco" size=3D"2">| = HEADER PRODUCER ID - 32 BYTES = |</font><font face=3D"Monaco" = size=3D"2"><br></font><blockquote type=3D"cite"></blockquote><font = face=3D"Monaco" size=3D"2"></font><font face=3D"Monaco" = size=3D"2">+=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94= =E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94--= --------------=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80=94=E2=80= =94=E2=80=94--=E2=80=94-----------------------+<br></font><blockquote = type=3D"cite"></blockquote><font face=3D"Monaco" size=3D"2">| = NVLIST HEADER SIZE - = 4 BYTES </font><span style=3D"font-family: Monaco; font-size: = small;"> = |</span><span style=3D"font-family: Monaco; font-size: = small;"> </span></div><div><blockquote = type=3D"cite"></blockquote><font face=3D"Monaco" = size=3D"2">+--------------------------------------------------------------= ---+<br></font><blockquote type=3D"cite"></blockquote><font = face=3D"Monaco" size=3D"2">| = NVLIST HEADER DATA (SECTIONS) = |<br></font><blockquote = type=3D"cite"></blockquote><font face=3D"Monaco" = size=3D"2">+--------------------------------------------------------------= ---+<br></font><blockquote type=3D"cite"></blockquote><font = face=3D"Monaco" size=3D"2">| = SNAPSHOT DATA = = = |<br>+-----------------------------------------------------------------+<b= r></font><br><br><u>MAGIC ID</u>: should be hardcoded: "<font = face=3D"Monaco" size=3D"2">BHYVE CHECKPOINT = IMAGE</font>=E2=80=9D.</div><div><br></div><div><u>PRODUCER ID</u>: can = be empty and supported by producer, i.e. = reserved. <br><u><br></u></div><div><u>NVLIST HEADER SIZE</u>: has = enough dimension, but in general size is less than = 4KB<br><br></div><div><u>NVLIST HEADER DATA</u>: Packed nvlist data, = contains Sections: =E2=80=9Cconfig=E2=80=9D, =E2=80=9Ckernel=E2=80=9D= , =E2=80=9Cdevices=E2=80=9D, =E2=80=9Cmemory=E2=80=9D, =E2=80=A6 = :</div><div><br></div><blockquote style=3D"margin: 0 0 0 40px; border: = none; padding: 0px;"><p style=3D"margin: 0px; font-style: normal; = font-variant-caps: normal; font-stretch: normal; font-size: 12px; = line-height: normal; font-family: Menlo; font-size-adjust: none; = font-kerning: auto; font-variant-alternates: normal; = font-variant-ligatures: normal; font-variant-numeric: normal; = font-variant-east-asian: normal; font-variant-position: normal; = font-feature-settings: normal; font-optical-sizing: auto; = font-variation-settings: normal; background-color: rgb(231, 238, = 238);">[config]</p> <p style=3D"margin: 0px; font-style: normal; font-variant-caps: normal; = font-stretch: normal; font-size: 12px; line-height: normal; font-family: = Menlo; font-size-adjust: none; font-kerning: auto; = font-variant-alternates: normal; font-variant-ligatures: normal; = font-variant-numeric: normal; font-variant-east-asian: normal; = font-variant-position: normal; font-feature-settings: normal; = font-optical-sizing: auto; font-variation-settings: normal; = background-color: rgb(231, 238, 238);"><span = style=3D"font-variant-ligatures: no-common-ligatures"> = offset =3D 0x1000 (4096)</span></p> <p style=3D"margin: 0px; font-style: normal; font-variant-caps: normal; = font-stretch: normal; font-size: 12px; line-height: normal; font-family: = Menlo; font-size-adjust: none; font-kerning: auto; = font-variant-alternates: normal; font-variant-ligatures: normal; = font-variant-numeric: normal; font-variant-east-asian: normal; = font-variant-position: normal; font-feature-settings: normal; = font-optical-sizing: auto; font-variation-settings: normal; = background-color: rgb(231, 238, 238);"><span = style=3D"font-variant-ligatures: no-common-ligatures"> = size =3D 0x1f6 (502)</span></p> <p style=3D"margin: 0px; font-style: normal; font-variant-caps: normal; = font-stretch: normal; font-size: 12px; line-height: normal; font-family: = Menlo; font-size-adjust: none; font-kerning: auto; = font-variant-alternates: normal; font-variant-ligatures: normal; = font-variant-numeric: normal; font-variant-east-asian: normal; = font-variant-position: normal; font-feature-settings: normal; = font-optical-sizing: auto; font-variation-settings: normal; = background-color: rgb(231, 238, 238);"><span = style=3D"font-variant-ligatures: no-common-ligatures"> = type =3D text</span></p><p style=3D"margin: 0px; = font-style: normal; font-variant-caps: normal; font-stretch: normal; = font-size: 12px; line-height: normal; font-family: Menlo; = font-size-adjust: none; font-kerning: auto; font-variant-alternates: = normal; font-variant-ligatures: normal; font-variant-numeric: normal; = font-variant-east-asian: normal; font-variant-position: normal; = font-feature-settings: normal; font-optical-sizing: auto; = font-variation-settings: normal; background-color: rgb(231, 238, = 238);"><span style=3D"font-variant-ligatures: no-common-ligatures"><span = class=3D"Apple-tab-span" style=3D"white-space:pre"> </span>vers =3D = 1<br><span class=3D"Apple-tab-span" style=3D"white-space:pre"> = </span>subvers =3D 5</span></p> <p style=3D"margin: 0px; font-style: normal; font-variant-caps: normal; = font-stretch: normal; font-size: 12px; line-height: normal; font-family: = Menlo; font-size-adjust: none; font-kerning: auto; = font-variant-alternates: normal; font-variant-ligatures: normal; = font-variant-numeric: normal; font-variant-east-asian: normal; = font-variant-position: normal; font-feature-settings: normal; = font-optical-sizing: auto; font-variation-settings: normal; = background-color: rgb(231, 238, 238);"><span = style=3D"font-variant-ligatures: = no-common-ligatures">[kernel]</span></p> <p style=3D"margin: 0px; font-style: normal; font-variant-caps: normal; = font-stretch: normal; font-size: 12px; line-height: normal; font-family: = Menlo; font-size-adjust: none; font-kerning: auto; = font-variant-alternates: normal; font-variant-ligatures: normal; = font-variant-numeric: normal; font-variant-east-asian: normal; = font-variant-position: normal; font-feature-settings: normal; = font-optical-sizing: auto; font-variation-settings: normal; = background-color: rgb(231, 238, 238);"><span = style=3D"font-variant-ligatures: no-common-ligatures"> = offset =3D 0x11f6 (4598)</span></p> <p style=3D"margin: 0px; font-style: normal; font-variant-caps: normal; = font-stretch: normal; font-size: 12px; line-height: normal; font-family: = Menlo; font-size-adjust: none; font-kerning: auto; = font-variant-alternates: normal; font-variant-ligatures: normal; = font-variant-numeric: normal; font-variant-east-asian: normal; = font-variant-position: normal; font-feature-settings: normal; = font-optical-sizing: auto; font-variation-settings: normal; = background-color: rgb(231, 238, 238);"><span = style=3D"font-variant-ligatures: no-common-ligatures"> = size =3D 0x19a7 (6567)</span></p> <p style=3D"margin: 0px; font-style: normal; font-variant-caps: normal; = font-stretch: normal; font-size: 12px; line-height: normal; font-family: = Menlo; font-size-adjust: none; font-kerning: auto; = font-variant-alternates: normal; font-variant-ligatures: normal; = font-variant-numeric: normal; font-variant-east-asian: normal; = font-variant-position: normal; font-feature-settings: normal; = font-optical-sizing: auto; font-variation-settings: normal; = background-color: rgb(231, 238, 238);"><span = style=3D"font-variant-ligatures: no-common-ligatures"> = type =3D nvlist</span></p> <p style=3D"margin: 0px; font-stretch: normal; font-size: 12px; = line-height: normal; font-family: Menlo; font-size-adjust: none; = font-kerning: auto; font-variant-alternates: normal; = font-variant-ligatures: normal; font-variant-numeric: normal; = font-variant-east-asian: normal; font-variant-position: normal; = font-feature-settings: normal; font-optical-sizing: auto; = font-variation-settings: normal; background-color: rgb(231, 238, = 238);"><span style=3D"font-variant-ligatures: = no-common-ligatures;"><span class=3D"Apple-tab-span" style=3D"white-space:= pre;"> </span>vers =3D 1<br><span class=3D"Apple-tab-span" = style=3D"white-space: pre;"> </span>subvers =3D 0</span></p><p = style=3D"margin: 0px; font-style: normal; font-variant-caps: normal; = font-stretch: normal; font-size: 12px; line-height: normal; font-family: = Menlo; font-size-adjust: none; font-kerning: auto; = font-variant-alternates: normal; font-variant-ligatures: normal; = font-variant-numeric: normal; font-variant-east-asian: normal; = font-variant-position: normal; font-feature-settings: normal; = font-optical-sizing: auto; font-variation-settings: normal; = background-color: rgb(231, 238, 238);"><span = style=3D"font-variant-ligatures: = no-common-ligatures">[devices]</span></p> <p style=3D"margin: 0px; font-style: normal; font-variant-caps: normal; = font-stretch: normal; font-size: 12px; line-height: normal; font-family: = Menlo; font-size-adjust: none; font-kerning: auto; = font-variant-alternates: normal; font-variant-ligatures: normal; = font-variant-numeric: normal; font-variant-east-asian: normal; = font-variant-position: normal; font-feature-settings: normal; = font-optical-sizing: auto; font-variation-settings: normal; = background-color: rgb(231, 238, 238);"><span = style=3D"font-variant-ligatures: no-common-ligatures"> = offset =3D 0x2b9d (11165)</span></p> <p style=3D"margin: 0px; font-style: normal; font-variant-caps: normal; = font-stretch: normal; font-size: 12px; line-height: normal; font-family: = Menlo; font-size-adjust: none; font-kerning: auto; = font-variant-alternates: normal; font-variant-ligatures: normal; = font-variant-numeric: normal; font-variant-east-asian: normal; = font-variant-position: normal; font-feature-settings: normal; = font-optical-sizing: auto; font-variation-settings: normal; = background-color: rgb(231, 238, 238);"><span = style=3D"font-variant-ligatures: no-common-ligatures"> = size =3D 0x10145ba (16860602)</span></p> <p style=3D"margin: 0px; font-style: normal; font-variant-caps: normal; = font-stretch: normal; font-size: 12px; line-height: normal; font-family: = Menlo; font-size-adjust: none; font-kerning: auto; = font-variant-alternates: normal; font-variant-ligatures: normal; = font-variant-numeric: normal; font-variant-east-asian: normal; = font-variant-position: normal; font-feature-settings: normal; = font-optical-sizing: auto; font-variation-settings: normal; = background-color: rgb(231, 238, 238);"><span = style=3D"font-variant-ligatures: no-common-ligatures"> = type =3D nvlist</span></p> <p style=3D"margin: 0px; font-stretch: normal; font-size: 12px; = line-height: normal; font-family: Menlo; font-size-adjust: none; = font-kerning: auto; font-variant-alternates: normal; = font-variant-ligatures: normal; font-variant-numeric: normal; = font-variant-east-asian: normal; font-variant-position: normal; = font-feature-settings: normal; font-optical-sizing: auto; = font-variation-settings: normal; background-color: rgb(231, 238, = 238);"><span style=3D"font-variant-ligatures: = no-common-ligatures;"><span class=3D"Apple-tab-span" style=3D"white-space:= pre;"> </span>vers =3D 2<br><span class=3D"Apple-tab-span" = style=3D"white-space: pre;"> </span>subvers =3D 1</span></p><p = style=3D"margin: 0px; font-style: normal; font-variant-caps: normal; = font-stretch: normal; font-size: 12px; line-height: normal; font-family: = Menlo; font-size-adjust: none; font-kerning: auto; = font-variant-alternates: normal; font-variant-ligatures: normal; = font-variant-numeric: normal; font-variant-east-asian: normal; = font-variant-position: normal; font-feature-settings: normal; = font-optical-sizing: auto; font-variation-settings: normal; = background-color: rgb(231, 238, 238);"><span = style=3D"font-variant-ligatures: = no-common-ligatures">[memory]</span></p> <p style=3D"margin: 0px; font-style: normal; font-variant-caps: normal; = font-stretch: normal; font-size: 12px; line-height: normal; font-family: = Menlo; font-size-adjust: none; font-kerning: auto; = font-variant-alternates: normal; font-variant-ligatures: normal; = font-variant-numeric: normal; font-variant-east-asian: normal; = font-variant-position: normal; font-feature-settings: normal; = font-optical-sizing: auto; font-variation-settings: normal; = background-color: rgb(231, 238, 238);"><span = style=3D"font-variant-ligatures: no-common-ligatures"> = offset =3D 0x1200000 (18874368)</span></p> <p style=3D"margin: 0px; font-style: normal; font-variant-caps: normal; = font-stretch: normal; font-size: 12px; line-height: normal; font-family: = Menlo; font-size-adjust: none; font-kerning: auto; = font-variant-alternates: normal; font-variant-ligatures: normal; = font-variant-numeric: normal; font-variant-east-asian: normal; = font-variant-position: normal; font-feature-settings: normal; = font-optical-sizing: auto; font-variation-settings: normal; = background-color: rgb(231, 238, 238);"><span = style=3D"font-variant-ligatures: no-common-ligatures"> = size =3D 0x3ce00000 (1021313024)</span></p><p = style=3D"margin: 0px; font-style: normal; font-variant-caps: normal; = font-stretch: normal; font-size: 12px; line-height: normal; font-family: = Menlo; font-size-adjust: none; font-kerning: auto; = font-variant-alternates: normal; font-variant-ligatures: normal; = font-variant-numeric: normal; font-variant-east-asian: normal; = font-variant-position: normal; font-feature-settings: normal; = font-optical-sizing: auto; font-variation-settings: normal; = background-color: rgb(231, 238, 238);"> type = =3D pages</p><p style=3D"margin: 0px; font-stretch: normal; font-size: = 12px; line-height: normal; font-family: Menlo; font-size-adjust: none; = font-kerning: auto; font-variant-alternates: normal; = font-variant-ligatures: normal; font-variant-numeric: normal; = font-variant-east-asian: normal; font-variant-position: normal; = font-feature-settings: normal; font-optical-sizing: auto; = font-variation-settings: normal; background-color: rgb(231, 238, = 238);"><span style=3D"font-variant-ligatures: = no-common-ligatures;"><span class=3D"Apple-tab-span" style=3D"white-space:= pre;"> </span>vers =3D 1<br><span class=3D"Apple-tab-span" = style=3D"white-space: pre;"> </span>subvers =3D = 0</span> </p></blockquote><div><br></div><div><br></div><div>I hope = I gained a whole understanding.</div><div>Thanks,</div><div>Vitaliy = Gusev</div><div><br><blockquote type=3D"cite"><blockquote = type=3D"cite"><blockquote = type=3D"cite"></blockquote></blockquote></blockquote></div></div></body></= html>= --Apple-Mail=_95CB93A3-5926-4337-8EBD-2B9AD8CCD631--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?986A83D8-E0E0-4030-9369-A5B3500E27C6>