RFR: JDK-8150496,(zipfs) Fix performance issues in zip-fs

Xueming Shen xueming.shen at oracle.com
Tue May 3 20:19:00 UTC 2016


Hi Aleksey,

Again, thanks for the review. The webrev has been updated accordingly,
as well as the MyBenchmark.java (to use Blackhole, as suggested)

http://cr.openjdk.java.net/~sherman/8150496/webrev/
http://cr.openjdk.java.net/~sherman/8150496/MyBenchmark.java

-Sherman


On 05/03/2016 05:39 AM, Aleksey Shipilev wrote:
> Hi Sherman,
>
> On 05/03/2016 02:28 AM, Xueming Shen wrote:
>> Please help review the performance cleanup for zipfs
>>
>> issue: https://bugs.openjdk.java.net/browse/JDK-8150496
>> webrev: http://cr.openjdk.java.net/~sherman/8150496/webrev
> ZipFileSystem.java:
>
> *) These should be removed?
>
>   2032             //writeShort(os, name.length);
>   2033             writeShort(os, nlen);
>
>   2220             //writeShort(os, name.length);
>   2221             writeShort(os, nlen);
>
>   2591         //inodes.forEach( (k,v) ->  { System.out.printf(" %s  ->
> %s%n", new String(k.name), new String(v.name)); });
>
>   1080             /*
>   1081             byte[] name = Arrays.copyOfRange(cen, pos + CENHDR,
> pos + CENHDR + nlen);
>   1082             */
>
> *) There is ever-so-subtle difference in doing either:
>
>   171             byte[] tmp = new byte[path.length + 1];
>   172             System.arraycopy(path, 0, tmp, 1, path.length);
>   173             tmp[0] = '/';
>
> ...or:
>
> 1083             byte[] name = new byte[nlen + 1];
> 1084             name[0] = '/';
> 1085             System.arraycopy(cen, pos + CENHDR, name, 1, nlen);
>
> Excess op between allocation and arraycopy breaks zeroing elimination,
> see e.g.:
>    http://cr.openjdk.java.net/~shade/scratch/ZeroingFirstBench.java
>
>
> *) Missing braces:
>
> 1483                 if (e2 == null)
> 1484                     throw new ZipException("invalid loc for entry
> <" + e.name +">");
>
> *) Probably deserves a comment why these are commented out? Are these
> implied to be zeroes?
>
> 1713         // int  disknum;
> 1714         // int  sdisknum;
>
>
>> Here are the result of the sample benchmark that measures the improvement.
>> http://cr.openjdk.java.net/~sherman/8150496/MyBenchmark.java
> This benchmark is not very reliable:
>
>   *) Sink everything in Blackhole. I.e. instead of, say:
>
>      @Benchmark
>      public void ZFS_Open() throws IOException {
>          cnt = 0;
>          for (int i = 0; i<  100; i++) {
>              try (FileSystem fs = newFileSystem(path)) {
>                  if (Files.exists(fs.getPath(entriesS.get(0))))
> 		    cnt++;
>              }
>          }
>      }
>
> do:
>
>      @Benchmark
>      public void ZFS_Open(Blackhole bh) throws IOException {
>          for (int i = 0; i<  100; i++) {
>              try (FileSystem fs = newFileSystem(path)) {
>                  bh.consume(fs.getPath(entriesS.get(0)));
>              }
>          }
>      }
>
> This applies to all other methods.
>
> Thanks,
> -Aleksey
>




More information about the core-libs-dev mailing list