Bug#877418: dh-strip-nondeterminism: kills clojure performance

2017-10-02 Thread Rob Browning
Chris Lamb  writes:

> Chris Lamb wrote:
>
>> > I noticed that Debian's clojure-1.8.0.jar had terrible performance as
>> > compared to both the upstream jar
>> 
>> Oh boy, this sounds fun!
>
> There's no obvious reason at this point why this performance regression is
> limited to Clojure, unless — hopefully — it's related to the .clj files?
>
> ie. this could be affecting the performance of all Java applications
> in Debian (!)

I wondered if Clojure might be trying to be clever there, and...

  
https://stackoverflow.com/questions/19594360/preserving-timestamps-on-clojure-clj-files-when-building-shaded-jar-via-maven-s

So maybe if you ensure the class files are newer than the .clj files?

Thanks for the help
-- 
Rob Browning
rlb @defaultvalue.org and @debian.org
GPG as of 2011-07-10 E6A9 DA3C C9FD 1FF8 C676 D2C4 C0F0 39E9 ED1B 597A
GPG as of 2002-11-03 14DD 432F AE39 534D B592 F9A0 25C8 D377 8C7E 73A4

___
Reproducible-builds mailing list
Reproducible-builds@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/reproducible-builds

Разнообразете сексуалният си живот! Изненадайте вашата половинка с продуктите на Еротичен магазин Sexsale.bg!

2017-10-02 Thread Еротичен магазин Sеxsаlе.bg









Разнообразете сексуалният си
живот с продуктите на Еротичен
магазин Sexsale.bg!Изненадайте вашата
половинка, като и подарите незабравим
секси подарък от Еротичен
магазин Sexsale.bgПри нас ще намерите голямото
разнообразие от вибратори, дилда, еротично бельо , секс стимуланти , козметика, задържащи спрейове , вибро-комплекти, пенис помпи за уголемяване , кукли, вагини и мастурбатори , както и много други
еротични продукти на най-добрите цени.Бърза и дискретна доставка в цялата
страна! За поръчки над 35 лв тя е
безплатна.Sex Shop OUTLET с намаления до - 60%Луксозни секс играчки за
ценители можете да видите ТУК.www.sexsale.bg







   

Съгласно
закона за електронна търговия Чл. 6, ал. 1
Ви уведомяваме, че е възможно това да е
непоискано търговско съобщение. То е
еднократно изпратено писмо до Вашия e-mail
адрес, който е взет от публичното
пространство. Извиняваме се за
причиненото неудобство, ако сме Ви
притеснили с нашето предложение. Ако не желаете да
получавате съобщения от Sexsale ,
моля
натиснете тук!





___
Reproducible-builds mailing list
Reproducible-builds@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/reproducible-builds

Bug#877418: dh-strip-nondeterminism: kills clojure performance

2017-10-02 Thread Emmanuel Bourg
On Mon, 02 Oct 2017 12:00:36 +0100 Chris Lamb  wrote:

> There's no obvious reason at this point why this performance regression is
> limited to Clojure, unless — hopefully — it's related to the .clj files?
> 
> ie. this could be affecting the performance of all Java applications
> in Debian (!)

Hey having fun with a Java puzzle and not telling the Java Team? That's
mean ;)

I quickly investigated this, it looks like the .clj files bundled in
clojure.jar are recompiled every time clojure is invoked if the jar was
processed by strip-nondeterminism. My guess was that the .clj files are
recompiled if the associated .class file is older, but it also happens
if they have the same date. I eventually found this check performed in
the load() method of RT.java:

  if((classURL != null &&
  (cljURL == null
 || lastModified(classURL, classfile) > lastModified(cljURL,
scriptfile)))

Changing '>' with '>=' fixes the issue.

Emmanuel Bourg

___
Reproducible-builds mailing list
Reproducible-builds@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/reproducible-builds

Please review the draft for week 127's blog post

2017-10-02 Thread Ximin Luo
Hi all,

This week's blog post draft is now available for review:

https://reproducible.alioth.debian.org/blog/drafts/127/

Feel free to commit fixes directly to drafts/127.mdwn in

https://anonscm.debian.org/git/reproducible/blog.git/

I'll wait at least 24 hours from the time of this email for any comments, and 
if everything is good then I will publish it soon after that.

X

-- 
GPG: ed25519/56034877E1F87C35
GPG: rsa4096/1318EFAC5FBBDBCE
https://github.com/infinity0/pubkeys.git

___
Reproducible-builds mailing list
Reproducible-builds@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/reproducible-builds


Bug#877418: dh-strip-nondeterminism: kills clojure performance

2017-10-02 Thread Chris Lamb
tags 877418 + confirmed
thanks

Hi Rob,

> I noticed that Debian's clojure-1.8.0.jar had terrible performance as
> compared to both the upstream jar

Oh boy, this sounds fun!

I can confirm it is due to strip-nondeterminism. In particular, the
part that sets the last modified date of the .jar contents (!):

  --- a/lib/File/StripNondeterminism/handlers/zip.pm
  +++ b/lib/File/StripNondeterminism/handlers/zip.pm
  @@ -198,8 +198,6 @@ sub normalize {
$zip->addMember($member);
$options{member_normalizer}->($member)
  if exists $options{member_normalizer};
  - $member->setLastModFileDateTimeFromUnix(
  - $File::StripNondeterminism::canonical_time // 
SAFE_EPOCH);
if ($member->fileAttributeFormat() == FA_UNIX) {
$member->unixFileAttributes(
($member->unixFileAttributes() & oct(100))

Applying this hunk removes the observed performance regression entirely,
despite it altering the .jar (different sha1sum, etc.).

What might be a useful/relevant detail here is that if I apply the following
diff, *clamping* the time rather than always setting it:

  --- a/lib/File/StripNondeterminism/handlers/zip.pm
  +++ b/lib/File/StripNondeterminism/handlers/zip.pm
  @@ -198,8 +198,9 @@ sub normalize {
$zip->addMember($member);
$options{member_normalizer}->($member)
  if exists $options{member_normalizer};
  - $member->setLastModFileDateTimeFromUnix(
  - $File::StripNondeterminism::canonical_time // 
SAFE_EPOCH);
  + my $canonical_time = $File::StripNondeterminism::canonical_time 
// SAFE_EPOCH;
  + $member->setLastModFileDateTimeFromUnix($canonical_time)
  +   if $member->lastModTime() > $canonical_time;
if ($member->fileAttributeFormat() == FA_UNIX) {
$member->unixFileAttributes(
($member->unixFileAttributes() & oct(100))

… I get about a 25% performance regression:

 1.23s user 0.06s system 191% cpu 0.673 total
 2.08s user 0.09s system 231% cpu 0.940 total

Also, setting $canonical_time far in the future results in zero
performance regression again.

This makes no sense whatsoever unless, perhaps, Java is ignoring .class
files at runtime based on their modification date compared to the current
time...?


Regards,

-- 
  ,''`.
 : :'  : Chris Lamb
 `. `'`  la...@debian.org / chris-lamb.co.uk
   `-

___
Reproducible-builds mailing list
Reproducible-builds@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/reproducible-builds