Skip site navigation (1)Skip section navigation (2)
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,&nbsp;<br><br><blockquote type=3D"cite">On 6 Jun 2023, at 15:59, =
Corvin K=C3=B6hne &lt;corvink@FreeBSD.org&gt; =
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 =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;|<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.) =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>+--------------=
-------------------------------------------------------+<br>| NVLIST =
DATA =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|<br>+----------------------------=
-----------------------------------------+<br>| POSSIBLE FREE SPACE (for =
whatever reason) =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;|<br>+------------------------------------------------------------=
---------+<br>| SNAPSHOT DATA =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;|<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.&nbsp;<br><br>So I would not to complicate a header =
first.&nbsp;<div><br></div><div>I would rather describe ideas, =
conditions and then solutions:<br><br><div><ol =
class=3D"MailOutline"><li>Need to&nbsp;distinguish snapshot image file =
from other files. <br><u>Solution</u>: Header should have "magic =
id=E2=80=9D.<br><br></li><li>Need&nbsp;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&nbsp;the <b>versions</b> in an image file are ours =
and not somebody=E2=80=99s else?<br><br><u>Solution</u>: &nbsp;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&nbsp;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 &nbsp;and =
=E2=80=9Csubversion=E2=80=9D. While =E2=80=9Cversion=E2=80=9D is =
responsible for both &nbsp;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>&nbsp; &nbsp; &nbsp; &nbsp; If =
bh_version =3D=3D version &amp;&amp; bh_subversion &gt;=3D subversion =
&nbsp;then<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; Bhyve able to resume the Section<br>&nbsp; &nbsp; &nbsp; &nbsp; =
Else<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
Bhyve cannot resume the Section<br>&nbsp; &nbsp; &nbsp; &nbsp; =
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, &nbsp;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>&nbsp; - &nbsp;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>&nbsp; - =
&nbsp;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">| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; HEADER MAGIC ID &nbsp; &nbsp; - 32 BYTES &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|<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">| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; HEADER PRODUCER ID &nbsp;- 32 BYTES &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|</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">| &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NVLIST HEADER SIZE &nbsp;- =
&nbsp;4 BYTES </font><span style=3D"font-family: Monaco; font-size: =
small;">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp;|</span><span style=3D"font-family: Monaco; font-size: =
small;">&nbsp;</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">| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; NVLIST HEADER DATA (SECTIONS) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |<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">| &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SNAPSHOT DATA &nbsp; &nbsp; &nbsp; =
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =
&nbsp; =
|<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.&nbsp;<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: &nbsp;=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">&nbsp; &nbsp; =
&nbsp; &nbsp; 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">&nbsp; &nbsp; =
&nbsp; &nbsp; 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">&nbsp; &nbsp; =
&nbsp; &nbsp; 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">&nbsp; &nbsp; =
&nbsp; &nbsp; 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">&nbsp; &nbsp; =
&nbsp; &nbsp; 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">&nbsp; &nbsp; =
&nbsp; &nbsp; 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">&nbsp; &nbsp; =
&nbsp; &nbsp; 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">&nbsp; &nbsp; =
&nbsp; &nbsp; 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">&nbsp; &nbsp; =
&nbsp; &nbsp; 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">&nbsp; &nbsp; =
&nbsp; &nbsp; 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">&nbsp; &nbsp; =
&nbsp; &nbsp; 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);">&nbsp; &nbsp; &nbsp; &nbsp; 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>&nbsp;</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>