From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp0.migadu.com ([2001:41d0:403:4876::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms13.migadu.com with LMTPS id MB4zLk2kK2e5TQAAqHPOHw:P1 (envelope-from ) for ; Wed, 06 Nov 2024 17:15:57 +0000 Received: from aspmx1.migadu.com ([2001:41d0:403:4876::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp0.migadu.com with LMTPS id MB4zLk2kK2e5TQAAqHPOHw (envelope-from ) for ; Wed, 06 Nov 2024 18:15:57 +0100 X-Envelope-To: larch@yhetil.org Authentication-Results: aspmx1.migadu.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=IHcsmxYS; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (aspmx1.migadu.com: domain of "guix-devel-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-devel-bounces+larch=yhetil.org@gnu.org" ARC-Seal: i=1; s=key1; d=yhetil.org; t=1730913357; a=rsa-sha256; cv=none; b=cBM2dB0MPKbz0Zs9+0vLfXxB63liJLrQkBJE7cnHiF+gVIaXiHZd62DuvAKWAe+5O1B6Tq PVd8LypX/TmMw4xIOvcMYwMLm4M35opQitnbDGK1OAsKLCJ9isiAs5BK39Cr7E1GOTF3Il MwEjSD3jnn7l69kYCRB2wwKH40F9PqH9+W+hCAno4TvfA+6K/EeSrMOaOm6HcrScn/JT/2 RYPS3EH7r+Bn+gCgazeqf2TSLwixCe4TkRyQBcM8yC+zv61BVLn5WeWXdRmaXr0frcSD44 j4OPZOnGSRrjfq0y+1fa4rpfggAcCp6LqtjZBdhmplolkje5mQhPgymvVY28tg== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=IHcsmxYS; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (aspmx1.migadu.com: domain of "guix-devel-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="guix-devel-bounces+larch=yhetil.org@gnu.org" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1730913357; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=QG2mo+ABXS/Oz9qSJU9+s6f0IeBdPsR1uOLRbtvY+/Y=; b=fg9C4nx6NkmBPHcvMkmuO2W7z7c4wOBwFb+xXOC9vMxo76lR2X35LbqG+l1WLUuXBw9UJZ jz6awmgolLAumAL1ohiwOUJigU4DKGxksky5f+IKRogVvwMYaMb7k5Lb3pMUnSrviuFEfO 4klria5rLjyfMNwKlH6KQKn4xlw/r0p53Wrq5pFkDHMxLpPPRsc58lbaEYAmX/61dbA9Vz hCDcyltaxYBdW/B7f1NIDMmgE3Ps89xMj2nXHH+lijlZLRT0MpnS4chH+Ik7eekHXGTjLh PDir1MXAJWeqcdgCcWRYzsy8GkdDVdjgpS4MSwSrWLPY5SmwdpPm39LbGmweNQ== Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 834851AE1D for ; Wed, 06 Nov 2024 18:15:57 +0100 (CET) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1t8jcr-0000fb-6i; Wed, 06 Nov 2024 12:15:25 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1t8jcp-0000fB-A4 for guix-devel@gnu.org; Wed, 06 Nov 2024 12:15:23 -0500 Received: from mail-pj1-x1032.google.com ([2607:f8b0:4864:20::1032]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1t8jcn-000734-63; Wed, 06 Nov 2024 12:15:22 -0500 Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-2e3d523a24dso45756a91.0; Wed, 06 Nov 2024 09:15:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1730913318; x=1731518118; darn=gnu.org; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=QG2mo+ABXS/Oz9qSJU9+s6f0IeBdPsR1uOLRbtvY+/Y=; b=IHcsmxYS1qv41/mtjZ5F5dqwLBBTtAXv+3g9VmUTQ/+feRKrvmpcnZoVypN0atI2ik P+Y/3y+MuBz1xi+W2LH4GQ1W6B1wkVET4mfIRBbmMc6AcnHgfXRT+Vaj75RYiKsDHFGW gvulhEuEzr7n2R8d5J68I+HU81UUSDp+jCsuBJbkWco55Spa4D/6WAOuh0jjQNV1aRZy BGvua/7AU/V9VtJ1vO7xSHLsCIv9PiwuiAZ94Und/mBrCoGE3j6HHFDYSIF5E5LilPka STAA4qMAw/+ATwqb4jBvPFGBSsvZ7z4CCZCDJJ5ij/w+/vvNNla3QCCvJlsAy1V1tDkW k6nw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730913318; x=1731518118; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=QG2mo+ABXS/Oz9qSJU9+s6f0IeBdPsR1uOLRbtvY+/Y=; b=HHUTL2cWC5G/3B35K3RmP6uk2dG1XI46ANNriGFwnHTzbgWAWEAmDSro7eL+xIrzRy b0ZGn51OYIhBwld2PrIZD7hszxehysONIlomYhwTvo3n5V708USp/Z2y58gNK8z/Vkq7 7HKje2z0cYK3mGz9+OTdvHiRSXuT9jUOUs6gpdZBZII8wAVUJyiOZ0KUv0tpPNkSIJ+L k7VYDiJVVS5M1mC7jSlr9FVsIhm27IS85NHy/udV0xu8sreeDGnUVOEyYLwm4POWMNuS jYfYBlE8v7MsgXGw8z7phkxeYjtiZ0mt7arVrfx/NUqrleY7tpp80V+ffc3EvtSOom1H CbYw== X-Forwarded-Encrypted: i=1; AJvYcCWxB7hOPf2N2Ra/l62pYr3XNU9j5NUq7PayqIl0tYh+vJFbRNyapPVwBA3W013sF8r6W2UAJfi1PfE5@gnu.org X-Gm-Message-State: AOJu0YzbMOtwxfg9IFv3qvPM5e5epPDgTnsNUO8bLNa4DeO0k1AkQswJ ZUUx3BjM9uSwgEsxbtEpM4deGva0N5BNMLjXNxSaNFXoJ/3qhXdQSHDooAc47LAlE9CZfnYQ3Dj qCrOPdR9zrOvITxFfbhnrup97o3gcHA== X-Google-Smtp-Source: AGHT+IGJf+zVOp9VVvEcOqoTVbGz65EiolUCj9ZyJR55XjGus9WyQo0fxeU3bTXmG5syWpVF8dGfaRvlmR4TYyUAo08= X-Received: by 2002:a17:90a:d56:b0:2d6:1981:bbf7 with SMTP id 98e67ed59e1d1-2e8f11bad0emr42594178a91.32.1730913318340; Wed, 06 Nov 2024 09:15:18 -0800 (PST) MIME-Version: 1.0 References: <87ikt23aie.fsf@gnu.org> In-Reply-To: From: Evan Cooney Date: Wed, 6 Nov 2024 11:15:06 -0600 Message-ID: Subject: Re: Possible useful guix package performance data To: =?UTF-8?Q?Ludovic_Court=C3=A8s?= , "Thompson, David" , Evan Cooney , guix-devel Content-Type: multipart/alternative; boundary="0000000000007a1377062641a903" Received-SPF: pass client-ip=2607:f8b0:4864:20::1032; envelope-from=evancooney71@gmail.com; helo=mail-pj1-x1032.google.com X-Spam_score_int: -12 X-Spam_score: -1.3 X-Spam_bar: - X-Spam_report: (-1.3 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, PDS_BTC_ID=0.499, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: guix-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+larch=yhetil.org@gnu.org Sender: guix-devel-bounces+larch=yhetil.org@gnu.org X-Migadu-Country: US X-Migadu-Flow: FLOW_IN X-Migadu-Spam-Score: -5.42 X-Spam-Score: -5.42 X-Migadu-Queue-Id: 834851AE1D X-Migadu-Scanner: mx10.migadu.com X-TUID: KZC6PMyBCJoe --0000000000007a1377062641a903 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, This is amazingly helpful!! Thank you! On Tue, Nov 5, 2024, 9:34 AM Efraim Flashner wrote: > On Mon, Nov 04, 2024 at 11:22:01PM +0100, Ludovic Court=C3=A8s wrote: > > Hi, > > > > "Thompson, David" skribis: > > > > > What are you trying to measure, exactly? The data collected is about = a > > > single thread of a Guile process, but `guix package -i` involves > > > interaction with the Guix build daemon, waiting for downloads, etc. > > > These things are outside the scope of what statprof is tracing. > > > Anything that involves reaching out to the internet is going to make > > > for an unreliable benchmark. I'm not actively working on Guix tools > > > but I don't see anything immediately actionable from the collected > > > data. I think getting some more clarity around the goal is necessary > > > in order to know what to profile and how. > > > > Unless you=E2=80=99re specifically looking at performance of substitute= s, I > > recommend looking at profiles when using =E2=80=98--no-substitutes=E2= =80=99; I would > > also pass =E2=80=98--no-grafts=E2=80=99, to make sure you=E2=80=99re re= ally looking at the core > > of the whole package-to-derivation mechanism. > > > > You may also want to check the =E2=80=98GUIX_PROFILING=E2=80=99 environ= ment variable, > > from the (guix profiling) module. That can give a useful overview such > > as the number of remote procedure calls (RPCs) made to guix-daemon and > > the hit rate of the =E2=80=9Cobject cache=E2=80=9D: > > > > --8<---------------cut here---------------start------------->8--- > > $ GUIX_PROFILING=3D"gc rpc object-cache" guix build hello -d --no-graft= s > --no-substitutes > > /gnu/store/79dhya6sngg4rf53m1cyxlhn8y4pnw2n-hello-2.12.1.drv > > Object Cache: > > fresh caches: 16 > > lookups: 5042 > > hits: 4596 (91.2%) > > cache size: 445 entries > > Remote procedure call summary: 382 RPCs > > built-in-builders ... 1 > > add-to-store/tree ... 3 > > add-to-store ... 48 > > add-text-to-store ... 330 > > Garbage collection statistics: > > heap size: 72.27 MiB > > allocated: 100.29 MiB > > GC times: 13 > > time spent in GC: 0.42 seconds (45% of user time) > > --8<---------------cut here---------------end--------------->8--- > > > > Keep in mind that the figures we=E2=80=99re looking at here are largely > > dependent of the package graph being processed (that of =E2=80=98hello= =E2=80=99 here). > > So it also makes sense to look at the size of the package graph in > > question first (in the case of =E2=80=98hello=E2=80=99, it=E2=80=99s pr= obably fine, but let=E2=80=99s > > say when Rust packages are in the loop, the graph might be much bigger > > than needed/expected). > > Did someone say rust? > > I made a manifest of the packages that use the cargo-build-system and > aren't rust-* packages, or which have rust as an input. 102 packages: > > $ GUIX_PROFILING=3D"gc rpc object-cache" ./pre-inst-env guix build \ > --no-grafts -m ./etc/teams/rust/rusty-packages.scm \ > --no-substitutes -d > > Object Cache: > fresh caches: 20 > lookups: 361239 > hits: 351403 (97.3%) > cache size: 9835 entries > Remote procedure call summary: 11780 RPCs > built-in-builders ... 1 > add-to-store/tree ... 33 > add-to-store ... 329 > add-text-to-store ... 11417 > Garbage collection statistics: > heap size: 223.68 MiB > allocated: 1332.86 MiB > GC times: 34 > time spent in GC: 7.10 seconds (33% of user time) > > I also did a run with hello to get a comparison on the same machine: > > $ GUIX_PROFILING=3D"gc rpc object-cache" ./pre-inst-env guix build hello = -d > --no-grafts --no-substitutes > /gnu/store/1y2k2jkb8w67mcwj42b8bxjv3yshk5kf-hello-2.12.1.drv > Object Cache: > fresh caches: 16 > lookups: 5042 > hits: 4596 (91.2%) > cache size: 445 entries > Remote procedure call summary: 382 RPCs > built-in-builders ... 1 > add-to-store/tree ... 3 > add-to-store ... 48 > add-text-to-store ... 330 > Garbage collection statistics: > heap size: 79.57 MiB > allocated: 122.75 MiB > GC times: 14 > time spent in GC: 0.94 seconds (69% of user time) > > -- > Efraim Flashner =D7=90=D7=A4=D7=A8=D7=99=D7= =9D =D7=A4=D7=9C=D7=A9=D7=A0=D7=A8 > GPG key =3D A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 > Confidentiality cannot be guaranteed on emails sent or received unencrypt= ed > --0000000000007a1377062641a903 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

Hi,

This is amazingly helpful!! Thank you!


On Tue= , Nov 5, 2024, 9:34 AM Efraim Flashner <efraim@flashner.co.il> wrote:
On Mon, Nov 04, 2024 at 11:22:01PM +0100, Ludovic Court=C3=A8s w= rote:
> Hi,
>
> "Thompson, David" <dthompson2@worcester.edu>= skribis:
>
> > What are you trying to measure, exactly? The data collected is ab= out a
> > single thread of a Guile process, but `guix package -i` involves<= br> > > interaction with the Guix build daemon, waiting for downloads, et= c.
> > These things are outside the scope of what statprof is tracing. > > Anything that involves reaching out to the internet is going to m= ake
> > for an unreliable benchmark. I'm not actively working on Guix= tools
> > but I don't see anything immediately actionable from the coll= ected
> > data. I think getting some more clarity around the goal is necess= ary
> > in order to know what to profile and how.
>
> Unless you=E2=80=99re specifically looking at performance of substitut= es, I
> recommend looking at profiles when using =E2=80=98--no-substitutes=E2= =80=99; I would
> also pass =E2=80=98--no-grafts=E2=80=99, to make sure you=E2=80=99re r= eally looking at the core
> of the whole package-to-derivation mechanism.
>
> You may also want to check the =E2=80=98GUIX_PROFILING=E2=80=99 enviro= nment variable,
> from the (guix profiling) module.=C2=A0 That can give a useful overvie= w such
> as the number of remote procedure calls (RPCs) made to guix-daemon and=
> the hit rate of the =E2=80=9Cobject cache=E2=80=9D:
>
> --8<---------------cut here---------------start------------->8--= -
> $ GUIX_PROFILING=3D"gc rpc object-cache" guix build hello -d= --no-grafts --no-substitutes
> /gnu/store/79dhya6sngg4rf53m1cyxlhn8y4pnw2n-hello-2.12.1.drv
> Object Cache:
>=C2=A0 =C2=A0fresh caches:=C2=A0 =C2=A0 16
>=C2=A0 =C2=A0lookups:=C2=A0 =C2=A0 =C2=A0 =C2=A05042
>=C2=A0 =C2=A0hits:=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 4596 (91.2%)
>=C2=A0 =C2=A0cache size:=C2=A0 =C2=A0 =C2=A0445 entries
> Remote procedure call summary: 382 RPCs
>=C2=A0 =C2=A0built-in-builders=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 ...=C2=A0 =C2=A0 =C2=A01
>=C2=A0 =C2=A0add-to-store/tree=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 ...=C2=A0 =C2=A0 =C2=A03
>=C2=A0 =C2=A0add-to-store=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0...=C2=A0 =C2=A0 48
>=C2=A0 =C2=A0add-text-to-store=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 ...=C2=A0 =C2=A0330
> Garbage collection statistics:
>=C2=A0 =C2=A0heap size:=C2=A0 =C2=A0 =C2=A0 =C2=A0 72.27 MiB
>=C2=A0 =C2=A0allocated:=C2=A0 =C2=A0 =C2=A0 =C2=A0 100.29 MiB
>=C2=A0 =C2=A0GC times:=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A013
>=C2=A0 =C2=A0time spent in GC: 0.42 seconds (45% of user time)
> --8<---------------cut here---------------end--------------->8--= -
>
> Keep in mind that the figures we=E2=80=99re looking at here are largel= y
> dependent of the package graph being processed (that of =E2=80=98hello= =E2=80=99 here).
> So it also makes sense to look at the size of the package graph in
> question first (in the case of =E2=80=98hello=E2=80=99, it=E2=80=99s p= robably fine, but let=E2=80=99s
> say when Rust packages are in the loop, the graph might be much bigger=
> than needed/expected).

Did someone say rust?

I made a manifest of the packages that use the cargo-build-system and
aren't rust-* packages, or which have rust as an input. 102 packages:
$ GUIX_PROFILING=3D"gc rpc object-cache" ./pre-inst-env guix buil= d \
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --no-grafts -m ./etc/teams/rust/rusty-packages.= scm \
=C2=A0 =C2=A0 =C2=A0 =C2=A0 --no-substitutes -d

Object Cache:
=C2=A0 fresh caches:=C2=A0 =C2=A0 20
=C2=A0 lookups:=C2=A0 =C2=A0 =C2=A0 361239
=C2=A0 hits:=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0351403 (97.3%)
=C2=A0 cache size:=C2=A0 =C2=A0 9835 entries
Remote procedure call summary: 11780 RPCs
=C2=A0 built-in-builders=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ..= .=C2=A0 =C2=A0 =C2=A01
=C2=A0 add-to-store/tree=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ..= .=C2=A0 =C2=A0 33
=C2=A0 add-to-store=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0...=C2=A0 =C2=A0329
=C2=A0 add-text-to-store=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ..= . 11417
Garbage collection statistics:
=C2=A0 heap size:=C2=A0 =C2=A0 =C2=A0 =C2=A0 223.68 MiB
=C2=A0 allocated:=C2=A0 =C2=A0 =C2=A0 =C2=A0 1332.86 MiB
=C2=A0 GC times:=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A034
=C2=A0 time spent in GC: 7.10 seconds (33% of user time)

I also did a run with hello to get a comparison on the same machine:

$ GUIX_PROFILING=3D"gc rpc object-cache" ./pre-inst-env guix buil= d hello -d --no-grafts --no-substitutes
/gnu/store/1y2k2jkb8w67mcwj42b8bxjv3yshk5kf-hello-2.12.1.drv
Object Cache:
=C2=A0 fresh caches:=C2=A0 =C2=A0 16
=C2=A0 lookups:=C2=A0 =C2=A0 =C2=A0 =C2=A05042
=C2=A0 hits:=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 4596 (91.2%)
=C2=A0 cache size:=C2=A0 =C2=A0 =C2=A0445 entries
Remote procedure call summary: 382 RPCs
=C2=A0 built-in-builders=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ..= .=C2=A0 =C2=A0 =C2=A01
=C2=A0 add-to-store/tree=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ..= .=C2=A0 =C2=A0 =C2=A03
=C2=A0 add-to-store=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0...=C2=A0 =C2=A0 48
=C2=A0 add-text-to-store=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ..= .=C2=A0 =C2=A0330
Garbage collection statistics:
=C2=A0 heap size:=C2=A0 =C2=A0 =C2=A0 =C2=A0 79.57 MiB
=C2=A0 allocated:=C2=A0 =C2=A0 =C2=A0 =C2=A0 122.75 MiB
=C2=A0 GC times:=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A014
=C2=A0 time spent in GC: 0.94 seconds (69% of user time)

--
Efraim Flashner=C2=A0 =C2=A0<efraim@flashner.co.il>=C2=A0 =C2= =A0=D7=90=D7=A4=D7=A8=D7=99=D7=9D =D7=A4=D7=9C=D7=A9=D7=A0=D7=A8
GPG key =3D A28B F40C 3E55 1372 662D=C2=A0 14F7 41AA E7DC CA3D 8351
Confidentiality cannot be guaranteed on emails sent or received unencrypted=
--0000000000007a1377062641a903--