RFR: 8143157: Convert TraceVMOperation to Unified Logging

Max Ockner max.ockner at oracle.com
Wed Nov 18 17:32:34 UTC 2015


I think the issue is that doit() happens regardless of what is being 
logged. I don't think we can reorder the logging statements relative to 
doit(). In that case, we would be forced to split into 2 conditionals 
for the logging.

Still I don't think it is necessary to call log_is_enabled twice, and  I 
don't think it is necessary to always define the outputStream. If this 
turns out to be a problem, we could flip things around a bit:

   void VM_Operation::evaluate() {
     ResourceMark rm;
!   bool enabled = false;
!   if (log_is_enabled(Debug, vmoperation)) {
!     outputStream* debugstream = LogHandle(vmoperation)::debug_stream();
!     enabled = true;
!   if (enabled) {
!     print_on_error(debugstream);
!     debugstream->cr();
     }
     doit();
!   if (enabled) {
!     print_on_error(debugstream);
!     debugstream->print_cr("]");
     }
   }

There really is nothing quite like typing code into an editor with 
misaligned columns.
Anyway, the change looks pretty good to me.
-Max

On 11/18/2015 4:22 AM, David Holmes wrote:
> Hi Rachel,
>
> On 18/11/2015 5:50 AM, Rachel Protacio wrote:
>> Hi,
>>
>> Please review the following small logging enhancement.
>>
>> Summary: The former -XX:+TraceVMOperation flag is updated to the unified
>> logging framework and is now replaced with -Xlog:vmoperation in product
>> mode.
>>
>> Open webrev: http://cr.openjdk.java.net/~rprotacio/8143157/
>> Bug: https://bugs.openjdk.java.net/browse/JDK-8143157
>> Testing: Passes jtreg, JPRT, RBT quick tests, and refworkload
>> performance tests.
>
> Meta-question: the logging framework is safe to be called when at a 
> safepoint isn't it?
>
> ---
>
> src/share/vm/runtime/vm_operations.cpp
>
>   void VM_Operation::evaluate() {
>     ResourceMark rm;
> !   outputStream* debugstream = LogHandle(vmoperation)::debug_stream();
> !   if (log_is_enabled(Debug, vmoperation)) {
> !     debugstream->print("[");
> !     print_on_error(debugstream);
> !     debugstream->cr();
>     }
>     doit();
> !   if (log_is_enabled(Debug, vmoperation)) {
> !     print_on_error(debugstream);
> !     debugstream->print_cr("]");
>     }
>   }
>
> Why are you calling print_on_error twice?
>
> Why is the only logging level for this tag the "debug" level? I think 
> I may be missing part of the way UL works here - can you enable 
> logging both by explicit tag (ie vmoperation) and the level (ie debug)?
>
> And I know I sound like a broken record but I'm concerned about the 
> overhead of the logging actions when it is not enabled ie:
>
> outputStream* debugstream = LogHandle(vmoperation)::debug_stream();
>
> always gets executed - and we evaluate is_enabled twice.
>
> ---
>
> test/runtime/logging/VMOperationTestMain.java
>
> Can you add a comment explaining what the logic is attempting to do 
> please. I'm curious how many times the loop executes before you get a 
> safepoint-based GC (and how it varies for different GC's).
>
> Style nit: while(  -> while (
>
>> A compatability request has been accepted with regard to this change.
>
> I'll record my objections again to the conversion of develop flags to 
> product. <sigh>
>
> Thanks,
> David
>
>> Thank you very much,
>> Rachel



More information about the hotspot-runtime-dev mailing list