On Jun 12, 2009, at 8:55 AM, Russel Winder wrote:
> On Thu, 2009-06-11 at 08:54 +0200, Hans Dockter wrote:
> [ . . . ]
>>> gradle clean libs ~ 12s
>>> mvn clean package ~ 8s
>>>
>>> gradle libs ~ 10 - 20s (This one varied quite a bit while testing)
>>> mvn package ~ 5s
>
>
> The following is not an experiment as such just a summary of a few
> data
> points (so more than just one run taken at random).
>
> For my ADS library (which is pure Java with TestNG) on my 3GHz P4 with
> NFS mounted filestore, I find:
>
> "gradle clean" of a fully built project ~ 4--6s
> "mvn clean" of a fully built project ~ 4--5s
>
> "gradle clean" of an already clean project ~ 4--4.5s
> "mvn clean" of an already clean project ~ 1--2s
>
> "gradle -i libs" from a cleaned stated ~ 15--23s
> "mvn package" from a cleaned state ~ 13--15s
>
> "gradle -i libs" of an already built project ~ 8.5--10.5s
> "mvn package" of an already built project ~ 6--7s
>
> This is the time reported by the application and is clearly only
> partially related to the time it actually takes from issuing the
> command
> to getting the next prompt. A full experiment would measure reported
> time and actual operating system recorded time.
>
> So overall the impression that Gradle is a bit slower than Maven is
> backed up, at least for this project in its current state.
>
> I have long ago deleted the Ant and Gant builds so I cannot compare
> those.
>
> [ . . . ]
>
>> The performance of a build tool has a couple of aspects. One is its
>> execution efficiency. The other is its smartness in not doing
>> unnecessary actions.
>
> True but in what situations is this an issue? Given the indicators
> above, Gradle is still only just keeping up with Maven for a
> straightforward, pure Java project of relatively small size.
Those numbers above don't say anything about how well Gradle scales in
comparison with Maven regarding multi-project builds.
>
>> I don't think there are major usability issues with Gradle's
>> execution
>> efficiency. On the other hand we haven't focused on optimizing that
>> in
>> the last releases. I was doing some profiling recently and found a
>> significant inefficiency in some areas were we use reflection. The
>> fix
>> is now in trunk and has a very nice impact on the performance.
>
> Gradle's performance is definitely in the "not bad" category, it is
> perfectly usable. However, it does appear to be slower than Maven for
> the cases I use it for, which is sad.
>
>> I use the Apache Abdera project (which is a 28 projects multi-project
>> build) as my guinea pig project for comparisons.
>>
>> gradle clean libs -Dskip.test takes 15 seconds on my machine. (Gradle
>> trunk)
>> mvn clean package -o takes 20 seconds. (Maven 2.1)
>>
>> gradle libs -Dskip.test takes 7 seconds on my machine. (Gradle trunk)
>> mvn package -o takes 9 seconds. (Maven 2.1)
>
> I don't know whether the -Dskip.test actually makes a difference to
> the
> Gradle run or the -o to the Maven run, but it is clear that the Gradle
> run is not directly analogous to the Maven run so this data point
> could
> be undermined.
I did a mistake above. The maven command I was actually using is:
mvn -Dmaven.test.skip=true clean package -o
The -o prevents Maven from doing any snapshot lookup thus improves its
performance.
So those runs are analogous.
>
>> So this is looking very good I think. There are more optimizations
>> that can be done to improve execution efficiency. We definitely need
>> to figure out why the testing takes so much longer than with Ant. Its
>> funny that Maven has the same problem.
>>
>> Another area were we want to improve Gradle in not doing unnecessary
>> stuff. Having a good change detection and act on this accordingly,
>> etc ....
>
> I must reiterate that I don't think Gradle has a performance problem
> per
> se, but I do think it would be better if we can get Gradle performing
> faster than Maven in real use projects and workflows -- as opposed to
> benchmarking. It would be good to be faster in benchmarking as well
> of
> course :-)
>
>>> (2) maybe Gradle just has a slow startup time and with bigger
>>> projects it's not an issue, (3) maybe I'm doing/not doing something
>>> that is making the build slower.
>>>
>>> I obviously didn't do any detailed test, but I did notice that in my
>>> small build the steps that seem to take the most time are the
>>> initial startup, the test task, and the jar task.
>
> I suspect there is a Groovy startup cost. I have no data points to
> back
> up this opinion, but at every turn Groovy execution tends to show a
> startup cost over Java execution.
>
>>> How do I tell Gradle to fork once for the tests instead of the
>>> default per test forking?
>>
>> test {
>> options.fork(forkMode: ForkMode.ONCE)
>> }
>>
>> or
>>
>> test.options.fork(forkMode: ForkMode.ONCE)
>
> Is this true for TestNG tests or just JUnit tests?
>
> I suspect not since my project adding this line leads to:
>
> Cause: No signature of method: groovy.xml.MarkupBuilder.fork() is
> applicable for argument types: (java.util.LinkedHashMap) values:
> {["forkMode":once]}
Jira please :)
Thanks
- Hans
--
Hans Dockter
Gradle Project Manager
http://www.gradle.org---------------------------------------------------------------------
To unsubscribe from this list, please visit:
http://xircles.codehaus.org/manage_email