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>
