db16f2a0a71503fe046e41fb8d249a1a25e0658e |
|
05-Aug-2016 |
Mathieu Chartier <mathieuc@google.com> |
Card mark holding class instead of declaring class For profiling info, we need to mark the card of the holding class instead of declaring class. This is required for GC correctness since the GC relies on the card table to track cross space references. Test: test-art-host ART_TEST_JIT=true Bug: 30655270 (cherry picked from commit 65975776f807d55c83af6cca1e447f8daa794413) Change-Id: I3de518693d3cac1ad9770eae671db740ebdf1d8d
|
7982f347f5a32db79a0bf03354857a9f7f1f1948 |
|
15-Apr-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Properly initialize the is_osr_method_being_compiled_ flag. bug:27939339 Change-Id: I0a8bf42f97aff95cad9ebdbe788b868c3f2f5233
|
454b3b6774fe07765273b917ccc97da2eba776ac |
|
07-Apr-2016 |
buzbee <buzbee@google.com> |
ART: Fix race in on-stack replacement The expected sequence of events for on-stack replacement is: 1. Method goes warm, triggering enhanced profiling 2. Method goes hot, triggering method compilation 3. Method goes really hot, triggering an osr method compilation. 4. Interpreter polls for the existence of an osr entry point, and transitons to compiled code if found. We have a race problem if #2 and #3 happen closely together, and the osr method compilation begins before the regular method compilation. In that case, the jit sees that the method is already being compiled (the osr method - but it does not distinguish the two), and discards the normal compilation request. So, the osr version is compiled and the normal version is discarded. In #4, the MaybeDoOnStackReplacement() check assumes that a normal version of the compiled method must exist before doing an on-stack replacement, so it keeps returning false. This is why we were seeing sporadic timeout failures of 570-checker-osr when the mterp fast branch profiling was introduced. The branch profiling performance enhancements greatly reduced the time between #2 and #3, increasing the liklihood of losing the race. Further, the new code clamped hotness to avoid wrap-around. The race existed (and likely occurred) in the previous version, but because hotness counters were allowed to overflow and wrap around you'd eventually hit the threshold a second time and try again - masking the problem. Tip 'o the hat to Serguei Katkov for identifying the problem. A possible solution (taken in this CL) is to differentiate osr compilations from normal method compilations. Bug: 27939339 Change-Id: I71044516b35dc69de9fc2d2a445e33809ac650ed
|
07e3ca9a46801990d662c48d0fddedc63c4c053c |
|
11-Mar-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Fix thread race when fetching the ProfilingInfo object. Problem is: 1) Compiler fetches the ProfilingInfo of A, it's null. 2) Mutator creates the ProfilingInfo. 3) Compiler notifies it's not using A anymore, calls ProfilingInfo::DecrementInlineUse -> Crash as we expected ProfilingInfo::IncrementUse to be called before. Also update some namings to better reflect what is going on. Change-Id: I55ea4c5d81988131467095e18a0d13a8be9d0ef7
|
b6e20ae17d0881a66c22532e4152ce6779454a92 |
|
07-Mar-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Clear inline caches at each full GC. This fixes occasional failures of 141-class-unload. Also fix a bug where clearing inline caches also cleared the dex pc associated with it. bug:26846185 bug:23128949 Change-Id: I77bf1dee229d7764c3cc21440829c7fba7b37001
|
67e4f81b232150605cbba03d0818313737b904d3 |
|
02-Mar-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Clear inline caches if a ProfilingInfo gets revived. This avoids stalled class references. Bug: 27398183 Bug: 23128949 Bug: 26846185 (cherry picked from commit 511e41b4ec2d378a5c434598ebd0b3d6136fff9d) Change-Id: I5e33496859e65456d185cc09ca12736dd6414d77
|
af3f5e0136277bd0c01e7e2b7c4797c63ecddca6 |
|
02-Mar-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Revert "Use the interpreter as a heartbeat for the JIT."" Bug: 27398183 Bug: 23128949 Bug: 26846185 This reverts commit a96917a6983a5abbe973255a3846fda549fb1657. (cherry picked from commit 35122443e5f8606cc5a660ac32745a06aefb341b) Change-Id: Ib02401c76bf28e1aac6bbce01f97ddd0373c1ba5
|
511e41b4ec2d378a5c434598ebd0b3d6136fff9d |
|
02-Mar-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Clear inline caches if a ProfilingInfo gets revived. This avoids stalled class references. Bug: 27398183 Bug: 23128949 Bug: 26846185 Change-Id: I9539215241708e26fef887e02201ce1feabc2d1a
|
35122443e5f8606cc5a660ac32745a06aefb341b |
|
02-Mar-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Revert "Use the interpreter as a heartbeat for the JIT."" Bug: 27398183 Bug: 23128949 Bug: 26846185 This reverts commit a96917a6983a5abbe973255a3846fda549fb1657. Change-Id: I5c4f0d87d3293a6a7ab56a33396670704b66a347
|
a96917a6983a5abbe973255a3846fda549fb1657 |
|
01-Mar-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Revert "Use the interpreter as a heartbeat for the JIT." Hits a DCHECK testing libcore. art F 11973 12675 art/runtime/jit/jit_code_cache.cc:644] Check failed: it.second->GetProfilingInfo(sizeof(void*)) != nullptr Bug: 27398183 Bug: 23128949 Bug: 26846185 This reverts commit 7273a5d045d3ceb3ff011ad65765356b69b155e8. Change-Id: I6614a82e775ea71aa16f041313f67546db41eac8
|
7273a5d045d3ceb3ff011ad65765356b69b155e8 |
|
29-Feb-2016 |
Nicolas Geoffray <ngeoffray@google.com> |
Use the interpreter as a heartbeat for the JIT. When doing a partial code cache collection, update all entrypoints to interpreter, so that the next full collection will remove code that wasn't executed during that window. bug:27398183 bug:23128949 bug:26846185 Change-Id: I4423f5c4810dac183dc8973078bf218818745e80
|
a42363f79832a6e14f348514664dc6dc3edf9da2 |
|
17-Dec-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Implement first kind of polymorphic inlining. Add HClassTableGet to fetch an ArtMethod from the vtable or imt, and compare it to the only method the profiling saw. Change-Id: I76afd3689178f10e3be048aa3ac9a97c6f63295d
|
73be1e8f8609708f6624bb297c9628de44fd8b6f |
|
17-Sep-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Inline monomorphic calls. Change-Id: If38171c2dc7d4a4378df5d050afc4fff4499c98f
|
26705e2b1245b65989a0341b24c5dbf2658d4bb6 |
|
28-Oct-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Add support for collection ProfilingInfo objects. Change-Id: I8bb6069530253a7372acdf2b5aee71e1de644822
|
1dad3f68b7f5a4a4cb2b281413357adc2309a8fd |
|
23-Oct-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Support garbage collection of JITted code. Change-Id: I9afc544460ae4fb31149644b6196ac7f5182c784
|
5550ca8bcc742b109d77e62f3a0877c667d894d3 |
|
21-Aug-2015 |
Nicolas Geoffray <ngeoffray@google.com> |
Record profiling information before Jitting. - Add a new instrumentation kind to record dynamic invokes. - Use the JNI entry point field to store the profiling data. - Record seen receivers for every dynamic invoke. Change-Id: I2c1738ab2a72052d45964d055dc16b44b906e54c
|