[lttng-dev] [PATCH lttng-tool] Mi & save/load: add option to indent or not on config writer creation
Jonathan Rajotte-Julien
jonathan.rajotte-julien at ericsson.com
Wed Aug 6 14:40:31 EDT 2014
Hey,
Here by client I refer about end user MI client like TMF(Trace Compass).
Take the later case. Where a pretty MI output impose drastic performance problem.
Some of the problems are internal to TMF but inherent to how java parse XML (in compliance with the XML specification). This patch aim to feed a client with a minify (web buzzword reference Yay!) XML to minimize the need of manipulation on the client side.
The benchmark are currently from TMF and for the interpretation/parsing of lttng list -k. In java \t \n and any whitespace between node are considered node... so parsing become quite heavy.
Here some graphs: See attached document or here http://imgur.com/Wn78rJV
We can see that even if the problem is how we do it in TMF a minify MI is always better and by far when parsing.
We can also compare it to normal output parsing (via regexp) which TMF currently use. There seem to have little gain compare to the text version. The gain is simply simplicity. The use of regexp is limited(*for must of us) and cumbersome.
I tried to see if other utility such as xmllint where affected by whitespace etc. but the difference seems minimal.
If a developer need a prettify version of MI output they can use lttng <mi_command> | xmllint --format -
Cheers,
Jonathan
On 08/06/2014 10:49 AM, Simon Marchi wrote:
> On 6 August 2014 10:13, Jonathan Rajotte Julien
> <jonathan.r.julien at gmail.com> wrote:
>> The presence of tabulation and newline in mi is irrelevant and
>> can impact client performance. The parsing & processing of a lot of data from mi
>> with many /t and /n impact performance. This aim to fix the problem at the
>> source. Style is useless for machine.
>
> Just by curiosity, did you manage to put a number on that performance impact?
>
>> Signed-off-by: Jonathan Rajotte Julien <jonathan.r.julien at gmail.com>
>> ---
>> src/bin/lttng-sessiond/save.c | 2 +-
>> src/common/config/config.c | 8 ++++----
>> src/common/config/config.h | 5 ++++-
>> src/common/mi-lttng.c | 2 +-
>> 4 files changed, 10 insertions(+), 7 deletions(-)
>>
>> diff --git a/src/bin/lttng-sessiond/save.c b/src/bin/lttng-sessiond/save.c
>> index 90b3a3b..28844e3 100644
>> --- a/src/bin/lttng-sessiond/save.c
>> +++ b/src/bin/lttng-sessiond/save.c
>> @@ -1514,7 +1514,7 @@ int save_session(struct ltt_session *session,
>> }
>> file_opened = 1;
>>
>> - writer = config_writer_create(fd);
>> + writer = config_writer_create(fd, 1);
>> if (!writer) {
>> ret = LTTNG_ERR_NOMEM;
>> goto end;
>> diff --git a/src/common/config/config.c b/src/common/config/config.c
>> index bfb2576..1dccd26 100644
>> --- a/src/common/config/config.c
>> +++ b/src/common/config/config.c
>> @@ -353,7 +353,7 @@ end:
>> }
>>
>> LTTNG_HIDDEN
>> -struct config_writer *config_writer_create(int fd_output)
>> +struct config_writer *config_writer_create(int fd_output, int indent)
>> {
>> int ret;
>> struct config_writer *writer;
>> @@ -379,12 +379,12 @@ struct config_writer *config_writer_create(int fd_output)
>>
>> ret = xmlTextWriterSetIndentString(writer->writer,
>> BAD_CAST config_xml_indent_string);
>> - if (ret) {
>> + if (ret) {
>> goto error_destroy;
>> }
>>
>> - ret = xmlTextWriterSetIndent(writer->writer, 1);
>> - if (ret) {
>> + ret = xmlTextWriterSetIndent(writer->writer, indent);
>> + if (ret) {
>> goto error_destroy;
>> }
>>
>> diff --git a/src/common/config/config.h b/src/common/config/config.h
>> index 9a5671a..2fed612 100644
>> --- a/src/common/config/config.h
>> +++ b/src/common/config/config.h
>> @@ -81,11 +81,14 @@ int config_parse_value(const char *value);
>> * fd_output File to which the XML content must be written. The file will be
>> * closed once the config_writer has been destroyed.
>> *
>> + * indent If other than 0 the XML will be pretty printed
>> + * with indentation and newline.
>> + *
>> * Returns an instance of a configuration writer on success, NULL on
>> * error.
>> */
>> LTTNG_HIDDEN
>> -struct config_writer *config_writer_create(int fd_output);
>> +struct config_writer *config_writer_create(int fd_output, int indent);
>>
>> /*
>> * Destroy an instance of a configuration writer.
>> diff --git a/src/common/mi-lttng.c b/src/common/mi-lttng.c
>> index a636c71..31fa610 100644
>> --- a/src/common/mi-lttng.c
>> +++ b/src/common/mi-lttng.c
>> @@ -352,7 +352,7 @@ struct mi_writer *mi_lttng_writer_create(int fd_output, int mi_output_type)
>> goto end;
>> }
>> if (mi_output_type == LTTNG_MI_XML) {
>> - mi_writer->writer = config_writer_create(fd_output);
>> + mi_writer->writer = config_writer_create(fd_output, 0);
>> if (!mi_writer->writer) {
>> goto err_destroy;
>> }
>> --
>> 2.0.0
>>
>>
>> _______________________________________________
>> lttng-dev mailing list
>> lttng-dev at lists.lttng.org
>> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
>
> _______________________________________________
> lttng-dev mailing list
> lttng-dev at lists.lttng.org
> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: performanceMiMinify.ods
Type: application/vnd.oasis.opendocument.spreadsheet
Size: 30997 bytes
Desc: not available
URL: <http://lists.lttng.org/pipermail/lttng-dev/attachments/20140806/38504d11/attachment-0001.ods>
More information about the lttng-dev
mailing list