diff --git a/.classpath b/.classpath deleted file mode 100644 index 4a04201ca2839bf43ab901d599c311dafcc5754b..0000000000000000000000000000000000000000 --- a/.classpath +++ /dev/null @@ -1,6 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<classpath> - <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11/"/> - <classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer"/> - <classpathentry kind="output" path="bin/default"/> -</classpath> diff --git a/.gitignore b/.gitignore index 5c682b778d7efe85437303a7b2c435b55d01d4ab..dab7b95353ecc3addd50c5a1e3c914cc637743ac 100644 --- a/.gitignore +++ b/.gitignore @@ -2,13 +2,45 @@ # Ignore Gradle project-specific cache directory **/.gradle/** +.classpath +.settings **/.classpath **/.project **/.settings/** **/build/** **/bin/** -frameworks/Kieker/scripts/benchmark/ -frameworks/Kieker/scripts/data/ -frameworks/Kieker/scripts/kieker-*-aspectj.jar -frameworks/Kieker/scripts/receiver/ -frameworks/Kieker/scripts/results-kieker/ +frameworks/log_* +results/ +frameworks/Kieker/benchmark/ +frameworks/Kieker/data/ +frameworks/Kieker/MooBench.jar +frameworks/Kieker/kieker-*-aspectj.jar +frameworks/Kieker/receiver/ +frameworks/Kieker/results-Kieker/ +frameworks/Kieker/benchmark_* +frameworks/SPASSmeter/spassmeter.log +frameworks/SPASSmeter/tmp/ +frameworks/SPASSmeter/MooBench.jar +frameworks/inspectIT/inspectit.log +frameworks/inspectIT/MooBench.jar +frameworks/inspectIT/logs/ +frameworks/inspectIT/tmp/ +frameworks/inspectIT/zipkin/ +frameworks/inspectIT/configuration.txt +frameworks/inspectIT/results-inspectIT/ +frameworks/inspectIT/prometheus-2.28.1.linux-amd64/ +frameworks/OpenTelemetry/results-OpenTelemetry/ +frameworks/OpenTelemetry/tmp/ +frameworks/OpenTelemetry/*.txt +frameworks/OpenTelemetry/OpenTelemetry.log +frameworks/OpenTelemetry/MooBench.jar +frameworks/OpenTelemetry/zipkin/ +frameworks/OpenTelemetry/lib/ +frameworks/OpenTelemetry/jaeger-1.24.0-linux-amd64/ +frameworks/OpenTelemetry/prometheus-2.28.1.linux-amd64/ +frameworks/OpenTelemetry/prometheus-2.28.1.linux-amd64.tar.gz + +frameworks/Kieker/compile-results/ +tools/getConfidenceIntervalTable/*csv +/.gradle/ +/build/ diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 8341a87fe904e7d18a7ff290d3558f71f6c19932..0000000000000000000000000000000000000000 --- a/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,313 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=11 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=11 -org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines=2147483647 -org.eclipse.jdt.core.formatter.align_type_members_on_columns=false -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_assignment=0 -org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 -org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 -org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 -org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 -org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header=0 -org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 -org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 -org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references=0 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80 -org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 -org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 -org.eclipse.jdt.core.formatter.alignment_for_type_arguments=0 -org.eclipse.jdt.core.formatter.alignment_for_type_parameters=0 -org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch=16 -org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_after_package=1 -org.eclipse.jdt.core.formatter.blank_lines_before_field=0 -org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 -org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 -org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 -org.eclipse.jdt.core.formatter.blank_lines_before_method=1 -org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 -org.eclipse.jdt.core.formatter.blank_lines_before_package=0 -org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 -org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 -org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_lambda_body=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line -org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false -org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false -org.eclipse.jdt.core.formatter.comment.format_block_comments=true -org.eclipse.jdt.core.formatter.comment.format_header=false -org.eclipse.jdt.core.formatter.comment.format_html=true -org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true -org.eclipse.jdt.core.formatter.comment.format_line_comments=true -org.eclipse.jdt.core.formatter.comment.format_source_code=true -org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true -org.eclipse.jdt.core.formatter.comment.indent_root_tags=true -org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert -org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert -org.eclipse.jdt.core.formatter.comment.line_length=100 -org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true -org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true -org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments=false -org.eclipse.jdt.core.formatter.compact_else_if=true -org.eclipse.jdt.core.formatter.continuation_indentation=2 -org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=1 -org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off -org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on -org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false -org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true -org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true -org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_empty_lines=false -org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true -org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true -org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=false -org.eclipse.jdt.core.formatter.indentation.size=2 -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type=insert -org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=insert -org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=do not insert -org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert -org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert -org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert -org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert -org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert -org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try=insert -org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert -org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert -org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert -org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert -org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert -org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert -org.eclipse.jdt.core.formatter.join_lines_in_comments=false -org.eclipse.jdt.core.formatter.join_wrapped_lines=false -org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=false -org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false -org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false -org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=false -org.eclipse.jdt.core.formatter.lineSplit=100 -org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false -org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false -org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 -org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 -org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement=common_lines -org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause=common_lines -org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true -org.eclipse.jdt.core.formatter.tabulation.char=space -org.eclipse.jdt.core.formatter.tabulation.size=2 -org.eclipse.jdt.core.formatter.use_on_off_tags=false -org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false -org.eclipse.jdt.core.formatter.wrap_before_assignment_operator=false -org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true -org.eclipse.jdt.core.formatter.wrap_before_conditional_operator=true -org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true -org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true diff --git a/.settings/org.eclipse.jdt.ui.prefs b/.settings/org.eclipse.jdt.ui.prefs deleted file mode 100644 index 95fc2a88820bbb9ffab9b6c165fc4fa66eac643b..0000000000000000000000000000000000000000 --- a/.settings/org.eclipse.jdt.ui.prefs +++ /dev/null @@ -1,118 +0,0 @@ -cleanup.add_default_serial_version_id=true -cleanup.add_generated_serial_version_id=false -cleanup.add_missing_annotations=true -cleanup.add_missing_deprecated_annotations=true -cleanup.add_missing_methods=false -cleanup.add_missing_nls_tags=false -cleanup.add_missing_override_annotations=true -cleanup.add_missing_override_annotations_interface_methods=false -cleanup.add_serial_version_id=true -cleanup.always_use_blocks=true -cleanup.always_use_parentheses_in_expressions=true -cleanup.always_use_this_for_non_static_field_access=true -cleanup.always_use_this_for_non_static_method_access=true -cleanup.convert_functional_interfaces=false -cleanup.convert_to_enhanced_for_loop=true -cleanup.correct_indentation=true -cleanup.format_source_code=true -cleanup.format_source_code_changes_only=false -cleanup.insert_inferred_type_arguments=false -cleanup.make_local_variable_final=true -cleanup.make_parameters_final=true -cleanup.make_private_fields_final=true -cleanup.make_type_abstract_if_missing_method=false -cleanup.make_variable_declarations_final=true -cleanup.never_use_blocks=false -cleanup.never_use_parentheses_in_expressions=false -cleanup.organize_imports=true -cleanup.qualify_static_field_accesses_with_declaring_class=false -cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true -cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true -cleanup.qualify_static_member_accesses_with_declaring_class=true -cleanup.qualify_static_method_accesses_with_declaring_class=true -cleanup.remove_private_constructors=true -cleanup.remove_redundant_type_arguments=false -cleanup.remove_trailing_whitespaces=true -cleanup.remove_trailing_whitespaces_all=true -cleanup.remove_trailing_whitespaces_ignore_empty=false -cleanup.remove_unnecessary_casts=true -cleanup.remove_unnecessary_nls_tags=true -cleanup.remove_unused_imports=true -cleanup.remove_unused_local_variables=false -cleanup.remove_unused_private_fields=true -cleanup.remove_unused_private_members=false -cleanup.remove_unused_private_methods=true -cleanup.remove_unused_private_types=true -cleanup.sort_members=false -cleanup.sort_members_all=false -cleanup.use_anonymous_class_creation=false -cleanup.use_blocks=true -cleanup.use_blocks_only_for_return_and_throw=false -cleanup.use_lambda=true -cleanup.use_parentheses_in_expressions=true -cleanup.use_this_for_non_static_field_access=true -cleanup.use_this_for_non_static_field_access_only_if_necessary=false -cleanup.use_this_for_non_static_method_access=true -cleanup.use_this_for_non_static_method_access_only_if_necessary=false -cleanup_profile=_eclipse-cs MooBench -cleanup_settings_version=2 -eclipse.preferences.version=1 -editor_save_participant_org.eclipse.jdt.ui.postsavelistener.cleanup=true -formatter_profile=_eclipse-cs MooBench -formatter_settings_version=12 -org.eclipse.jdt.ui.ignorelowercasenames=true -org.eclipse.jdt.ui.importorder=java;javax;junit;org;com;mooBench;kieker;kieker.test; -org.eclipse.jdt.ui.ondemandthreshold=99 -org.eclipse.jdt.ui.staticondemandthreshold=99 -sp_cleanup.add_default_serial_version_id=true -sp_cleanup.add_generated_serial_version_id=false -sp_cleanup.add_missing_annotations=true -sp_cleanup.add_missing_deprecated_annotations=true -sp_cleanup.add_missing_methods=false -sp_cleanup.add_missing_nls_tags=false -sp_cleanup.add_missing_override_annotations=true -sp_cleanup.add_missing_override_annotations_interface_methods=false -sp_cleanup.add_serial_version_id=false -sp_cleanup.always_use_blocks=true -sp_cleanup.always_use_parentheses_in_expressions=true -sp_cleanup.always_use_this_for_non_static_field_access=true -sp_cleanup.always_use_this_for_non_static_method_access=true -sp_cleanup.convert_to_enhanced_for_loop=true -sp_cleanup.correct_indentation=true -sp_cleanup.format_source_code=true -sp_cleanup.format_source_code_changes_only=false -sp_cleanup.make_local_variable_final=true -sp_cleanup.make_parameters_final=true -sp_cleanup.make_private_fields_final=true -sp_cleanup.make_type_abstract_if_missing_method=false -sp_cleanup.make_variable_declarations_final=true -sp_cleanup.never_use_blocks=false -sp_cleanup.never_use_parentheses_in_expressions=false -sp_cleanup.on_save_use_additional_actions=true -sp_cleanup.organize_imports=true -sp_cleanup.qualify_static_field_accesses_with_declaring_class=false -sp_cleanup.qualify_static_member_accesses_through_instances_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_through_subtypes_with_declaring_class=true -sp_cleanup.qualify_static_member_accesses_with_declaring_class=true -sp_cleanup.qualify_static_method_accesses_with_declaring_class=true -sp_cleanup.remove_private_constructors=true -sp_cleanup.remove_trailing_whitespaces=true -sp_cleanup.remove_trailing_whitespaces_all=true -sp_cleanup.remove_trailing_whitespaces_ignore_empty=false -sp_cleanup.remove_unnecessary_casts=true -sp_cleanup.remove_unnecessary_nls_tags=true -sp_cleanup.remove_unused_imports=true -sp_cleanup.remove_unused_local_variables=false -sp_cleanup.remove_unused_private_fields=true -sp_cleanup.remove_unused_private_members=false -sp_cleanup.remove_unused_private_methods=true -sp_cleanup.remove_unused_private_types=true -sp_cleanup.sort_members=false -sp_cleanup.sort_members_all=false -sp_cleanup.use_blocks=true -sp_cleanup.use_blocks_only_for_return_and_throw=false -sp_cleanup.use_parentheses_in_expressions=true -sp_cleanup.use_this_for_non_static_field_access=true -sp_cleanup.use_this_for_non_static_field_access_only_if_necessary=false -sp_cleanup.use_this_for_non_static_method_access=true -sp_cleanup.use_this_for_non_static_method_access_only_if_necessary=false diff --git a/README b/README deleted file mode 100644 index 0b5f5304bbe8181e624cbfef420a704e32b7ce60..0000000000000000000000000000000000000000 --- a/README +++ /dev/null @@ -1,88 +0,0 @@ -The MooBench Monitoring Overhead Micro-Benchmark ------------------------------------------------------------------------- - -Website: http://kieker-monitoring.net/MooBench -Contact: moobench@notme.de - -The MooBench micro-benchmarks can be used to quantify the performance -overhead caused by monitoring framework components. - -Currenly (directly) supported monitoring frameworks include: -* Kieker (http://kieker-monitoring.net) -* inspectIT (http://inspectit.eu/) -* SPASS-meter (https://github.com/SSEHUB/spassMeter.git) - -An ant script (build.xml) is provided to prepare the benchmark for the -respective monitoring framwork. Corresponding build targets, providing -preconfigured builds for each supported framework, are available. -For instance, the target "build-kieker" prepares a jar for Kieker -benchmarking experiments. - -The relevant build targets are: -* build-all (framework independant benchmark) -* build-kieker (Kieker) -* build-inspectit (inspectIT) -* build-spassmeter (SPASS-meter) - -All experiments are started with the provided "External Controller" -scripts. These scripts are available inside the respective bin/ -directory. Currently only shell (.sh) scripts are provided. These -scripts have been developed on Solaris environments. Thus, minor -adjustments might be required for common Linux operatong systems, -such as Ubuntu. Additionally, several Eclipse launch targets are -provided for debugging purposes. - -The default execution of the benchmark requires a 64Bit JVM! -However, this behavior can be changed in the respective .sh scripts. - -Initially, the following steps are required: -1. You should check whether you installed ant (http://ant.apache.org/), - since the execution of all examples described in this - README is based on the run-targets in the ant file build.xml. -2. Make sure, that you've installed R (http://www.r-project.org/) to - generate the results. -3. Compile the application by calling ant with the appropriate build - target. - -Execution of the micro-benchmark: -All benchmarks are started with calls of .sh scripts in the bin folder. -The top of the files include some configuration parameters, such as -* SLEEPTIME between executions (default 30 seconds) -* NUM_LOOPS number of repetitions (default 10) -* THREADS concurrent benchmarking threads (default 1) -* MAXRECURSIONDEPTH recursion up to this depth (default 10) -* TOTALCALLS the duration of the benchmark (deafult 2,000,000 calls) -* METHODTIME the time per monitored call (default 0 ns or 500 us) - -Furthermore some JVM arguments can be adjusted: -* JAVAARGS JVM Arguments (e.g., available memory) - -Typical call (using Solaris): -$ nohup ./benchmark.sh & sleep 1;tail +0cf nohup.out - - -Analyzing the data: -=================== -In the folder /bin/r are some R scripts provided to generate graphs to -visualize the results. In the top the files, one can configure the -required paths and the configuration used to analyze the data. - - -(Outdated) Documentation of additional experiments: -=================================================== - -Different recursion depth (with MAXRECURSIONDEPTH=1 without recursion) --> bin/run-benchmark-recursive.sh - -To check for a linear rise in monitoring overhead, this benchmark -increases the recursion depth up to 2^MAXRECURSIONDEPTH in logarithmic -steps --> bin/run-benchmark-recursive-linear.sh - -Benchmarking the JMX-writer --> bin/run-benchmark-recursive-jmx.sh - -The experiments run-cycle*.sh and their used files -run-benchmark-cycle-*.sh are currently only supporting Solaris -environments and require pfexec permissions to assign subsets of cores -to the benchmarking system. diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..f2f32ccca45cb369c0117299c035c8512b866500 --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +# The MooBench Monitoring Overhead Micro-Benchmark + +Website: http://kieker-monitoring.net/MooBench + +The MooBench micro-benchmarks can be used to quantify the performance overhead caused by monitoring framework components. + +Currenly (fully) supported monitoring frameworks are: +* Kieker (http://kieker-monitoring.net) +* OpenTelemetry (https://opentelemetry.io/) +* inspectIT (https://inspectit.rocks/) + +## Benchmark Execution + +Initially, the following steps are required: +1. Make sure, that you've installed R (http://www.r-project.org/) to generate the results , awk to install intermediate results and curl to download processing tools (Ubuntu: `sudo apt install r-base gawk curl`). +2. Compile the application by calling `./gradlew assemble` in the main folder. + +All experiments are started with the provided "External Controller" scripts. The following scripts are available for every framework ($FRAMEWORK): +* In `frameworks/$FRAMEWORK/benchmark.sh` a script is provided for regular execution (with default parameters) +* In `frameworks/$FRAMEWORK/runExponentialSizes.sh` a script is provided for execution with different call tree depth sizes (exponentially growing from 2) + +Each scripts will start different factorial experiments (started `$NUM_OF_LOOPS` times for repeatability), which will be: +- baseline execution +- execution with instrumentation but without processing or serialization +- execution with serialization to hard disc (currently not available for inspectIT) +- execution with serialization to tcp receiver, which might be a simple receiver (Kieker), or Zikpin and Prometheus (OpenTelemetry and inspectIT) + +All scripts have been tested on Ubuntu and Raspbian. + +The execution may be parameterized by the following environment variables: +* SLEEP_TIME between executions (default 30 seconds) +* NUM_OF_LOOPS number of repetitions (default 10) +* THREADS concurrent benchmarking threads (default 1) +* RECURSION_DEPTH recursion up to this depth (default 10) +* TOTAL_NUM_OF_CALLS the duration of the benchmark (deafult 2,000,000 calls) +* METHOD_TIME the time per monitored call (default 0 ns or 500 us) + +If they are unset, the values are set via `frameworks/common-function.sh`. + +Typical call (using Ubuntu): +``` +export SLEEP_TIME=1 +./gradlew assemble +cd frameworks/opentelemetry/ +./benchmark.sh +``` + +## Data Analysis +Each benchmark execution calls an R script providing mean, standard deviation and confidence intervals for the benchmark variants. If you want to get these values again, switch to `frameworks` and call `runR.sh $FRAMEWORK`, where framework is the folder name of the framework (e.g. Kieker). + +If you got data from a run with exponential growing call tree depth, unzip them first (`for file in *.zip; do unzip $file; done`), copy all `results-$framework` folder to a common folder and run `./getExponential.sh` in analysis. This will create a graph for each framework and an overview graph for external processing of the traces (zipkin for OpenTelemetry and inspectIT, TCP for Kieker). + +In the folder /bin/r are some R scripts provided to generate graphs to visualize the results. In the top the files, one can configure the required paths and the configuration used to analyze the data. diff --git a/analysis/getExponential.sh b/analysis/getExponential.sh new file mode 100755 index 0000000000000000000000000000000000000000..95164d635de10fa22a5a05033ac8dc6aaba7738e --- /dev/null +++ b/analysis/getExponential.sh @@ -0,0 +1,62 @@ +function getSum { + awk '{sum += $1; square += $1^2} END {print "Average: "sum/NR" Standard Deviation: "sqrt(square / NR - (sum/NR)^2)" Count: "NR}' +} + +function getFileAverages { + variants=$(ls $1 | grep raw | awk -F'[-.]' '{print $4}' | sort | uniq) + for size in 2 4 8 16 32 64 128 + do + for variant in $variants + do + allExecutions=$(cat $1/raw-*-$size-$variant.csv | wc -l) + for file in $(ls $1/raw-*-$size-$variant.csv) + do + fileSize=$(cat $file | wc -l) + afterWarmup=$(($fileSize/2)) + average=$(tail -n $afterWarmup $file | awk -F';' '{print $2}' | getSum | awk '{print $2}') + echo $variant";"$size";"$average + done + done + done +} + +function getFrameworkEvolutionFile { + folder=$1 + framework=$2 + getFileAverages $1/results-$framework/ > $RESULTFOLDER/$framework.csv + variants=$(cat $RESULTFOLDER/$framework.csv | awk -F';' '{print $1}' | sort | uniq) + for size in 2 4 8 16 32 64 128 + do + echo -n "$size;" + for variant in $variants + do + cat $RESULTFOLDER/$framework.csv | grep "^$variant;$size;" | awk -F';' '{print $3}' | getSum | awk '{print $2";"$5";"}' | tr -d "\n" + done + echo + done > $RESULTFOLDER/evolution_$framework.csv +} + +if [ "$#" -lt 1 ]; then + echo "Please pass the folder where results-Kieker, results-OpenTelemetry and results-inspectIT are" + exit 1 +fi + +if [ ! -d $1 ]; then + echo "$1 should be a folder, but is not." + exit 1 +fi + +RESULTFOLDER=../results +if [ -d $RESULTFOLDER ] +then + rm -rf $RESULTFOLDER/* +fi +mkdir -p $RESULTFOLDER + +for framework in Kieker OpenTelemetry inspectIT +do + echo "Analysing $framework" + getFrameworkEvolutionFile $1 $framework +done + +gnuplot -c plotExponential.plt diff --git a/analysis/getFileAverages.sh b/analysis/getFileAverages.sh new file mode 100755 index 0000000000000000000000000000000000000000..0f0f85342e8b979ed9b73eee7e39a7f55a0fc073 --- /dev/null +++ b/analysis/getFileAverages.sh @@ -0,0 +1,19 @@ +function getSum { + awk '{sum += $1; square += $1^2} END {print "Average: "sum/NR" Standard Deviation: "sqrt(square / NR - (sum/NR)^2)" Count: "NR}' +} + +variants=$(ls $1 | grep raw | awk -F'[-.]' '{print $4}' | sort | uniq) +for size in 2 4 8 16 32 64 128 +do + for variant in $variants + do + allExecutions=$(cat $1/raw-*-$size-$variant.csv | wc -l) + for file in $(ls $1/raw-*-$size-$variant.csv) + do + fileSize=$(cat $file | wc -l) + afterWarmup=$(($fileSize/2)) + average=$(tail -n $afterWarmup $file | awk -F';' '{print $2}' | getSum | awk '{print $2}') + echo $variant";"$size";"$average + done + done +done diff --git a/analysis/plotExponential.plt b/analysis/plotExponential.plt new file mode 100644 index 0000000000000000000000000000000000000000..c00d61256e9e8d7c1bb17780e39392a81038060a --- /dev/null +++ b/analysis/plotExponential.plt @@ -0,0 +1,116 @@ +set encoding iso_8859_1 +set terminal pdf size 8,5 + +set datafile separator ";" + +set out '../results/Kieker.pdf' + +set title 'Kieker Method Execution Durations' + +set xlabel 'Call Tree Depth' +set ylabel 'Duration {/Symbol m}s' + +set key right center + +plot '../results/evolution_Kieker.csv' u 1:2 w linespoint lc "red" title 'Baseline', \ + '../results/evolution_Kieker.csv' u 1:($2-$3):($2+$3) w filledcurves lc "red" notitle fs transparent solid 0.5, \ + '../results/evolution_Kieker.csv' u 1:4 w linespoint lc "yellow" title 'Deactivated Probe', \ + '../results/evolution_Kieker.csv' u 1:($4-$5):($4+$5) w filledcurves lc "yellow" notitle fs transparent solid 0.5, \ + '../results/evolution_Kieker.csv' u 1:10 w linespoint lc "red" title 'Logging (Binary)', \ + '../results/evolution_Kieker.csv' u 1:($10-$11):($10+$11) w filledcurves lc "red" notitle fs transparent solid 0.5, \ + '../results/evolution_Kieker.csv' u 1:12 w linespoint lc "blue" title 'TCP', \ + '../results/evolution_Kieker.csv' u 1:($12-$13):($12+$13) w filledcurves lc "blue" notitle fs transparent solid 0.5 +# '../results/evolution_Kieker.csv' u 1:8 w linespoint lc "green" title 'Logging (Text)', \ +# '../results/evolution_Kieker.csv' u 1:($8-$9):($8+$9) w filledcurves lc "green" notitle fs transparent solid 0.5, \ +# Activate this, if text logging should be displayed (very big, so disabled by default) + +unset output + +set out '../results/OpenTelemetry.pdf' + +set title 'OpenTelemetry Method Execution Durations' + +set xlabel 'Call Tree Depth' +set ylabel 'Duration {/Symbol m}s' + +set key right center + +plot '../results/evolution_OpenTelemetry.csv' u 1:2 w linespoint lc "red" title 'Baseline', \ + '../results/evolution_OpenTelemetry.csv' u 1:($2-$3):($2+$3) w filledcurves lc "red" notitle fs transparent solid 0.5, \ + '../results/evolution_OpenTelemetry.csv' u 1:4 w linespoint lc "yellow" title 'No Logging', \ + '../results/evolution_OpenTelemetry.csv' u 1:($4-$5):($4+$5) w filledcurves lc "yellow" notitle fs transparent solid 0.5, \ + '../results/evolution_OpenTelemetry.csv' u 1:8 w linespoint lc "red" title 'Zipkin', \ + '../results/evolution_OpenTelemetry.csv' u 1:($8-$9):($8+$9) w filledcurves lc "red" notitle fs transparent solid 0.5, \ + '../results/evolution_OpenTelemetry.csv' u 1:10 w linespoint lc "blue" title 'Prometheus', \ + '../results/evolution_OpenTelemetry.csv' u 1:($10-$11):($10+$11) w filledcurves lc "blue" notitle fs transparent solid 0.5 + +# 'evolution_OpenTelemetry.csv' u 1:6 w linespoint lc "green" title 'Logging (Text)', \ +# 'evolution_OpenTelemetry.csv' u 1:($6-$7):($6+$7) w filledcurves lc "green" notitle fs transparent solid 0.5, \ +# Activate this, if text logging should be displayed (very big, so disabled by default) + +unset output + +set out '../results/inspectIT.pdf' + +set title 'inspectIT Method Execution Durations' + +set xlabel 'Call Tree Depth' +set ylabel 'Duration {/Symbol m}s' + +set key right center + +plot '../results/evolution_inspectIT.csv' u 1:2 w linespoint lc "red" title 'Baseline', \ + '../results/evolution_inspectIT.csv' u 1:($2-$3):($2+$3) w filledcurves lc "red" notitle fs transparent solid 0.5, \ + '../results/evolution_inspectIT.csv' u 1:4 w linespoint lc "yellow" title 'No Logging', \ + '../results/evolution_inspectIT.csv' u 1:($4-$5):($4+$5) w filledcurves lc "yellow" notitle fs transparent solid 0.5, \ + '../results/evolution_inspectIT.csv' u 1:6 w linespoint lc "red" title 'Zipkin', \ + '../results/evolution_inspectIT.csv' u 1:($6-$7):($6+$7) w filledcurves lc "red" notitle fs transparent solid 0.5, \ + '../results/evolution_inspectIT.csv' u 1:8 w linespoint lc "blue" title 'Prometheus', \ + '../results/evolution_inspectIT.csv' u 1:($8-$9):($8+$9) w filledcurves lc "blue" notitle fs transparent solid 0.5 + + +unset output + +set terminal pdf size 5,3 + +set out '../results/overview.pdf' + +set title 'Overview of Method Execution Durations' + +set xlabel 'Call Tree Depth' +set ylabel 'Duration {/Symbol m}s' + +set key left top + +plot '../results/evolution_inspectIT.csv' u 1:2 w linespoint lc "red" title 'Baseline', \ + '../results/evolution_inspectIT.csv' u 1:($2-$3):($2+$3) w filledcurves lc "red" notitle fs transparent solid 0.5, \ + '../results/evolution_Kieker.csv' u 1:12 w linespoint lc "blue" title 'Kieker (TCP)', \ + '../results/evolution_Kieker.csv' u 1:($12-$13):($12+$13) w filledcurves lc "blue" notitle fs transparent solid 0.5, \ + '../results/evolution_inspectIT.csv' u 1:6 w linespoint lc rgb "#c66900" title 'inspectIT (Zipkin)', \ + '../results/evolution_inspectIT.csv' u 1:($6-$7):($6+$7) w filledcurves lc rgb "#c66900" notitle fs transparent solid 0.5, \ + '../results/evolution_OpenTelemetry.csv' u 1:8 w linespoint lc "green" title 'OpenTelemetry (Zipkin)', \ + '../results/evolution_OpenTelemetry.csv' u 1:($8-$9):($8+$9) w filledcurves lc "green" notitle fs transparent solid 0.5 + + +unset output + +set out '../results/overview_opentelemetry.pdf' + +set title 'Overview of Method Execution Durations' + +set xlabel 'Call Tree Depth' +set ylabel 'Duration {/Symbol m}s' + +set key left top + +plot '../results/evolution_inspectIT.csv' u 1:2 w linespoint lc "red" title 'Baseline', \ + '../results/evolution_inspectIT.csv' u 1:($2-$3):($2+$3) w filledcurves lc "red" notitle fs transparent solid 0.5, \ + '../results/evolution_OpenTelemetry.csv' u 1:4 w linespoint lc "blue" title 'OpenTelemetry (No Logging)', \ + '../results/evolution_OpenTelemetry.csv' u 1:($4-$5):($4+$5) w filledcurves lc "blue" notitle fs transparent solid 0.5, \ + '../results/evolution_inspectIT.csv' u 1:6 w linespoint lc rgb "#c66900" title 'inspectIT (Zipkin)', \ + '../results/evolution_inspectIT.csv' u 1:($6-$7):($6+$7) w filledcurves lc rgb "#c66900" notitle fs transparent solid 0.5, \ + '../results/evolution_OpenTelemetry.csv' u 1:8 w linespoint lc "green" title 'OpenTelemetry (Zipkin)', \ + '../results/evolution_OpenTelemetry.csv' u 1:($8-$9):($8+$9) w filledcurves lc "green" notitle fs transparent solid 0.5 + + +unset output diff --git a/benchmark/build.gradle b/benchmark/build.gradle index 514b30e9ed1ac1aabe3c2f2a430ae4593546a5d3..3705a9b362cf00e5223460e20b6e8c48bf7c0c4d 100644 --- a/benchmark/build.gradle +++ b/benchmark/build.gradle @@ -7,6 +7,40 @@ dependencies { implementation 'com.beust:jcommander:1.72' } -application { - mainClass = 'moobench.benchmark.BenchmarkMain' +jar { + manifest { + attributes 'Implementation-Title': 'Moobench Benchmark', + 'Implementation-Version': '0.1-SNAPSHOT', + 'Main-Class': 'moobench.benchmark.BenchmarkMain' + } + + from sourceSets.main.output + + dependsOn configurations.runtimeClasspath + from { + configurations.runtimeClasspath.findAll { it.name.endsWith('jar') }.collect { zipTree(it) } + } + + doLast { + copy { + from jar + into "../frameworks/SPASSmeter/" + rename('benchmark.jar', 'MooBench.jar') + } + copy { + from jar + into "../frameworks/OpenTelemetry/" + rename('benchmark.jar', 'MooBench.jar') + } + copy { + from jar + into "../frameworks/inspectIT/" + rename('benchmark.jar', 'MooBench.jar') + } + copy { + from jar + into "../frameworks/Kieker/" + rename('benchmark.jar', 'MooBench.jar') + } + } } diff --git a/benchmark/src/main/java/moobench/benchmark/BenchmarkMain.java b/benchmark/src/main/java/moobench/benchmark/BenchmarkMain.java index e1c5a86002f9a306757eef98717ff55cec277735..a0d7b4dc982ba61a23b710239c5eadcf6d897d9b 100644 --- a/benchmark/src/main/java/moobench/benchmark/BenchmarkMain.java +++ b/benchmark/src/main/java/moobench/benchmark/BenchmarkMain.java @@ -148,6 +148,7 @@ public final class BenchmarkMain { commander.usage(); } System.out.println(ex.toString()); // NOPMD (Stacktrace) + ex.printStackTrace(); System.exit(-1); } } diff --git a/frameworks/Kieker/Benchmark (Kicker).launch b/frameworks/Kieker/Benchmark (Kicker).launch deleted file mode 100644 index 43cf8336cd59e1045fb26bb8d226e0a8251980c1..0000000000000000000000000000000000000000 --- a/frameworks/Kieker/Benchmark (Kicker).launch +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication"> -<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> -<listEntry value="/MooBench/src/mooBench/benchmark/Benchmark.java"/> -</listAttribute> -<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> -<listEntry value="1"/> -</listAttribute> -<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/> -<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="mooBench.benchmark.Benchmark"/> -<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-d 10 -h 1 -m 0 -t 10 -o tmp/test.txt -q -a mooBench.monitoredApplication.MonitoredClassManualInstrumentation"/> -<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="MooBench"/> -<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:frameworks/Kieker/lib/kicker-1.10_aspectj.jar -Dkicker.monitoring.debug=true -Dkicker.monitoring.skipDefaultAOPConfiguration=true -Dkicker.monitoring.writer=kicker.monitoring.writer.filesystem.AsyncFsWriter"/> -</launchConfiguration> diff --git a/frameworks/Kieker/Benchmark (Kicker-objectinterfaces).launch b/frameworks/Kieker/Benchmark (Kicker-objectinterfaces).launch deleted file mode 100644 index 944b3f2bc26a626970cc7e230f9e7af78fe89cbe..0000000000000000000000000000000000000000 --- a/frameworks/Kieker/Benchmark (Kicker-objectinterfaces).launch +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication"> -<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> -<listEntry value="/MooBench/src/mooBench/benchmark/Benchmark.java"/> -</listAttribute> -<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> -<listEntry value="1"/> -</listAttribute> -<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/> -<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="mooBench.benchmark.Benchmark"/> -<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-d 10 -h 1 -m 0 -t 10 -o tmp/test.txt -q -a mooBench.monitoredApplication.MonitoredClassManualInstrumentation"/> -<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="MooBench"/> -<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:frameworks/Kieker/lib/kicker-1.10_aspectj.jar -Dkicker.monitoring.debug=true -Dkicker.monitoring.skipDefaultAOPConfiguration=true -Dkicker.monitoring.writer=kicker.monitoring.writer.filesystem.AsyncFsWriter -Dorg.aspectj.weaver.loadtime.configuration=META-INF/aop-objectinterfaces.xml"/> -</launchConfiguration> diff --git a/frameworks/Kieker/Benchmark (Kicker-objects).launch b/frameworks/Kieker/Benchmark (Kicker-objects).launch deleted file mode 100644 index f570d79be163b315d49ace06215f96ca2e8674ab..0000000000000000000000000000000000000000 --- a/frameworks/Kieker/Benchmark (Kicker-objects).launch +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication"> -<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> -<listEntry value="/MooBench/src/mooBench/benchmark/Benchmark.java"/> -</listAttribute> -<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> -<listEntry value="1"/> -</listAttribute> -<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/> -<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="mooBench.benchmark.Benchmark"/> -<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-d 10 -h 1 -m 0 -t 10 -o tmp/test.txt -q -a mooBench.monitoredApplication.MonitoredClassManualInstrumentation"/> -<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="MooBench"/> -<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:frameworks/Kieker/lib/kicker-1.10_aspectj.jar -Dkicker.monitoring.debug=true -Dkicker.monitoring.skipDefaultAOPConfiguration=true -Dkicker.monitoring.writer=kicker.monitoring.writer.filesystem.AsyncFsWriter -Dorg.aspectj.weaver.loadtime.configuration=META-INF/aop-objects.xml"/> -</launchConfiguration> diff --git a/frameworks/Kieker/Benchmark (Kieker).launch b/frameworks/Kieker/Benchmark (Kieker).launch deleted file mode 100644 index b2f4493cb912b8397637950634a8d53bd2dc1e5d..0000000000000000000000000000000000000000 --- a/frameworks/Kieker/Benchmark (Kieker).launch +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication"> -<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> -<listEntry value="/MooBench/src/mooBench/benchmark/Benchmark.java"/> -</listAttribute> -<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> -<listEntry value="1"/> -</listAttribute> -<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/> -<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="mooBench.benchmark.Benchmark"/> -<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-d 10 -h 1 -m 0 -t 1000000 -o tmp/test.txt -q"/> -<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="MooBench"/> -<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:frameworks/Kieker/lib/kieker-1.11-SNAPSHOT_aspectj.jar -Dorg.aspectj.weaver.loadtime.configuration=META-INF/kieker.aop.xml -Dorg.aspectj.weaver.showWeaveInfo=true -Daj.weaving.verbose=true -Dkieker.monitoring.writer=kieker.monitoring.writer.tcp.TCPWriter"/> -</launchConfiguration> diff --git a/frameworks/Kieker/scripts/benchmark.sh b/frameworks/Kieker/benchmark.sh similarity index 77% rename from frameworks/Kieker/scripts/benchmark.sh rename to frameworks/Kieker/benchmark.sh index 98a83367d3ff73b286fd9bcd05ee8e572c9a3492..af95c4ac5aad0cc8da9a44d1c9d6d25eca5652c5 100755 --- a/frameworks/Kieker/scripts/benchmark.sh +++ b/frameworks/Kieker/benchmark.sh @@ -15,6 +15,16 @@ else echo "Missing configuration: ${BASE_DIR}/config" exit 1 fi + +source ../common-functions.sh + +getKiekerAgent + +# copy receiver +tar -xvpf ${BASE_DIR}/../../tools/receiver/build/distributions/receiver.tar +# copy result compiler +tar -xvpf ${BASE_DIR}/../../tools/compile-results/build/distributions/compile-results.tar + if [ -f "${BASE_DIR}/common-functions" ] ; then . ${BASE_DIR}/common-functions else @@ -42,34 +52,26 @@ checkDirectory DATA_DIR "${DATA_DIR}" create PARENT=`dirname "${RESULTS_DIR}"` checkDirectory result-base "$PARENT" checkFile ApsectJ-Agent "${AGENT}" -checkFile moobench "${BENCHMARK}" information "----------------------------------" information "Running benchmark..." information "----------------------------------" -FIXED_PARAMETERS="--quickstart -a moobench.application.MonitoredClassSimple" - TIME=`expr ${METHOD_TIME} \* ${TOTAL_NUM_OF_CALLS} / 1000000000 \* 4 \* ${RECURSION_DEPTH} \* ${NUM_OF_LOOPS} + ${SLEEP_TIME} \* 4 \* ${NUM_OF_LOOPS} \* ${RECURSION_DEPTH} + 50 \* ${TOTAL_NUM_OF_CALLS} / 1000000000 \* 4 \* ${RECURSION_DEPTH} \* ${NUM_OF_LOOPS} ` information "Experiment will take circa ${TIME} seconds." information "Removing and recreating '$RESULTS_DIR'" -(rm -rf ${RESULTS_DIR}) && mkdir -p ${RESULTS_DIR} +(rm -rf ${RESULTS_DIR}/*csv) && mkdir -p ${RESULTS_DIR} # Clear kieker.log and initialize logging rm -f ${DATA_DIR}/kieker.log touch ${DATA_DIR}/kieker.log -RAWFN="${RESULTS_DIR}/raw" - # general server arguments JAVA_ARGS="-server" -JAVA_ARGS="${JAVA_ARGS} -d64" -JAVA_ARGS="${JAVA_ARGS} -Xms1G -Xmx4G" - -JAVA_OPTS="${FIXED_PARAMETERS}" +JAVA_ARGS="${JAVA_ARGS} -Xms1G -Xmx2G" -LTW_ARGS="-javaagent:${AGENT} -Dorg.aspectj.weaver.showWeaveInfo=false -Daj.weaving.verbose=false -Dkieker.monitoring.skipDefaultAOPConfiguration=true -Dorg.aspectj.weaver.loadtime.configuration=${AOP}" +LTW_ARGS="-javaagent:${AGENT} -Dorg.aspectj.weaver.showWeaveInfo=true -Daj.weaving.verbose=true -Dkieker.monitoring.skipDefaultAOPConfiguration=true -Dorg.aspectj.weaver.loadtime.configuration=${AOP}" KIEKER_ARGS="-Dlog4j.configuration=log4j.cfg -Dkieker.monitoring.name=KIEKER-BENCHMARK -Dkieker.monitoring.adaptiveMonitoring.enabled=false -Dkieker.monitoring.periodicSensorsExecutorPoolSize=0" @@ -81,37 +83,16 @@ declare -a RECEIVER declare -a TITLE # Configurations -TITLE[0]="No instrumentation" +source labels.sh WRITER_CONFIG[0]="" - -TITLE[1]="Deactivated probe" WRITER_CONFIG[1]="-Dkieker.monitoring.enabled=false -Dkieker.monitoring.writer=kieker.monitoring.writer.dump.DumpWriter" - -TITLE[2]="No logging (null writer)" WRITER_CONFIG[2]="-Dkieker.monitoring.enabled=true -Dkieker.monitoring.writer=kieker.monitoring.writer.dump.DumpWriter" - -TITLE[3]="Logging (Generic Text)" WRITER_CONFIG[3]="-Dkieker.monitoring.enabled=true -Dkieker.monitoring.writer=kieker.monitoring.writer.filesystem.FileWriter -Dkieker.monitoring.writer.filesystem.FileWriter.logStreamHandler=kieker.monitoring.writer.filesystem.TextLogStreamHandler -Dkieker.monitoring.writer.filesystem.FileWriter.customStoragePath=${DATA_DIR}/" - -TITLE[4]="Logging (Generic Bin)" WRITER_CONFIG[4]="-Dkieker.monitoring.enabled=true -Dkieker.monitoring.writer=kieker.monitoring.writer.filesystem.FileWriter -Dkieker.monitoring.writer.filesystem.FileWriter.logStreamHandler=kieker.monitoring.writer.filesystem.BinaryLogStreamHandler -Dkieker.monitoring.writer.filesystem.FileWriter.bufferSize=8192 -Dkieker.monitoring.writer.filesystem.FileWriter.customStoragePath=${DATA_DIR}/" - -TITLE[5]="Logging (Single TCP)" WRITER_CONFIG[5]="-Dkieker.monitoring.writer=kieker.monitoring.writer.tcp.SingleSocketTcpWriter -Dkieker.monitoring.writer.tcp.SingleSocketTcpWriter.port=2345" -#RECEIVER[5]="${BASE_DIR}/collector-2.0/bin/collector -p 2345" +RECEIVER[5]="${BASE_DIR}/collector-2.0/bin/collector -p 2345" RECEIVER[5]="${BASE_DIR}/receiver/bin/receiver 2345" -# Create R labels -LABELS="" -for I in "${TITLE[@]}" ; do - title="$I" - if [ "$LABELS" == "" ] ; then - LABELS="\"$title\"" - else - LABELS="${LABELS}, \"$title\"" - fi -done - ## Write configuration uname -a >${RESULTS_DIR}/configuration.txt ${JAVA_BIN} ${JAVA_ARGS} -version 2>>${RESULTS_DIR}/configuration.txt @@ -152,13 +133,16 @@ function execute-experiment() { else BENCHMARK_OPTS="${JAVA_ARGS} ${LTW_ARGS} ${KIEKER_ARGS} ${kieker_parameters}" fi + + echo ${BENCHMARK_OPTS}" -jar MooBench.jar" - ${BENCHMARK} \ + ${JAVABIN}java ${BENCHMARK_OPTS} -jar MooBench.jar \ + --application moobench.application.MonitoredClassSimple \ --output-filename ${RAWFN}-${loop}-${recursion}-${index}.csv \ --total-calls ${TOTAL_NUM_OF_CALLS} \ --method-time ${METHOD_TIME} \ --total-threads 1 \ - --recursion-depth ${recursion} + --recursion-depth ${recursion} &> ${RESULTS_DIR}/output_"$loop"_"$RECURSION_DEPTH"_$index.txt rm -rf ${DATA_DIR}/kieker-* @@ -193,12 +177,14 @@ function execute-benchmark() { for ((loop=1;loop<=${NUM_OF_LOOPS};loop+=1)); do recursion=${RECURSION_DEPTH} - information "## Starting iteration ${i}/${NUM_OF_LOOPS}" - echo "## Starting iteration ${i}/${NUM_OF_LOOPS}" >>${DATA_DIR}/kieker.log + information "## Starting iteration ${loop}/${NUM_OF_LOOPS}" + echo "## Starting iteration ${loop}/${NUM_OF_LOOPS}" >>${DATA_DIR}/kieker.log for ((index=0;index<${#WRITER_CONFIG[@]};index+=1)); do execute-benchmark-body $index $loop $recursion done + + printIntermediaryResults done mv ${DATA_DIR}/kieker.log ${RESULTS_DIR}/kieker.log @@ -206,29 +192,6 @@ function execute-benchmark() { [ -f ${DATA_DIR}/errorlog.txt ] && mv ${DATA_DIR}/errorlog.txt ${RESULTS_DIR} } -## Generate Results file -function run-r() { -R --vanilla --silent << EOF -results_fn="${RAWFN}" -outtxt_fn="${RESULTS_DIR}/results-text.txt" -outcsv_fn="${RESULTS_DIR}/results-text.csv" -configs.loop=${NUM_OF_LOOPS} -configs.recursion=${RECURSION_DEPTH} -configs.labels=c($LABELS) -results.count=${TOTAL_NUM_OF_CALLS} -results.skip=${TOTAL_NUM_OF_CALLS}/2 -source("${RSCRIPT_PATH}") -EOF -} - -## Clean up raw results -function cleanup-results() { - zip -jqr ${RESULTS_DIR}/results.zip ${RAWFN}* - rm -f ${RAWFN}* - [ -f ${DATA_DIR}/nohup.out ] && cp ${DATA_DIR}/nohup.out ${RESULTS_DIR} - [ -f ${DATA_DIR}/nohup.out ] && > ${DATA_DIR}/nohup.out -} - ## Execute benchmark if [ "$MODE" == "execute" ] ; then if [ "$OPTION" == "" ] ; then @@ -236,7 +199,11 @@ if [ "$MODE" == "execute" ] ; then else execute-benchmark-body $OPTION 1 1 fi + + # Create R labels + LABELS=$(createRLabels) run-r + cleanup-results else execute-benchmark-body $OPTION 1 1 diff --git a/frameworks/Kieker/scripts/common-functions b/frameworks/Kieker/common-functions similarity index 100% rename from frameworks/Kieker/scripts/common-functions rename to frameworks/Kieker/common-functions diff --git a/frameworks/Kieker/config b/frameworks/Kieker/config new file mode 100644 index 0000000000000000000000000000000000000000..5ed8d82e0f7b0dda6de73f0ecb63f100f57e5821 --- /dev/null +++ b/frameworks/Kieker/config @@ -0,0 +1,17 @@ +## +# MooBench configuration parameter + +# path setup +JAVA_BIN="java" + +RSCRIPT_PATH="../stats.csv.r" + +DATA_DIR="${BASE_DIR}/data" +AGENT="${BASE_DIR}/kieker-1.15-SNAPSHOT-aspectj.jar" + +BATCH_MODE="yes" + +# in-jar locations +AOP="file:"$(pwd)"/src/META-INF/kieker.aop.xml" + +# end diff --git a/frameworks/Kieker/labels.sh b/frameworks/Kieker/labels.sh new file mode 100644 index 0000000000000000000000000000000000000000..840ec0512d93a865bb92ea65e0070a93b448e6f3 --- /dev/null +++ b/frameworks/Kieker/labels.sh @@ -0,0 +1,6 @@ +TITLE[0]="No instrumentation" +TITLE[1]="Deactivated probe" +TITLE[2]="No logging (null writer)" +TITLE[3]="Logging (Generic Text)" +TITLE[4]="Logging (Generic Bin)" +TITLE[5]="Logging (Single TCP)" diff --git a/frameworks/Kieker/scripts/run-benchmark.sh b/frameworks/Kieker/run-benchmark.sh similarity index 71% rename from frameworks/Kieker/scripts/run-benchmark.sh rename to frameworks/Kieker/run-benchmark.sh index 4a2b5854afbccb50180c448ae3179f7d71858d1d..b80da7c8f2ae923edcbbd11ed758c27c3a1d94f3 100755 --- a/frameworks/Kieker/scripts/run-benchmark.sh +++ b/frameworks/Kieker/run-benchmark.sh @@ -28,10 +28,6 @@ cd ${BASE_DIR} ## setup # install benchmark tar -xvpf ${BASE_DIR}/../../../benchmark/build/distributions/benchmark.tar -# get agent -export VERSION_PATH=`curl "https://oss.sonatype.org/service/local/repositories/snapshots/content/net/kieker-monitoring/kieker/" | grep '<resourceURI>' | sed 's/ *<resourceURI>//g' | sed 's/<\/resourceURI>//g' | grep '/$'` -export AGENT_PATH=`curl "${VERSION_PATH}" | grep 'aspectj.jar</resourceURI' | sort | sed 's/ *<resourceURI>//g' | sed 's/<\/resourceURI>//g' | tail -1` -curl "${AGENT_PATH}" > "${AGENT}" # copy receiver tar -xvpf ${BASE_DIR}/../../../tools/receiver/build/distributions/receiver.tar # copy result compiler diff --git a/frameworks/Kieker/runExponentialSizes.sh b/frameworks/Kieker/runExponentialSizes.sh new file mode 100755 index 0000000000000000000000000000000000000000..f08d60347cb4122fa7fccc0f0dde8d2cbd696231 --- /dev/null +++ b/frameworks/Kieker/runExponentialSizes.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +RESULTS_DIR=results-Kieker/ +mkdir -p $RESULTS_DIR + +for depth in 2 4 8 16 32 64 128 +do + export RECURSION_DEPTH=$depth + echo "Running $depth" + ./benchmark.sh &> $RESULTS_DIR/$depth.txt + mv $RESULTS_DIR/results.zip $RESULTS_DIR/results-$RECURSION_DEPTH.zip +done diff --git a/frameworks/Kieker/scripts/config b/frameworks/Kieker/scripts/config deleted file mode 100644 index 9f2084f620f4cf20947bd4218e768a7f7b8342a0..0000000000000000000000000000000000000000 --- a/frameworks/Kieker/scripts/config +++ /dev/null @@ -1,26 +0,0 @@ -## -# MooBench configuration parameter - -# path setup -JAVA_BIN="java" - -RSCRIPT_PATH="${BASE_DIR}/stats.csv.r" - -DATA_DIR="${BASE_DIR}/data" -RESULTS_DIR="${BASE_DIR}/results-kieker" -AGENT="${BASE_DIR}/kieker-1.15-SNAPSHOT-aspectj.jar" -BENCHMARK="${BASE_DIR}/benchmark/bin/benchmark" - -BATCH_MODE="yes" - -# in-jar locations -AOP="kieker.aop.xml" - -# execution parameter -SLEEP_TIME=1 ## 30 -NUM_OF_LOOPS=10 ## 10 -RECURSION_DEPTH=10 ## 10 -TOTAL_NUM_OF_CALLS=2000 #0 ## 2 000 000 -METHOD_TIME=5 #00 ## 500000 - -# end diff --git a/frameworks/Kieker/src/META-INF/kieker.aop.xml b/frameworks/Kieker/src/META-INF/kieker.aop.xml index 579e6609746abaeec5fb9c13c6417c745ce45895..8ebe6f38f83cf1e5213d8d74149c6801bfef0218 100644 --- a/frameworks/Kieker/src/META-INF/kieker.aop.xml +++ b/frameworks/Kieker/src/META-INF/kieker.aop.xml @@ -1,7 +1,7 @@ <!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.aspectj.org/dtd/aspectj_1_5_0.dtd"> <aspectj> <weaver options=""> - <include within="mooBench.monitoredApplication.*"/> + <include within="moobench.application.*"/> </weaver> <aspects> <aspect name="kieker.monitoring.probe.aspectj.flow.operationExecution.FullInstrumentation" /> diff --git a/frameworks/Kieker/scripts/stats.csv.r b/frameworks/Kieker/stats.csv.r similarity index 94% rename from frameworks/Kieker/scripts/stats.csv.r rename to frameworks/Kieker/stats.csv.r index 7d3e21f069b0da249d2581c2f5272886d5ff3caa..8ba1ca1098b033fb93f7b5d5c61016c066c3af31 100644 --- a/frameworks/Kieker/scripts/stats.csv.r +++ b/frameworks/Kieker/stats.csv.r @@ -67,9 +67,9 @@ for (writer_idx in (1:numberOfWriters)) { qnorm_value <- qnorm(0.975) # print results -printDimensionNames <- list(c("mean","ci95%","md25%","md50%","md75%","max","min"), c(1:numberOfWriters)) +printDimensionNames <- list(c("mean","sd","ci95%","md25%","md50%","md75%","max","min"), c(1:numberOfWriters)) # row number == number of computed result values, e.g., mean, min, max -printvalues <- matrix(nrow=7, ncol=numberOfWriters, dimnames=printDimensionNames) +printvalues <- matrix(nrow=8, ncol=numberOfWriters, dimnames=printDimensionNames) for (writer_idx in (1:numberOfWriters)) { idx_mult <- c(1:numOfRowsToRead) @@ -77,6 +77,7 @@ for (writer_idx in (1:numberOfWriters)) { valuesBIG <- resultsBIG[writer_idx,idx_mult]/timeUnit printvalues["mean",writer_idx] <- mean(valuesBIG) + printvalues["sd",writer_idx] <- sd(valuesBIG) printvalues["ci95%",writer_idx] <- qnorm_value*sd(valuesBIG)/sqrt(length(valuesBIG)) printvalues[c("md25%","md50%","md75%"),writer_idx] <- quantile(valuesBIG, probs=c(0.25, 0.5, 0.75)) printvalues["max",writer_idx] <- max(valuesBIG) diff --git a/frameworks/OpenTelemetry/benchmark.sh b/frameworks/OpenTelemetry/benchmark.sh new file mode 100755 index 0000000000000000000000000000000000000000..0d7173ba7a954cd3d4b1edb8ddae16a2d2f6a5a2 --- /dev/null +++ b/frameworks/OpenTelemetry/benchmark.sh @@ -0,0 +1,197 @@ +#!/bin/bash + +function startJaeger { + if [ ! -d jaeger-1.24.0-linux-amd64 ] + then + wget https://github.com/jaegertracing/jaeger/releases/download/v1.24.0/jaeger-1.24.0-linux-amd64.tar.gz + tar -xvf jaeger-1.24.0-linux-amd64.tar.gz + rm jaeger-1.24.0-linux-amd64.tar.gz + fi + cd jaeger-1.24.0-linux-amd64 + ./jaeger-all-in-one &> jaeger.log & + cd .. +} + +function cleanup { + [ -f ${BASE_DIR}hotspot.log ] && mv ${BASE_DIR}hotspot.log ${RESULTS_DIR}hotspot-${i}-$RECURSION_DEPTH-${k}.log + echo >>${BASE_DIR}/OpenTelemetry.log + echo >>${BASE_DIR}/OpenTelemetry.log + sync + sleep ${SLEEP_TIME} +} + +function runNoInstrumentation { + # No instrumentation + echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} + echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} >>${BASE_DIR}/OpenTelemetry.log + ${JAVABIN}java ${JAVAARGS_NOINSTR} ${JAR} \ + --output-filename ${RAWFN}-${i}-$RECURSION_DEPTH-${k}.csv \ + --total-calls ${TOTAL_NUM_OF_CALLS} \ + --method-time ${METHOD_TIME} \ + --total-threads ${THREADS} \ + --recursion-depth $RECURSION_DEPTH \ + ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt +} + +function runOpenTelemetryNoLogging { + # OpenTelemetry Instrumentation Logging Deactivated + k=`expr ${k} + 1` + echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} + echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} >>${BASE_DIR}/OpenTelemetry.log + ${JAVABIN}java ${JAVAARGS_OPENTELEMETRY_LOGGING_DEACTIVATED} ${JAR} \ + --output-filename ${RAWFN}-${i}-$RECURSION_DEPTH-${k}.csv \ + --total-calls ${TOTAL_NUM_OF_CALLS} \ + --method-time ${METHOD_TIME} \ + --total-threads ${THREADS} \ + --recursion-depth $RECURSION_DEPTH \ + ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt +} + +function runOpenTelemetryLogging { + # OpenTelemetry Instrumentation Logging + k=`expr ${k} + 1` + echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} + echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} >>${BASE_DIR}/OpenTelemetry.log + ${JAVABIN}java ${JAVAARGS_OPENTELEMETRY_LOGGING} ${JAR} \ + --output-filename ${RAWFN}-${i}-$RECURSION_DEPTH-${k}.csv \ + --total-calls ${TOTAL_NUM_OF_CALLS} \ + --method-time ${METHOD_TIME} \ + --total-threads ${THREADS} \ + --recursion-depth $RECURSION_DEPTH \ + ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt + if [ ! "$DEBUG" = true ] + then + echo "DEBUG is $DEBUG, deleting opentelemetry logging file" + rm ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt + fi +} + +function runOpenTelemetryZipkin { + # OpenTelemetry Instrumentation Zipkin + k=`expr ${k} + 1` + startZipkin + echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} + echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} >>${BASE_DIR}/OpenTelemetry.log + ${JAVABIN}java ${JAVAARGS_OPENTELEMETRY_ZIPKIN} ${JAR} \ + --output-filename ${RAWFN}-${i}-$RECURSION_DEPTH-${k}.csv \ + --total-calls ${TOTAL_NUM_OF_CALLS} \ + --method-time ${METHOD_TIME} \ + --total-threads ${THREADS} \ + --recursion-depth $RECURSION_DEPTH \ + ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt + stopBackgroundProcess + sleep $SLEEP_TIME +} + +function runOpenTelemetryJaeger { + # OpenTelemetry Instrumentation Jaeger + k=`expr ${k} + 1` + startJaeger + echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} + echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} >>${BASE_DIR}/OpenTelemetry.log + ${JAVABIN}java ${JAVAARGS_OPENTELEMETRY_JAEGER} ${JAR} \ + --output-filename ${RAWFN}-${i}-$RECURSION_DEPTH-${k}.csv \ + --total-calls ${TOTAL_NUM_OF_CALLS} \ + --method-time ${METHOD_TIME} \ + --total-threads ${THREADS} \ + --recursion-depth $RECURSION_DEPTH \ + ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt + stopBackgroundProcess + sleep $SLEEP_TIME +} + +function runOpenTelemetryPrometheus { + # OpenTelemetry Instrumentation Prometheus + k=`expr ${k} + 1` + startPrometheus + echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} + echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} >>${BASE_DIR}/OpenTelemetry.log + ${JAVABIN}java ${JAVAARGS_OPENTELEMETRY_PROMETHEUS} ${JAR} \ + --output-filename ${RAWFN}-${i}-$RECURSION_DEPTH-${k}.csv \ + --total-calls ${TOTAL_NUM_OF_CALLS} \ + --method-time ${METHOD_TIME} \ + --total-threads ${THREADS} \ + --recursion-depth $RECURSION_DEPTH \ + ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt + stopBackgroundProcess + sleep $SLEEP_TIME +} + +JAVABIN="" + +BASE_DIR=$(pwd) +RSCRIPT_PATH="../stats.csv.r" + +source ../common-functions.sh +source labels.sh + +#MOREPARAMS="--quickstart" +MOREPARAMS="--application moobench.application.MonitoredClassSimple ${MOREPARAMS}" + +TIME=`expr ${METHOD_TIME} \* ${TOTAL_NUM_OF_CALLS} / 1000000000 \* 4 \* ${RECURSION_DEPTH} \* ${NUM_OF_LOOPS} + ${SLEEP_TIME} \* 4 \* ${NUM_OF_LOOPS} \* ${RECURSION_DEPTH} + 50 \* ${TOTAL_NUM_OF_CALLS} / 1000000000 \* 4 \* ${RECURSION_DEPTH} \* ${NUM_OF_LOOPS} ` +echo "Experiment will take circa ${TIME} seconds." + +echo "Cleaning and recreating '$RESULTS_DIR'" +(rm -rf ${RESULTS_DIR}/**csv) && mkdir -p ${RESULTS_DIR} +#mkdir ${RESULTS_DIR}stat/ + +# Clear OpenTelemetry.log and initialize logging +rm -f ${BASE_DIR}/OpenTelemetry.log +touch ${BASE_DIR}/OpenTelemetry.log + +JAVAARGS="-server" +JAVAARGS="${JAVAARGS} " +JAVAARGS="${JAVAARGS} -Xms1G -Xmx2G" +JAVAARGS="${JAVAARGS} -verbose:gc " +JAR="-jar MooBench.jar" + +checkMoobenchApplication + +getOpentelemetryAgent + +JAVAARGS_NOINSTR="${JAVAARGS}" +JAVAARGS_OPENTELEMETRY_BASIC="${JAVAARGS} -javaagent:${BASE_DIR}/lib/opentelemetry-javaagent-all.jar -Dotel.resource.attributes=service.name=moobench -Dotel.instrumentation.methods.include=moobench.application.MonitoredClassSimple[monitoredMethod];moobench.application.MonitoredClassThreaded[monitoredMethod]" +JAVAARGS_OPENTELEMETRY_LOGGING_DEACTIVATED="${JAVAARGS_OPENTELEMETRY_BASIC} -Dotel.traces.exporter=logging -Dotel.traces.sampler=always_off" +JAVAARGS_OPENTELEMETRY_LOGGING="${JAVAARGS_OPENTELEMETRY_BASIC} -Dotel.traces.exporter=logging" +JAVAARGS_OPENTELEMETRY_ZIPKIN="${JAVAARGS_OPENTELEMETRY_BASIC} -Dotel.traces.exporter=zipkin -Dotel.metrics.exporter=none" +JAVAARGS_OPENTELEMETRY_JAEGER="${JAVAARGS_OPENTELEMETRY_BASIC} -Dotel.traces.exporter=none -Dotel.traces.exporter=jaeger" +JAVAARGS_OPENTELEMETRY_PROMETHEUS="${JAVAARGS_OPENTELEMETRY_BASIC} -Dotel.traces.exporter=none -Dotel.metrics.exporter=prometheus" + +writeConfiguration + +## Execute Benchmark +for ((i=1;i<=${NUM_OF_LOOPS};i+=1)); do + k=0 + echo "## Starting iteration ${i}/${NUM_OF_LOOPS}" + echo "## Starting iteration ${i}/${NUM_OF_LOOPS}" >>${BASE_DIR}/OpenTelemetry.log + + runNoInstrumentation + cleanup + + runOpenTelemetryNoLogging + cleanup + + runOpenTelemetryLogging + cleanup + + runOpenTelemetryZipkin + cleanup + + runOpenTelemetryPrometheus + cleanup + + printIntermediaryResults +done + +# Create R labels +LABELS=$(createRLabels) +run-r + +cleanup-results + +#zip -jqr ${RESULTS_DIR}stat.zip ${RESULTS_DIR}stat +#rm -rf ${RESULTS_DIR}stat/ +mv ${BASE_DIR}/OpenTelemetry.log ${RESULTS_DIR}/OpenTelemetry.log +[ -f ${RESULTS_DIR}hotspot-1-${RECURSION_DEPTH}-1.log ] && grep "<task " ${RESULTS_DIR}hotspot-*.log >${RESULTS_DIR}log.log +[ -f ${BASE_DIR}errorlog.txt ] && mv ${BASE_DIR}errorlog.txt ${RESULTS_DIR} + diff --git a/frameworks/OpenTelemetry/labels.sh b/frameworks/OpenTelemetry/labels.sh new file mode 100644 index 0000000000000000000000000000000000000000..31c1d4f1398a629846072894a6bbb2305bb4be7a --- /dev/null +++ b/frameworks/OpenTelemetry/labels.sh @@ -0,0 +1,10 @@ +TITLE[0]="No instrumentation" +TITLE[1]="OpenTelemetry No Logging" +TITLE[2]="OpenTelemetry Logging" +TITLE[3]="OpenTelemetry Zipkin" +MACHINE_TYPE=`uname -m`; +if [ ${MACHINE_TYPE} == 'x86_64' ] +then + TITLE[4]="OpenTelemetry Prometheus" + #TITLE[5]="OpenTelemetry Jaeger" +fi diff --git a/frameworks/OpenTelemetry/runExponentialSizes.sh b/frameworks/OpenTelemetry/runExponentialSizes.sh new file mode 100755 index 0000000000000000000000000000000000000000..904e77a978c632b79f0e34bb978c44a384e1cb9a --- /dev/null +++ b/frameworks/OpenTelemetry/runExponentialSizes.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +RESULTS_DIR=results-OpenTelemetry/ +mkdir -p $RESULTS_DIR + +for depth in 2 4 8 16 32 64 128 +do + export RECURSION_DEPTH=$depth + echo "Running $depth" + ./benchmark.sh &> $RESULTS_DIR/$depth.txt + mv $RESULTS_DIR/results.zip $RESULTS_DIR/results-$RECURSION_DEPTH.zip +done diff --git a/frameworks/SPASSmeter/benchmark.sh b/frameworks/SPASSmeter/benchmark.sh old mode 100644 new mode 100755 index d7fdb643a7498aa381604e65be7cee03f9a7450c..9c5d98f4cc722f1dcebd5d5a9cd7db056d4837ac --- a/frameworks/SPASSmeter/benchmark.sh +++ b/frameworks/SPASSmeter/benchmark.sh @@ -15,13 +15,13 @@ TOTALCALLS=2000000 ## 2000000 METHODTIME=0 ## 500000 #MOREPARAMS="--quickstart" -MOREPARAMS="--application mooBench.monitoredApplication.MonitoredClassSimple ${MOREPARAMS}" +MOREPARAMS="--application moobench.application.MonitoredClassSimple ${MOREPARAMS}" TIME=`expr ${METHODTIME} \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} + ${SLEEPTIME} \* 4 \* ${NUM_LOOPS} \* ${RECURSIONDEPTH} + 50 \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} ` echo "Experiment will take circa ${TIME} seconds." echo "Removing and recreating '$RESULTSDIR'" -(rm -rf ${RESULTSDIR}) && mkdir ${RESULTSDIR} +(rm -rf ${RESULTSDIR}) && mkdir -p ${RESULTSDIR} #mkdir ${RESULTSDIR}stat/ # Clear spassmeter.log and initialize logging @@ -31,7 +31,7 @@ touch ${BASEDIR}spassmeter.log RAWFN="${RESULTSDIR}raw" JAVAARGS="-server" -JAVAARGS="${JAVAARGS} -d64" +JAVAARGS="${JAVAARGS} " JAVAARGS="${JAVAARGS} -Xms1G -Xmx4G" JAVAARGS="${JAVAARGS} -verbose:gc -XX:+PrintCompilation" #JAVAARGS="${JAVAARGS} -XX:+PrintInlining" @@ -73,10 +73,10 @@ for ((i=1;i<=${NUM_LOOPS};i+=1)); do #sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & ${JAVABIN}java ${JAVAARGS_NOINSTR} ${JAR} \ --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${THREADS} \ - --recursiondepth ${j} \ + --total-calls ${TOTALCALLS} \ + --method-time ${METHODTIME} \ + --total-threads ${THREADS} \ + --recursion-depth ${j} \ ${MOREPARAMS} #kill %sar [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log @@ -92,10 +92,10 @@ for ((i=1;i<=${NUM_LOOPS};i+=1)); do #sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & ${JAVABIN}java ${JAVAARGS_LTW} ${JAR} \ --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${THREADS} \ - --recursiondepth ${j} \ + --total-calls ${TOTALCALLS} \ + --method-time ${METHODTIME} \ + --total-threads ${THREADS} \ + --recursion-depth ${j} \ ${MOREPARAMS} #kill %sar [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log @@ -111,10 +111,10 @@ for ((i=1;i<=${NUM_LOOPS};i+=1)); do #sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & ${JAVABIN}java ${JAVAARGS_LTW_ASM} ${JAR} \ --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${THREADS} \ - --recursiondepth ${j} \ + --total-calls ${TOTALCALLS} \ + --method-time ${METHODTIME} \ + --total-threads ${THREADS} \ + --recursion-depth ${j} \ ${MOREPARAMS} #kill %sar [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log diff --git a/frameworks/common-functions.sh b/frameworks/common-functions.sh new file mode 100644 index 0000000000000000000000000000000000000000..9fc3bc4c2e57a66056bda5a705dab6a91a51cd6d --- /dev/null +++ b/frameworks/common-functions.sh @@ -0,0 +1,164 @@ +#!/bin/bash + +function getSum { + awk '{sum += $1; square += $1^2} END {print "Average: "sum/NR" Standard Deviation: "sqrt(square / NR - (sum/NR)^2)" Count: "NR}' +} + +## Clean up raw results +function cleanup-results() { + zip -jqr ${RESULTS_DIR}/results.zip ${RAWFN}* + rm -f ${RAWFN}* + [ -f ${DATA_DIR}/nohup.out ] && cp ${DATA_DIR}/nohup.out ${RESULTS_DIR} + [ -f ${DATA_DIR}/nohup.out ] && > ${DATA_DIR}/nohup.out +} + +function checkMoobenchApplication() { + if [ ! -f "MooBench.jar" ] + then + echo "MooBench.jar missing; please build it first using ./gradlew assemble in the main folder" + exit 1 + fi +} + +function getKiekerAgent() { + echo "Checking whether Kieker is present in $AGENT" + if [ ! -f $AGENT ] + then + # get agent + export VERSION_PATH=`curl "https://oss.sonatype.org/service/local/repositories/snapshots/content/net/kieker-monitoring/kieker/" | grep '<resourceURI>' | sed 's/ *<resourceURI>//g' | sed 's/<\/resourceURI>//g' | grep '/$'` + export AGENT_PATH=`curl "${VERSION_PATH}" | grep 'aspectj.jar</resourceURI' | sort | sed 's/ *<resourceURI>//g' | sed 's/<\/resourceURI>//g' | tail -1` + curl "${AGENT_PATH}" > "${AGENT}" + fi +} + +function getInspectItAgent() { + if [ ! -d agent ] + then + mkdir agent + cd agent + wget https://github.com/inspectIT/inspectit-ocelot/releases/download/1.11.1/inspectit-ocelot-agent-1.11.1.jar + cd .. + fi +} + +function getOpentelemetryAgent() { + if [ ! -f ${BASEDIR}lib/opentelemetry-javaagent-all.jar ] + then + mkdir -p ${BASEDIR}lib + wget --output-document=${BASEDIR}lib/opentelemetry-javaagent-all.jar \ + https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/latest/download/opentelemetry-javaagent-all.jar + fi +} + +function createRLabels() { + # Create R labels + LABELS="" + for I in "${TITLE[@]}" ; do + title="$I" + if [ "$LABELS" == "" ] ; then + LABELS="\"$title\"" + else + LABELS="${LABELS}, \"$title\"" + fi + done + echo $LABELS +} + +## Generate Results file +function run-r() { +R --vanilla --silent << EOF +results_fn="${RAWFN}" +outtxt_fn="${RESULTS_DIR}/results-text.txt" +outcsv_fn="${RESULTS_DIR}/results-text.csv" +configs.loop=${NUM_OF_LOOPS} +configs.recursion=${RECURSION_DEPTH} +configs.labels=c($LABELS) +results.count=${TOTAL_NUM_OF_CALLS} +results.skip=${TOTAL_NUM_OF_CALLS}/2 +source("${RSCRIPT_PATH}") +EOF +} + +function startZipkin { + if [ ! -d zipkin ] || [ ! -f zipkin/zipkin.jar ] + then + mkdir zipkin + cd zipkin + curl -sSL https://zipkin.io/quickstart.sh | bash -s + else + cd zipkin + fi + java -Xmx6g -jar zipkin.jar &> zipkin.txt & + pid=$! + sleep 5 + cd .. +} + +function periodicallyCurlPrometheus { + while [ true ] + do + echo "Curling for prometheus simulation..." + curl localhost:8888/metrics + sleep 15 + done +} + +function startPrometheus { + periodicallyCurlPrometheus & + pid=$! +} + +function stopBackgroundProcess { + kill $pid +} + +function writeConfiguration() { + uname -a >${RESULTS_DIR}/configuration.txt + ${JAVABIN}java ${JAVAARGS} -version 2>>${RESULTS_DIR}/configuration.txt + echo "JAVAARGS: ${JAVAARGS}" >>${RESULTS_DIR}/configuration.txt + echo "" >>${RESULTS_DIR}/configuration.txt + echo "Runtime: circa ${TIME} seconds" >>${RESULTS_DIR}/configuration.txt + echo "" >>${RESULTS_DIR}/configuration.txt + echo "SLEEPTIME=${SLEEPTIME}" >>${RESULTS_DIR}/configuration.txt + echo "NUM_OF_LOOPS=${NUM_OF_LOOPS}" >>${RESULTS_DIR}/configuration.txt + echo "TOTAL_NUM_OF_CALLS=${TOTAL_NUM_OF_CALLS}" >>${RESULTS_DIR}/configuration.txt + echo "METHODTIME=${METHODTIME}" >>${RESULTS_DIR}/configuration.txt + echo "THREADS=${THREADS}" >>${RESULTS_DIR}/configuration.txt + echo "RECURSION_DEPTH=${RECURSION_DEPTH}" >>${RESULTS_DIR}/configuration.txt + sync +} + +function printIntermediaryResults { + for ((index=0;index<${#TITLE[@]};index+=1)); do + echo -n "Intermediary results "${TITLE[$index]}" " + cat $RESULTS_DIR/raw-*-${RECURSION_DEPTH}-${index}.csv | awk -F';' '{print $2}' | getSum + done +} + + +FRAMEWORK_NAME=$(basename -- "$BASE_DIR") +RESULTS_DIR="$BASE_DIR/results-$FRAMEWORK_NAME" +RAWFN=$RESULTS_DIR"/raw" + +# Initialize all unset parameters +if [ -z $SLEEP_TIME ]; then + SLEEP_TIME=30 ## 30 +fi +if [ -z $NUM_OF_LOOPS ]; then + NUM_OF_LOOPS=10 ## 10 +fi +if [ -z $THREADS ]; then + THREADS=1 ## 1 +fi +if [ -z $RECURSION_DEPTH ]; then + RECURSION_DEPTH=10 ## 10 +fi +if [ -z $TOTAL_NUM_OF_CALLS ]; then + TOTAL_NUM_OF_CALLS=2000000 ## 2000000 +fi +if [ -z $METHOD_TIME ]; then + METHOD_TIME=0 ## 500000 +fi +if [ -z $DEBUG ]; then + DEBUG=false ## false +fi diff --git a/frameworks/inspectIT/Benchmark (inspectIT).launch b/frameworks/inspectIT/Benchmark (inspectIT).launch deleted file mode 100644 index 19365e35eeee4e51bd9b75900cc5fb79bbea879d..0000000000000000000000000000000000000000 --- a/frameworks/inspectIT/Benchmark (inspectIT).launch +++ /dev/null @@ -1,14 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" standalone="no"?> -<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication"> -<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> -<listEntry value="/MooBench/src/mooBench/benchmark/Benchmark.java"/> -</listAttribute> -<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> -<listEntry value="1"/> -</listAttribute> -<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/> -<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="mooBench.benchmark.Benchmark"/> -<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-d 10 -h 1 -m 0 -t 1000 -o tmp/test.txt -q"/> -<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="MooBench"/> -<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-javaagent:frameworks/inspectIT/agent/inspectit-agent-mod.jar -Dinspectit.config=frameworks/inspectIT/config/isequence/"/> -</launchConfiguration> diff --git a/frameworks/inspectIT/README b/frameworks/inspectIT/README deleted file mode 100644 index 2340fa65d8201e25bba5dc35103312a69f14f8a6..0000000000000000000000000000000000000000 --- a/frameworks/inspectIT/README +++ /dev/null @@ -1,8 +0,0 @@ -Folder structure: - -agent/ -> add from download -CMR/ -> add from download -config/ -> present and preconfigured - - -the -inner experiments require a customized version of inspectIT, that is able to deactivate parts of its probes diff --git a/frameworks/inspectIT/benchmark-isequence-inner-remote.sh b/frameworks/inspectIT/benchmark-isequence-inner-remote.sh deleted file mode 100644 index 57bdc79cd9aa38bf79916398fb2e9b84c4820668..0000000000000000000000000000000000000000 --- a/frameworks/inspectIT/benchmark-isequence-inner-remote.sh +++ /dev/null @@ -1,213 +0,0 @@ -#!/bin/bash - -JAVABIN="/localhome/jwa/jre/bin/" -REMOTEHOST="blade1" -REMOTEBASEDIR="/localhome/jwa/MooBench-inspectIT/" - -RSCRIPTDIR=r/ -BASEDIR=./ -RESULTSDIR="${BASEDIR}tmp/results-inspectit-isequence/" - -SLEEPTIME=30 ## 30 -NUM_LOOPS=10 ## 10 -THREADS=1 ## 1 -RECURSIONDEPTH=10 ## 10 -TOTALCALLS=2000000 ## 2000000 -METHODTIME=0 ## 0 - -#MOREPARAMS="--quickstart" -MOREPARAMS="${MOREPARAMS}" - -TIME=`expr ${METHODTIME} \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} + ${SLEEPTIME} \* 4 \* ${NUM_LOOPS} \* ${RECURSIONDEPTH} + 50 \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} ` -echo "Experiment will take circa ${TIME} seconds." - -echo "Removing and recreating '$RESULTSDIR'" -(rm -rf ${RESULTSDIR}) && mkdir ${RESULTSDIR} -mkdir ${RESULTSDIR}stat/ - -# Clear inspectit.log and initialize logging -rm -f ${BASEDIR}inspectit.log -touch ${BASEDIR}inspectit.log - -RAWFN="${RESULTSDIR}raw" - -JAVAARGS="-server" -JAVAARGS="${JAVAARGS} -d64" -JAVAARGS="${JAVAARGS} -Xms1G -Xmx4G" -JAVAARGS="${JAVAARGS} -verbose:gc -XX:+PrintCompilation" -#JAVAARGS="${JAVAARGS} -XX:+PrintInlining" -#JAVAARGS="${JAVAARGS} -XX:+UnlockDiagnosticVMOptions -XX:+LogCompilation" -#JAVAARGS="${JAVAARGS} -Djava.compiler=NONE" -JAR="-jar MooBench.jar" - -JAVAARGS_NOINSTR="${JAVAARGS}" -JAVAARGS_LTW="${JAVAARGS} -javaagent:${BASEDIR}agent/inspectit-agent-mod.jar -Djava.util.logging.config.file=${BASEDIR}config/logging.properties -Dinspectit.config=${BASEDIR}config/isequence-remote/" -JAVAARGS_INSPECTIT_DISABLED="${JAVAARGS_LTW} -Dinspectit.disableProbe=true" -JAVAARGS_INSPECTIT_NOSTORAGE="${JAVAARGS_LTW} -Dinspectit.disableStorage=true" -JAVAARGS_INSPECTIT_FULL="${JAVAARGS_LTW}" - -CMR_ARGS="-d64 -Xms12G -Xmx12G -Xmn4G -XX:MaxPermSize=128m -XX:PermSize=128m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+DisableExplicitGC -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=90 -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:+UseBiasedLocking -XX:+HeapDumpOnOutOfMemoryError -server -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintTenuringDistribution -Dinspectit.logging.config=CMR/logging-config.xml" - -## Write configuration -uname -a >${RESULTSDIR}configuration.txt -${JAVABIN}java ${JAVAARGS} -version 2>>${RESULTSDIR}configuration.txt -echo "JAVAARGS: ${JAVAARGS}" >>${RESULTSDIR}configuration.txt -echo "" >>${RESULTSDIR}configuration.txt -echo "Runtime: circa ${TIME} seconds" >>${RESULTSDIR}configuration.txt -echo "" >>${RESULTSDIR}configuration.txt -echo "SLEEPTIME=${SLEEPTIME}" >>${RESULTSDIR}configuration.txt -echo "NUM_LOOPS=${NUM_LOOPS}" >>${RESULTSDIR}configuration.txt -echo "TOTALCALLS=${TOTALCALLS}" >>${RESULTSDIR}configuration.txt -echo "METHODTIME=${METHODTIME}" >>${RESULTSDIR}configuration.txt -echo "THREADS=${THREADS}" >>${RESULTSDIR}configuration.txt -echo "RECURSIONDEPTH=${RECURSIONDEPTH}" >>${RESULTSDIR}configuration.txt -sync - -## Execute Benchmark -for ((i=1;i<=${NUM_LOOPS};i+=1)); do - j=${RECURSIONDEPTH} - k=0 - echo "## Starting iteration ${i}/${NUM_LOOPS}" - echo "## Starting iteration ${i}/${NUM_LOOPS}" >>${BASEDIR}inspectit.log - - # No instrumentation - k=`expr ${k} + 1` - echo " # ${i}.${j}.${k} No instrumentation" - echo " # ${i}.${j}.${k} No instrumentation" >>${BASEDIR}inspectit.log - sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & - ${JAVABIN}java ${JAVAARGS_NOINSTR} ${JAR} \ - --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${THREADS} \ - --recursiondepth ${j} \ - ${MOREPARAMS} - kill %sar - [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log - echo >>${BASEDIR}inspectit.log - echo >>${BASEDIR}inspectit.log - sync - sleep ${SLEEPTIME} - - # InspectIT (disabled) - k=`expr ${k} + 1` - echo " # ${i}.${j}.${k} InspectIT (disabled)" - echo " # ${i}.${j}.${k} InspectIT (disabled)" >>${BASEDIR}inspectit.log - sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & - ssh ${REMOTEHOST} "nohup ${JAVABIN}java ${CMR_ARGS} -Xloggc:${REMOTEBASEDIR}logs/gc.log -jar ${REMOTEBASEDIR}/CMR/inspectit-cmr-mod.jar 1>>${REMOTEBASEDIR}logs/out.log 2>&1 &" - sleep 10 - ${JAVABIN}java ${JAVAARGS_INSPECTIT_DISABLED} ${JAR} \ - --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${THREADS} \ - --recursiondepth ${j} \ - ${MOREPARAMS} - ssh ${REMOTEHOST} "pkill -f 'java'" - sleep 10 - kill %sar - [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log - echo >>${BASEDIR}inspectit.log - echo >>${BASEDIR}inspectit.log - sync - sleep ${SLEEPTIME} - - # InspectIT (no storage) - k=`expr ${k} + 1` - echo " # ${i}.${j}.${k} InspectIT (no storage)" - echo " # ${i}.${j}.${k} InspectIT (no storage)" >>${BASEDIR}inspectit.log - sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & - ssh ${REMOTEHOST} "nohup ${JAVABIN}java ${CMR_ARGS} -Xloggc:${REMOTEBASEDIR}logs/gc.log -jar ${REMOTEBASEDIR}/CMR/inspectit-cmr-mod.jar 1>>${REMOTEBASEDIR}logs/out.log 2>&1 &" - sleep 10 - ${JAVABIN}java ${JAVAARGS_INSPECTIT_NOSTORAGE} ${JAR} \ - --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${THREADS} \ - --recursiondepth ${j} \ - ${MOREPARAMS} - ssh ${REMOTEHOST} "pkill -f 'java'" - sleep 10 - kill %sar - [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log - echo >>${BASEDIR}inspectit.log - echo >>${BASEDIR}inspectit.log - sync - sleep ${SLEEPTIME} - - # InspectIT (full) - k=`expr ${k} + 1` - echo " # ${i}.${j}.${k} InspectIT (full)" - echo " # ${i}.${j}.${k} InspectIT (full)" >>${BASEDIR}inspectit.log - sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & - ssh ${REMOTEHOST} "nohup ${JAVABIN}java ${CMR_ARGS} -Xloggc:${REMOTEBASEDIR}logs/gc.log -jar ${REMOTEBASEDIR}/CMR/inspectit-cmr-mod.jar 1>>${REMOTEBASEDIR}logs/out.log 2>&1 &" - sleep 10 - ${JAVABIN}java ${JAVAARGS_INSPECTIT_FULL} ${JAR} \ - --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${THREADS} \ - --recursiondepth ${j} \ - ${MOREPARAMS} - sleep 10 - ssh ${REMOTEHOST} "pkill -f 'java'" - sleep 10 - kill %sar - [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log - echo >>${BASEDIR}inspectit.log - echo >>${BASEDIR}inspectit.log - sync - sleep ${SLEEPTIME} - -done -zip -jqr ${RESULTSDIR}stat.zip ${RESULTSDIR}stat -rm -rf ${RESULTSDIR}stat/ -mv ${BASEDIR}inspectit.log ${RESULTSDIR}inspectit.log -[ -f ${RESULTSDIR}hotspot-1-${RECURSIONDEPTH}-1.log ] && grep "<task " ${RESULTSDIR}hotspot-*.log >${RESULTSDIR}log.log -[ -f ${BASEDIR}errorlog.txt ] && mv ${BASEDIR}errorlog.txt ${RESULTSDIR} - -## Generate Results file -# Timeseries -R --vanilla --silent <<EOF -results_fn="${RAWFN}" -output_fn="${RESULTSDIR}results-timeseries.pdf" -configs.loop=${NUM_LOOPS} -configs.recursion=c(${RECURSIONDEPTH}) -configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)") -configs.colors=c("black","red","blue","green") -results.count=${TOTALCALLS} -tsconf.min=(${METHODTIME}/1000) -tsconf.max=(${METHODTIME}/1000)+100 -source("${RSCRIPTDIR}timeseries.r") -EOF -# Timeseries-Average -R --vanilla --silent <<EOF -results_fn="${RAWFN}" -output_fn="${RESULTSDIR}results-timeseries-average.pdf" -configs.loop=${NUM_LOOPS} -configs.recursion=c(${RECURSIONDEPTH}) -configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)") -configs.colors=c("black","red","blue","green") -results.count=${TOTALCALLS} -tsconf.min=(${METHODTIME}/1000) -tsconf.max=(${METHODTIME}/1000)+100 -source("${RSCRIPTDIR}timeseries-average.r") -EOF -# Bars -R --vanilla --silent <<EOF -results_fn="${RAWFN}" -outtxt_fn="${RESULTSDIR}results-text.txt" -configs.loop=${NUM_LOOPS} -configs.recursion=c(${RECURSIONDEPTH}) -configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)") -configs.colors=c("black","red","blue","green") -results.count=${TOTALCALLS} -results.skip=${TOTALCALLS}*3/4 -source("${RSCRIPTDIR}stats.r") -EOF - -## Clean up raw results -zip -jqr ${RESULTSDIR}results.zip ${RAWFN}* -rm -f ${RAWFN}* -[ -f ${BASEDIR}nohup.out ] && cp ${BASEDIR}nohup.out ${RESULTSDIR} -[ -f ${BASEDIR}nohup.out ] && > ${BASEDIR}nohup.out diff --git a/frameworks/inspectIT/benchmark-isequence-inner-threaded.sh b/frameworks/inspectIT/benchmark-isequence-inner-threaded.sh deleted file mode 100644 index 8babe369c84ef7f8104c8367f69edc388cbac80d..0000000000000000000000000000000000000000 --- a/frameworks/inspectIT/benchmark-isequence-inner-threaded.sh +++ /dev/null @@ -1,226 +0,0 @@ -#!/bin/bash - -JAVABIN="" - -RSCRIPTDIR=r/ -BASEDIR=./ -RESULTSDIR="${BASEDIR}tmp/results-inspectit-isequence/" - -SLEEPTIME=30 ## 30 -NUM_LOOPS=10 ## 10 -THREADS=32 ## 32 -RECURSIONDEPTH=10 ## 10 -TOTALCALLS=200000 ## 2000000 -METHODTIME=0 ## 0 - -#MOREPARAMS="--quickstart" -MOREPARAMS="${MOREPARAMS}" - -TIME=`expr ${METHODTIME} \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} + ${SLEEPTIME} \* 4 \* ${NUM_LOOPS} \* ${RECURSIONDEPTH} + 50 \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} ` -echo "Experiment will take circa ${TIME} seconds." - -echo "Removing and recreating '$RESULTSDIR'" -(rm -rf ${RESULTSDIR}) && mkdir ${RESULTSDIR} -mkdir ${RESULTSDIR}stat/ - -# Clear inspectit.log and initialize logging -rm -f ${BASEDIR}inspectit.log -touch ${BASEDIR}inspectit.log -mkdir ${BASEDIR}logs/ - -RAWFN="${RESULTSDIR}raw" - -JAVAARGS="-server" -JAVAARGS="${JAVAARGS} -d64" -JAVAARGS="${JAVAARGS} -Xms1G -Xmx4G" -JAVAARGS="${JAVAARGS} -verbose:gc -XX:+PrintCompilation" -#JAVAARGS="${JAVAARGS} -XX:+PrintInlining" -#JAVAARGS="${JAVAARGS} -XX:+UnlockDiagnosticVMOptions -XX:+LogCompilation" -#JAVAARGS="${JAVAARGS} -Djava.compiler=NONE" -JAR="-jar MooBench.jar" - -JAVAARGS_NOINSTR="${JAVAARGS}" -JAVAARGS_LTW="${JAVAARGS} -javaagent:${BASEDIR}agent/inspectit-agent-mod.jar -Djava.util.logging.config.file=${BASEDIR}config/logging.properties -Dinspectit.config=${BASEDIR}config/isequence/" -JAVAARGS_INSPECTIT_DISABLED="${JAVAARGS_LTW} -Dinspectit.disableProbe=true" -JAVAARGS_INSPECTIT_NOSTORAGE="${JAVAARGS_LTW} -Dinspectit.disableStorage=true" -JAVAARGS_INSPECTIT_FULL="${JAVAARGS_LTW}" - -CMR_ARGS="-d64 -Xms12G -Xmx12G -Xmn4G -XX:MaxPermSize=128m -XX:PermSize=128m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+DisableExplicitGC -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=90 -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:+UseBiasedLocking -XX:+HeapDumpOnOutOfMemoryError -server -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintTenuringDistribution -Dinspectit.logging.config=CMR/logging-config.xml" - -## Write configuration -uname -a >${RESULTSDIR}configuration.txt -${JAVABIN}java ${JAVAARGS} -version 2>>${RESULTSDIR}configuration.txt -echo "JAVAARGS: ${JAVAARGS}" >>${RESULTSDIR}configuration.txt -echo "" >>${RESULTSDIR}configuration.txt -echo "Runtime: circa ${TIME} seconds" >>${RESULTSDIR}configuration.txt -echo "" >>${RESULTSDIR}configuration.txt -echo "SLEEPTIME=${SLEEPTIME}" >>${RESULTSDIR}configuration.txt -echo "NUM_LOOPS=${NUM_LOOPS}" >>${RESULTSDIR}configuration.txt -echo "TOTALCALLS=${TOTALCALLS}" >>${RESULTSDIR}configuration.txt -echo "METHODTIME=${METHODTIME}" >>${RESULTSDIR}configuration.txt -echo "THREADS=${THREADS}" >>${RESULTSDIR}configuration.txt -echo "RECURSIONDEPTH=${RECURSIONDEPTH}" >>${RESULTSDIR}configuration.txt -sync - -## Execute Benchmark -for ((j=1;i<=${THREADS};j+=1)); do -for ((i=1;i<=${NUM_LOOPS};i+=1)); do - k=0 - echo "## Starting iteration ${i}/${NUM_LOOPS}" - echo "## Starting iteration ${i}/${NUM_LOOPS}" >>${BASEDIR}inspectit.log - - # No instrumentation - k=`expr ${k} + 1` - echo " # ${i}.${j}.${k} No instrumentation" - echo " # ${i}.${j}.${k} No instrumentation" >>${BASEDIR}inspectit.log - sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & - ${JAVABIN}java ${JAVAARGS_NOINSTR} ${JAR} \ - --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${j} \ - --recursiondepth ${RECURSIONDEPTH} \ - ${MOREPARAMS} - kill %sar - [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log - echo >>${BASEDIR}inspectit.log - echo >>${BASEDIR}inspectit.log - sync - sleep ${SLEEPTIME} - - # InspectIT (disabled) - k=`expr ${k} + 1` - echo " # ${i}.${j}.${k} InspectIT (disabled)" - echo " # ${i}.${j}.${k} InspectIT (disabled)" >>${BASEDIR}inspectit.log - sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & - ${JAVABIN}java ${CMR_ARGS} -Xloggc:${BASEDIR}logs/gc.log -jar CMR/inspectit-cmr-mod.jar 1>>${BASEDIR}logs/out.log 2>&1 & - sleep 10 - ${JAVABIN}java ${JAVAARGS_INSPECTIT_DISABLED} ${JAR} \ - --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${j} \ - --recursiondepth ${RECURSIONDEPTH} \ - ${MOREPARAMS} - kill $! - sleep 10 - kill -9 $! - rm -rf ${BASEDIR}storage/ - rm -rf ${BASEDIR}db/ - kill %sar - [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log - echo >>${BASEDIR}inspectit.log - echo >>${BASEDIR}inspectit.log - sync - sleep ${SLEEPTIME} - - # InspectIT (no storage) - k=`expr ${k} + 1` - echo " # ${i}.${j}.${k} InspectIT (no storage)" - echo " # ${i}.${j}.${k} InspectIT (no storage)" >>${BASEDIR}inspectit.log - sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & - ${JAVABIN}java ${CMR_ARGS} -Xloggc:${BASEDIR}logs/gc.log -jar CMR/inspectit-cmr-mod.jar 1>>${BASEDIR}logs/out.log 2>&1 & - sleep 10 - ${JAVABIN}java ${JAVAARGS_INSPECTIT_NOSTORAGE} ${JAR} \ - --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${j} \ - --recursiondepth ${RECURSIONDEPTH} \ - ${MOREPARAMS} - kill $! - sleep 10 - kill -9 $! - rm -rf ${BASEDIR}storage/ - rm -rf ${BASEDIR}db/ - kill %sar - [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log - echo >>${BASEDIR}inspectit.log - echo >>${BASEDIR}inspectit.log - sync - sleep ${SLEEPTIME} - - # InspectIT (full) - k=`expr ${k} + 1` - echo " # ${i}.${j}.${k} InspectIT (full)" - echo " # ${i}.${j}.${k} InspectIT (full)" >>${BASEDIR}inspectit.log - sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & - ${JAVABIN}java ${CMR_ARGS} -Xloggc:${BASEDIR}logs/gc.log -jar CMR/inspectit-cmr-mod.jar 1>>${BASEDIR}logs/out.log 2>&1 & - sleep 10 - ${JAVABIN}java ${JAVAARGS_INSPECTIT_FULL} ${JAR} \ - --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${j} \ - --recursiondepth ${RECURSIONDEPTH} \ - ${MOREPARAMS} - sleep 10 - kill $! - sleep 10 - kill -9 $! - rm -rf ${BASEDIR}storage/ - rm -rf ${BASEDIR}db/ - kill %sar - [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log - echo >>${BASEDIR}inspectit.log - echo >>${BASEDIR}inspectit.log - sync - sleep ${SLEEPTIME} - -done -done -zip -jqr ${RESULTSDIR}stat.zip ${RESULTSDIR}stat -rm -rf ${RESULTSDIR}stat/ -mv ${BASEDIR}logs/ ${RESULTSDIR} -mv ${BASEDIR}inspectit.log ${RESULTSDIR}inspectit.log -[ -f ${RESULTSDIR}hotspot-1-${RECURSIONDEPTH}-1.log ] && grep "<task " ${RESULTSDIR}hotspot-*.log >${RESULTSDIR}log.log -[ -f ${BASEDIR}errorlog.txt ] && mv ${BASEDIR}errorlog.txt ${RESULTSDIR} - -## Generate Results file -# Timeseries -R --vanilla --silent <<EOF -results_fn="${RAWFN}" -output_fn="${RESULTSDIR}results-timeseries.pdf" -configs.loop=${NUM_LOOPS} -configs.recursion=c(${RECURSIONDEPTH}) -configs.threads=c(1:${THREADS}) -configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)") -configs.colors=c("black","red","blue","green") -results.count=${TOTALCALLS} -tsconf.min=(${METHODTIME}/1000) -tsconf.max=(${METHODTIME}/1000)+100 -source("${RSCRIPTDIR}timeseries-threads.r") -EOF -# Timeseries-Average -R --vanilla --silent <<EOF -results_fn="${RAWFN}" -output_fn="${RESULTSDIR}results-timeseries-average.pdf" -configs.loop=${NUM_LOOPS} -configs.recursion=c(${RECURSIONDEPTH}) -configs.threads=c(1:${THREADS}) -configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)") -configs.colors=c("black","red","blue","green") -results.count=${TOTALCALLS} -tsconf.min=(${METHODTIME}/1000) -tsconf.max=(${METHODTIME}/1000)+100 -source("${RSCRIPTDIR}timeseries-average.r") -EOF -# Bars -R --vanilla --silent <<EOF -results_fn="${RAWFN}" -outtxt_fn="${RESULTSDIR}results-text.txt" -configs.loop=${NUM_LOOPS} -configs.recursion=c(${RECURSIONDEPTH}) -configs.threads=c(1:${THREADS}) -configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)") -configs.colors=c("black","red","blue","green") -results.count=${TOTALCALLS} -results.skip=${TOTALCALLS}*3/4 -source("${RSCRIPTDIR}stats.r") -EOF - -## Clean up raw results -zip -jqr ${RESULTSDIR}results.zip ${RAWFN}* -rm -f ${RAWFN}* -[ -f ${BASEDIR}nohup.out ] && cp ${BASEDIR}nohup.out ${RESULTSDIR} -[ -f ${BASEDIR}nohup.out ] && > ${BASEDIR}nohup.out diff --git a/frameworks/inspectIT/benchmark-isequence-inner.sh b/frameworks/inspectIT/benchmark-isequence-inner.sh deleted file mode 100644 index 435f452cbcaf2f83e617f295a4a3434bff416186..0000000000000000000000000000000000000000 --- a/frameworks/inspectIT/benchmark-isequence-inner.sh +++ /dev/null @@ -1,224 +0,0 @@ -#!/bin/bash - -JAVABIN="" - -RSCRIPTDIR=r/ -BASEDIR=./ -RESULTSDIR="${BASEDIR}tmp/results-inspectit-isequence/" - -SLEEPTIME=30 ## 30 -NUM_LOOPS=10 ## 10 -THREADS=1 ## 1 -RECURSIONDEPTH=10 ## 10 -TOTALCALLS=2000000 ## 2000000 -METHODTIME=0 ## 0 - -#MOREPARAMS="--quickstart" -MOREPARAMS="${MOREPARAMS}" - -TIME=`expr ${METHODTIME} \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} + ${SLEEPTIME} \* 4 \* ${NUM_LOOPS} \* ${RECURSIONDEPTH} + 50 \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} ` -echo "Experiment will take circa ${TIME} seconds." - -echo "Removing and recreating '$RESULTSDIR'" -(rm -rf ${RESULTSDIR}) && mkdir ${RESULTSDIR} -mkdir ${RESULTSDIR}stat/ - -# Clear inspectit.log and initialize logging -rm -f ${BASEDIR}inspectit.log -touch ${BASEDIR}inspectit.log -mkdir ${BASEDIR}logs/ - -RAWFN="${RESULTSDIR}raw" - -JAVAARGS="-server" -JAVAARGS="${JAVAARGS} -d64" -JAVAARGS="${JAVAARGS} -Xms1G -Xmx4G" -JAVAARGS="${JAVAARGS} -verbose:gc -XX:+PrintCompilation" -#JAVAARGS="${JAVAARGS} -XX:+PrintInlining" -#JAVAARGS="${JAVAARGS} -XX:+UnlockDiagnosticVMOptions -XX:+LogCompilation" -#JAVAARGS="${JAVAARGS} -Djava.compiler=NONE" -JAR="-jar MooBench.jar" - -JAVAARGS_NOINSTR="${JAVAARGS}" -JAVAARGS_LTW="${JAVAARGS} -javaagent:${BASEDIR}agent/inspectit-agent-mod.jar -Djava.util.logging.config.file=${BASEDIR}config/logging.properties -Dinspectit.config=${BASEDIR}config/isequence/" -JAVAARGS_INSPECTIT_DISABLED="${JAVAARGS_LTW} -Dinspectit.disableProbe=true" -JAVAARGS_INSPECTIT_NOSTORAGE="${JAVAARGS_LTW} -Dinspectit.disableStorage=true" -JAVAARGS_INSPECTIT_FULL="${JAVAARGS_LTW}" - -CMR_ARGS="-d64 -Xms12G -Xmx12G -Xmn4G -XX:MaxPermSize=128m -XX:PermSize=128m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+DisableExplicitGC -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=90 -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:+UseBiasedLocking -XX:+HeapDumpOnOutOfMemoryError -server -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintTenuringDistribution -Dinspectit.logging.config=config/logging-config.xml" - -## Write configuration -uname -a >${RESULTSDIR}configuration.txt -${JAVABIN}java ${JAVAARGS} -version 2>>${RESULTSDIR}configuration.txt -echo "JAVAARGS: ${JAVAARGS}" >>${RESULTSDIR}configuration.txt -echo "" >>${RESULTSDIR}configuration.txt -echo "Runtime: circa ${TIME} seconds" >>${RESULTSDIR}configuration.txt -echo "" >>${RESULTSDIR}configuration.txt -echo "SLEEPTIME=${SLEEPTIME}" >>${RESULTSDIR}configuration.txt -echo "NUM_LOOPS=${NUM_LOOPS}" >>${RESULTSDIR}configuration.txt -echo "TOTALCALLS=${TOTALCALLS}" >>${RESULTSDIR}configuration.txt -echo "METHODTIME=${METHODTIME}" >>${RESULTSDIR}configuration.txt -echo "THREADS=${THREADS}" >>${RESULTSDIR}configuration.txt -echo "RECURSIONDEPTH=${RECURSIONDEPTH}" >>${RESULTSDIR}configuration.txt -sync - -## Execute Benchmark -for ((i=1;i<=${NUM_LOOPS};i+=1)); do - j=${RECURSIONDEPTH} - k=0 - echo "## Starting iteration ${i}/${NUM_LOOPS}" - echo "## Starting iteration ${i}/${NUM_LOOPS}" >>${BASEDIR}inspectit.log - - # No instrumentation - k=`expr ${k} + 1` - echo " # ${i}.${j}.${k} No instrumentation" - echo " # ${i}.${j}.${k} No instrumentation" >>${BASEDIR}inspectit.log - sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & - ${JAVABIN}java ${JAVAARGS_NOINSTR} ${JAR} \ - --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${THREADS} \ - --recursiondepth ${j} \ - ${MOREPARAMS} - kill %sar - [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log - echo >>${BASEDIR}inspectit.log - echo >>${BASEDIR}inspectit.log - sync - sleep ${SLEEPTIME} - - # InspectIT (disabled) - k=`expr ${k} + 1` - echo " # ${i}.${j}.${k} InspectIT (disabled)" - echo " # ${i}.${j}.${k} InspectIT (disabled)" >>${BASEDIR}inspectit.log - sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & - ${JAVABIN}java ${CMR_ARGS} -Xloggc:${BASEDIR}logs/gc.log -jar CMR/inspectit-cmr-mod.jar 1>>${BASEDIR}logs/out.log 2>&1 & - sleep 10 - ${JAVABIN}java ${JAVAARGS_INSPECTIT_DISABLED} ${JAR} \ - --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${THREADS} \ - --recursiondepth ${j} \ - ${MOREPARAMS} - sleep 10 - kill $! - sleep 10 - kill -9 $! - rm -rf ${BASEDIR}storage/ - rm -rf ${BASEDIR}db/ - kill %sar - [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log - echo >>${BASEDIR}inspectit.log - echo >>${BASEDIR}inspectit.log - sync - sleep ${SLEEPTIME} - - # InspectIT (no storage) - k=`expr ${k} + 1` - echo " # ${i}.${j}.${k} InspectIT (no storage)" - echo " # ${i}.${j}.${k} InspectIT (no storage)" >>${BASEDIR}inspectit.log - sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & - ${JAVABIN}java ${CMR_ARGS} -Xloggc:${BASEDIR}logs/gc.log -jar CMR/inspectit-cmr-mod.jar 1>>${BASEDIR}logs/out.log 2>&1 & - sleep 10 - ${JAVABIN}java ${JAVAARGS_INSPECTIT_NOSTORAGE} ${JAR} \ - --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${THREADS} \ - --recursiondepth ${j} \ - ${MOREPARAMS} - sleep 10 - kill $! - sleep 10 - kill -9 $! - rm -rf ${BASEDIR}storage/ - rm -rf ${BASEDIR}db/ - kill %sar - [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log - echo >>${BASEDIR}inspectit.log - echo >>${BASEDIR}inspectit.log - sync - sleep ${SLEEPTIME} - - # InspectIT (full) - k=`expr ${k} + 1` - echo " # ${i}.${j}.${k} InspectIT (full)" - echo " # ${i}.${j}.${k} InspectIT (full)" >>${BASEDIR}inspectit.log - sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & - ${JAVABIN}java ${CMR_ARGS} -Xloggc:${BASEDIR}logs/gc.log -jar CMR/inspectit-cmr-mod.jar 1>>${BASEDIR}logs/out.log 2>&1 & - sleep 10 - ${JAVABIN}java ${JAVAARGS_INSPECTIT_FULL} ${JAR} \ - --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${THREADS} \ - --recursiondepth ${j} \ - ${MOREPARAMS} - sleep 10 - kill $! - sleep 10 - kill -9 $! - rm -rf ${BASEDIR}storage/ - rm -rf ${BASEDIR}db/ - kill %sar - [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log - echo >>${BASEDIR}inspectit.log - echo >>${BASEDIR}inspectit.log - sync - sleep ${SLEEPTIME} - -done -zip -jqr ${RESULTSDIR}stat.zip ${RESULTSDIR}stat -rm -rf ${RESULTSDIR}stat/ -mv ${BASEDIR}logs/ ${RESULTSDIR} -mv ${BASEDIR}inspectit.log ${RESULTSDIR}inspectit.log -[ -f ${RESULTSDIR}hotspot-1-${RECURSIONDEPTH}-1.log ] && grep "<task " ${RESULTSDIR}hotspot-*.log >${RESULTSDIR}log.log -[ -f ${BASEDIR}errorlog.txt ] && mv ${BASEDIR}errorlog.txt ${RESULTSDIR} - -## Generate Results file -# Timeseries -R --vanilla --silent <<EOF -results_fn="${RAWFN}" -output_fn="${RESULTSDIR}results-timeseries.pdf" -configs.loop=${NUM_LOOPS} -configs.recursion=c(${RECURSIONDEPTH}) -configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)") -configs.colors=c("black","red","blue","green") -results.count=${TOTALCALLS} -tsconf.min=(${METHODTIME}/1000) -tsconf.max=(${METHODTIME}/1000)+100 -source("${RSCRIPTDIR}timeseries.r") -EOF -# Timeseries-Average -R --vanilla --silent <<EOF -results_fn="${RAWFN}" -output_fn="${RESULTSDIR}results-timeseries-average.pdf" -configs.loop=${NUM_LOOPS} -configs.recursion=c(${RECURSIONDEPTH}) -configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)") -configs.colors=c("black","red","blue","green") -results.count=${TOTALCALLS} -tsconf.min=(${METHODTIME}/1000) -tsconf.max=(${METHODTIME}/1000)+100 -source("${RSCRIPTDIR}timeseries-average.r") -EOF -# Bars -R --vanilla --silent <<EOF -results_fn="${RAWFN}" -outtxt_fn="${RESULTSDIR}results-text.txt" -configs.loop=${NUM_LOOPS} -configs.recursion=c(${RECURSIONDEPTH}) -configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)") -configs.colors=c("black","red","blue","green") -results.count=${TOTALCALLS} -results.skip=${TOTALCALLS}*3/4 -source("${RSCRIPTDIR}stats.r") -EOF - -## Clean up raw results -zip -jqr ${RESULTSDIR}results.zip ${RAWFN}* -rm -f ${RAWFN}* -[ -f ${BASEDIR}nohup.out ] && cp ${BASEDIR}nohup.out ${RESULTSDIR} -[ -f ${BASEDIR}nohup.out ] && > ${BASEDIR}nohup.out diff --git a/frameworks/inspectIT/benchmark-timer-inner.sh b/frameworks/inspectIT/benchmark-timer-inner.sh deleted file mode 100644 index 3b55a447bcb4725c6cea641133732dc03493641c..0000000000000000000000000000000000000000 --- a/frameworks/inspectIT/benchmark-timer-inner.sh +++ /dev/null @@ -1,220 +0,0 @@ -#!/bin/bash - -JAVABIN="" - -RSCRIPTDIR=r/ -BASEDIR=./ -RESULTSDIR="${BASEDIR}tmp/results-inspectit-timer/" - -SLEEPTIME=30 ## 30 -NUM_LOOPS=10 ## 10 -THREADS=1 ## 1 -RECURSIONDEPTH=10 ## 10 -TOTALCALLS=2000000 ## 2000000 -METHODTIME=0 ## 0 - -#MOREPARAMS="--quickstart" -MOREPARAMS="${MOREPARAMS}" - -TIME=`expr ${METHODTIME} \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} + ${SLEEPTIME} \* 4 \* ${NUM_LOOPS} \* ${RECURSIONDEPTH} + 50 \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} ` -echo "Experiment will take circa ${TIME} seconds." - -echo "Removing and recreating '$RESULTSDIR'" -(rm -rf ${RESULTSDIR}) && mkdir ${RESULTSDIR} -mkdir ${RESULTSDIR}stat/ - -# Clear inspectit.log and initialize logging -rm -f ${BASEDIR}inspectit.log -touch ${BASEDIR}inspectit.log -mkdir ${BASEDIR}logs/ - -RAWFN="${RESULTSDIR}raw" - -JAVAARGS="-server" -JAVAARGS="${JAVAARGS} -d64" -JAVAARGS="${JAVAARGS} -Xms1G -Xmx4G" -JAVAARGS="${JAVAARGS} -verbose:gc -XX:+PrintCompilation" -#JAVAARGS="${JAVAARGS} -XX:+PrintInlining" -#JAVAARGS="${JAVAARGS} -XX:+UnlockDiagnosticVMOptions -XX:+LogCompilation" -#JAVAARGS="${JAVAARGS} -Djava.compiler=NONE" -JAR="-jar MooBench.jar" - -JAVAARGS_NOINSTR="${JAVAARGS}" -JAVAARGS_LTW="${JAVAARGS} -javaagent:${BASEDIR}agent/inspectit-agent-mod.jar -Djava.util.logging.config.file=${BASEDIR}config/logging.properties -Dinspectit.config=${BASEDIR}config/timer/" -JAVAARGS_INSPECTIT_DISABLED="${JAVAARGS_LTW} -Dinspectit.disableProbe=true" -JAVAARGS_INSPECTIT_NOSTORAGE="${JAVAARGS_LTW} -Dinspectit.disableStorage=true" -JAVAARGS_INSPECTIT_FULL="${JAVAARGS_LTW}" - -CMR_ARGS="-d64 -Xms12G -Xmx12G -Xmn4G -XX:MaxPermSize=128m -XX:PermSize=128m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+DisableExplicitGC -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=90 -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:+UseBiasedLocking -XX:+HeapDumpOnOutOfMemoryError -server -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintTenuringDistribution -Dinspectit.logging.config=config/logging-config.xml" - -## Write configuration -uname -a >${RESULTSDIR}configuration.txt -${JAVABIN}java ${JAVAARGS} -version 2>>${RESULTSDIR}configuration.txt -echo "JAVAARGS: ${JAVAARGS}" >>${RESULTSDIR}configuration.txt -echo "" >>${RESULTSDIR}configuration.txt -echo "Runtime: circa ${TIME} seconds" >>${RESULTSDIR}configuration.txt -echo "" >>${RESULTSDIR}configuration.txt -echo "SLEEPTIME=${SLEEPTIME}" >>${RESULTSDIR}configuration.txt -echo "NUM_LOOPS=${NUM_LOOPS}" >>${RESULTSDIR}configuration.txt -echo "TOTALCALLS=${TOTALCALLS}" >>${RESULTSDIR}configuration.txt -echo "METHODTIME=${METHODTIME}" >>${RESULTSDIR}configuration.txt -echo "THREADS=${THREADS}" >>${RESULTSDIR}configuration.txt -echo "RECURSIONDEPTH=${RECURSIONDEPTH}" >>${RESULTSDIR}configuration.txt -sync - -## Execute Benchmark -for ((i=1;i<=${NUM_LOOPS};i+=1)); do - j=${RECURSIONDEPTH} - k=0 - echo "## Starting iteration ${i}/${NUM_LOOPS}" - echo "## Starting iteration ${i}/${NUM_LOOPS}" >>${BASEDIR}inspectit.log - - # No instrumentation - k=`expr ${k} + 1` - echo " # ${i}.${j}.${k} No instrumentation" - echo " # ${i}.${j}.${k} No instrumentation" >>${BASEDIR}inspectit.log - sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & - ${JAVABIN}java ${JAVAARGS_NOINSTR} ${JAR} \ - --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${THREADS} \ - --recursiondepth ${j} \ - ${MOREPARAMS} - kill %sar - [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log - echo >>${BASEDIR}inspectit.log - echo >>${BASEDIR}inspectit.log - sync - sleep ${SLEEPTIME} - - # InspectIT (disabled) - k=`expr ${k} + 1` - echo " # ${i}.${j}.${k} InspectIT (disabled)" - echo " # ${i}.${j}.${k} InspectIT (disabled)" >>${BASEDIR}inspectit.log - sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & - ${JAVABIN}java ${CMR_ARGS} -Xloggc:${BASEDIR}logs/gc.log -jar CMR/inspectit-cmr-mod.jar 1>>${BASEDIR}logs/out.log 2>&1 & - sleep 10 - ${JAVABIN}java ${JAVAARGS_INSPECTIT_DISABLED} ${JAR} \ - --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${THREADS} \ - --recursiondepth ${j} \ - ${MOREPARAMS} - sleep 10 - kill $! - sleep 10 - rm -rf ${BASEDIR}storage/ - rm -rf ${BASEDIR}db/ - kill %sar - [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log - echo >>${BASEDIR}inspectit.log - echo >>${BASEDIR}inspectit.log - sync - sleep ${SLEEPTIME} - - # InspectIT (no storage) - k=`expr ${k} + 1` - echo " # ${i}.${j}.${k} InspectIT (no storage)" - echo " # ${i}.${j}.${k} InspectIT (no storage)" >>${BASEDIR}inspectit.log - sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & - ${JAVABIN}java ${CMR_ARGS} -Xloggc:${BASEDIR}logs/gc.log -jar CMR/inspectit-cmr-mod.jar 1>>${BASEDIR}logs/out.log 2>&1 & - sleep 10 - ${JAVABIN}java ${JAVAARGS_INSPECTIT_NOSTORAGE} ${JAR} \ - --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${THREADS} \ - --recursiondepth ${j} \ - ${MOREPARAMS} - sleep 10 - kill $! - sleep 10 - rm -rf ${BASEDIR}storage/ - rm -rf ${BASEDIR}db/ - kill %sar - [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log - echo >>${BASEDIR}inspectit.log - echo >>${BASEDIR}inspectit.log - sync - sleep ${SLEEPTIME} - - # InspectIT (full) - k=`expr ${k} + 1` - echo " # ${i}.${j}.${k} InspectIT (full)" - echo " # ${i}.${j}.${k} InspectIT (full)" >>${BASEDIR}inspectit.log - sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & - ${JAVABIN}java ${CMR_ARGS} -Xloggc:${BASEDIR}logs/gc.log -jar CMR/inspectit-cmr-mod.jar 1>>${BASEDIR}logs/out.log 2>&1 & - sleep 10 - ${JAVABIN}java ${JAVAARGS_INSPECTIT_FULL} ${JAR} \ - --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${THREADS} \ - --recursiondepth ${j} \ - ${MOREPARAMS} - sleep 10 - kill $! - sleep 10 - rm -rf ${BASEDIR}storage/ - rm -rf ${BASEDIR}db/ - kill %sar - [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log - echo >>${BASEDIR}inspectit.log - echo >>${BASEDIR}inspectit.log - sync - sleep ${SLEEPTIME} - -done -zip -jqr ${RESULTSDIR}stat.zip ${RESULTSDIR}stat -rm -rf ${RESULTSDIR}stat/ -mv ${BASEDIR}logs/ ${RESULTSDIR} -mv ${BASEDIR}inspectit.log ${RESULTSDIR}inspectit.log -[ -f ${RESULTSDIR}hotspot-1-${RECURSIONDEPTH}-1.log ] && grep "<task " ${RESULTSDIR}hotspot-*.log >${RESULTSDIR}log.log -[ -f ${BASEDIR}errorlog.txt ] && mv ${BASEDIR}errorlog.txt ${RESULTSDIR} - -## Generate Results file -# Timeseries -R --vanilla --silent <<EOF -results_fn="${RAWFN}" -output_fn="${RESULTSDIR}results-timeseries.pdf" -configs.loop=${NUM_LOOPS} -configs.recursion=c(${RECURSIONDEPTH}) -configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)") -configs.colors=c("black","red","blue","green") -results.count=${TOTALCALLS} -tsconf.min=(${METHODTIME}/1000) -tsconf.max=(${METHODTIME}/1000)+300 -source("${RSCRIPTDIR}timeseries.r") -EOF -# Timeseries-Average -R --vanilla --silent <<EOF -results_fn="${RAWFN}" -output_fn="${RESULTSDIR}results-timeseries-average.pdf" -configs.loop=${NUM_LOOPS} -configs.recursion=c(${RECURSIONDEPTH}) -configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)") -configs.colors=c("black","red","blue","green") -results.count=${TOTALCALLS} -tsconf.min=(${METHODTIME}/1000) -tsconf.max=(${METHODTIME}/1000)+300 -source("${RSCRIPTDIR}timeseries-average.r") -EOF -# Bars -R --vanilla --silent <<EOF -results_fn="${RAWFN}" -outtxt_fn="${RESULTSDIR}results-text.txt" -configs.loop=${NUM_LOOPS} -configs.recursion=c(${RECURSIONDEPTH}) -configs.labels=c("No Probe","InspectIT (disabled)","InspectIT (no storage)","InspectIT (full)") -results.count=${TOTALCALLS} -results.skip=${TOTALCALLS}*3/4 -source("${RSCRIPTDIR}stats.r") -EOF - -## Clean up raw results -zip -jqr ${RESULTSDIR}results.zip ${RAWFN}* -rm -f ${RAWFN}* -[ -f ${BASEDIR}nohup.out ] && cp ${BASEDIR}nohup.out ${RESULTSDIR} -[ -f ${BASEDIR}nohup.out ] && > ${BASEDIR}nohup.out diff --git a/frameworks/inspectIT/benchmark.sh b/frameworks/inspectIT/benchmark.sh old mode 100644 new mode 100755 index 006d01ced2b44b0434ac7386c7c4a68196bcf651..78498bdc8d045b1882c2c09c084bc8ebace8482f --- a/frameworks/inspectIT/benchmark.sh +++ b/frameworks/inspectIT/benchmark.sh @@ -1,214 +1,173 @@ #!/bin/bash +function runNoInstrumentation { + # No instrumentation + echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} + echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} >>${BASE_DIR}/inspectIT.log + ${JAVABIN}java ${JAVAARGS_NOINSTR} ${JAR} \ + --output-filename ${RAWFN}-${i}-$RECURSION_DEPTH-${k}.csv \ + --total-calls ${TOTAL_NUM_OF_CALLS} \ + --method-time ${METHOD_TIME} \ + --total-threads ${THREADS} \ + --recursion-depth ${RECURSION_DEPTH} \ + ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt +} + +function runInspectITDeactivated { + k=`expr ${k} + 1` + echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} + echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} >>${BASE_DIR}/inspectIT.log + sleep $SLEEP_TIME + ${JAVABIN}java ${JAVAARGS_INSPECTIT_DEACTIVATED} ${JAR} \ + --output-filename ${RAWFN}-${i}-$RECURSION_DEPTH-${k}.csv \ + --total-calls ${TOTAL_NUM_OF_CALLS} \ + --method-time ${METHOD_TIME} \ + --total-threads ${THREADS} \ + --recursion-depth ${RECURSION_DEPTH} \ + --force-terminate \ + ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt + sleep $SLEEP_TIME +} + +function runInspectITNullWriter { + k=`expr ${k} + 1` + echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} + echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} >>${BASE_DIR}/inspectIT.log + sleep $SLEEP_TIME + ${JAVABIN}java ${JAVAARGS_INSPECTIT_NULLWRITER} ${JAR} \ + --output-filename ${RAWFN}-${i}-$RECURSION_DEPTH-${k}.csv \ + --total-calls ${TOTAL_NUM_OF_CALLS} \ + --method-time ${METHOD_TIME} \ + --total-threads ${THREADS} \ + --recursion-depth ${RECURSION_DEPTH} \ + --force-terminate \ + ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt + sleep $SLEEP_TIME +} + + +function runInspectITZipkin { + # InspectIT (minimal) + k=`expr ${k} + 1` + echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} + echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} >>${BASE_DIR}/inspectIT.log + startZipkin + sleep $SLEEP_TIME + ${JAVABIN}java ${JAVAARGS_INSPECTIT_ZIPKIN} ${JAR} \ + --output-filename ${RAWFN}-${i}-$RECURSION_DEPTH-${k}.csv \ + --total-calls ${TOTAL_NUM_OF_CALLS} \ + --method-time ${METHOD_TIME} \ + --total-threads ${THREADS} \ + --recursion-depth ${RECURSION_DEPTH} \ + --force-terminate \ + ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt + stopBackgroundProcess + sleep $SLEEP_TIME +} + +function runInspectITPrometheus { + # InspectIT (minimal) + k=`expr ${k} + 1` + echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} + echo " # ${i}.$RECURSION_DEPTH.${k} "${TITLE[$k]} >>${BASE_DIR}/inspectIT.log + startPrometheus + sleep $SLEEP_TIME + ${JAVABIN}java ${JAVAARGS_INSPECTIT_PROMETHEUS} ${JAR} \ + --output-filename ${RAWFN}-${i}-$RECURSION_DEPTH-${k}.csv \ + --total-calls ${TOTAL_NUM_OF_CALLS} \ + --method-time ${METHOD_TIME} \ + --total-threads ${THREADS} \ + --recursion-depth ${RECURSION_DEPTH} \ + --force-terminate \ + ${MOREPARAMS} &> ${RESULTS_DIR}/output_"$i"_"$RECURSION_DEPTH"_$k.txt + stopBackgroundProcess + sleep $SLEEP_TIME +} + +function cleanup { + [ -f ${BASE_DIR}hotspot.log ] && mv ${BASE_DIR}hotspot.log ${RESULTS_DIR}hotspot-${i}-${j}-${k}.log + echo >>${BASE_DIR}/inspectIT.log + echo >>${BASE_DIR}/inspectIT.log + sync + sleep ${SLEEP_TIME} +} + +function getSum { + awk '{sum += $1; square += $1^2} END {print "Average: "sum/NR" Standard Deviation: "sqrt(square / NR - (sum/NR)^2)" Count: "NR}' +} + JAVABIN="" -RSCRIPTDIR=r/ -BASEDIR=./ -RESULTSDIR="${BASEDIR}tmp/results-inspectit/" +BASE_DIR=$(pwd) +RSCRIPT_PATH="../stats.csv.r" -SLEEPTIME=30 ## 30 -NUM_LOOPS=10 ## 10 -THREADS=1 ## 1 -RECURSIONDEPTH=10 ## 10 -TOTALCALLS=2000000 ## 2000000 -METHODTIME=500000 ## 500000 +source ../common-functions.sh +source labels.sh + +checkMoobenchApplication + +getInspectItAgent #MOREPARAMS="--quickstart" MOREPARAMS="${MOREPARAMS}" -TIME=`expr ${METHODTIME} \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} + ${SLEEPTIME} \* 4 \* ${NUM_LOOPS} \* ${RECURSIONDEPTH} + 50 \* ${TOTALCALLS} / 1000000000 \* 4 \* ${RECURSIONDEPTH} \* ${NUM_LOOPS} ` +TIME=`expr ${METHOD_TIME} \* ${TOTAL_NUM_OF_CALLS} / 1000000000 \* 4 \* ${RECURSION_DEPTH} \* ${NUM_OF_LOOPS} + ${SLEEP_TIME} \* 4 \* ${NUM_OF_LOOPS} \* ${RECURSION_DEPTH} + 50 \* ${TOTAL_NUM_OF_CALLS} / 1000000000 \* 4 \* ${RECURSION_DEPTH} \* ${NUM_OF_LOOPS} ` echo "Experiment will take circa ${TIME} seconds." -echo "Removing and recreating '$RESULTSDIR'" -(rm -rf ${RESULTSDIR}) && mkdir ${RESULTSDIR} -mkdir ${RESULTSDIR}stat/ +echo "Removing and recreating '$RESULTS_DIR'" +(rm -rf ${RESULTS_DIR}/**csv) && mkdir -p ${RESULTS_DIR} # Clear inspectit.log and initialize logging -rm -f ${BASEDIR}inspectit.log -touch ${BASEDIR}inspectit.log -mkdir ${BASEDIR}logs/ - -RAWFN="${RESULTSDIR}raw" +rm -f ${BASE_DIR}/inspectIT.log +touch ${BASE_DIR}/inspectIT.log JAVAARGS="-server" -JAVAARGS="${JAVAARGS} -d64" -JAVAARGS="${JAVAARGS} -Xms1G -Xmx4G" -JAVAARGS="${JAVAARGS} -verbose:gc -XX:+PrintCompilation" -#JAVAARGS="${JAVAARGS} -XX:+PrintInlining" -#JAVAARGS="${JAVAARGS} -XX:+UnlockDiagnosticVMOptions -XX:+LogCompilation" -#JAVAARGS="${JAVAARGS} -Djava.compiler=NONE" -JAR="-jar MooBench.jar" +JAVAARGS="${JAVAARGS} -Xms1G -Xmx2G" +JAVAARGS="${JAVAARGS} -verbose:gc " +JAR="-jar MooBench.jar --application moobench.application.MonitoredClassSimple" JAVAARGS_NOINSTR="${JAVAARGS}" -JAVAARGS_LTW="${JAVAARGS} -javaagent:${BASEDIR}agent/inspectit-agent-mod.jar -Djava.util.logging.config.file=${BASEDIR}config/logging.properties" -JAVAARGS_INSPECTIT_MINIMAL="${JAVAARGS_LTW} -Dinspectit.config=${BASEDIR}config/minimal/" -JAVAARGS_INSPECTIT_FULL="${JAVAARGS_LTW} -Dinspectit.config=${BASEDIR}config/timer/" - -CMR_ARGS="-d64 -Xms12G -Xmx12G -Xmn4G -XX:MaxPermSize=128m -XX:PermSize=128m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=80 -XX:+UseCMSInitiatingOccupancyOnly -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+DisableExplicitGC -XX:SurvivorRatio=4 -XX:TargetSurvivorRatio=90 -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:+UseBiasedLocking -XX:+HeapDumpOnOutOfMemoryError -server -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -XX:+PrintTenuringDistribution -Dinspectit.logging.config=config/logging-config.xml" - -## Write configuration -uname -a >${RESULTSDIR}configuration.txt -${JAVABIN}java ${JAVAARGS} -version 2>>${RESULTSDIR}configuration.txt -echo "JAVAARGS: ${JAVAARGS}" >>${RESULTSDIR}configuration.txt -echo "" >>${RESULTSDIR}configuration.txt -echo "Runtime: circa ${TIME} seconds" >>${RESULTSDIR}configuration.txt -echo "" >>${RESULTSDIR}configuration.txt -echo "SLEEPTIME=${SLEEPTIME}" >>${RESULTSDIR}configuration.txt -echo "NUM_LOOPS=${NUM_LOOPS}" >>${RESULTSDIR}configuration.txt -echo "TOTALCALLS=${TOTALCALLS}" >>${RESULTSDIR}configuration.txt -echo "METHODTIME=${METHODTIME}" >>${RESULTSDIR}configuration.txt -echo "THREADS=${THREADS}" >>${RESULTSDIR}configuration.txt -echo "RECURSIONDEPTH=${RECURSIONDEPTH}" >>${RESULTSDIR}configuration.txt -sync +JAVAARGS_LTW="${JAVAARGS} -javaagent:${BASE_DIR}/agent/inspectit-ocelot-agent-1.11.1.jar -Djava.util.logging.config.file=${BASE_DIR}/config/logging.properties" +JAVAARGS_INSPECTIT_DEACTIVATED="${JAVAARGS_LTW} -Dinspectit.service-name=moobench-inspectit -Dinspectit.exporters.metrics.prometheus.enabled=false -Dinspectit.exporters.tracing.zipkin.enabled=false -Dinspectit.config.file-based.path=${BASE_DIR}/config/onlyInstrument/" +JAVAARGS_INSPECTIT_NULLWRITER="${JAVAARGS_LTW} -Dinspectit.service-name=moobench-inspectit -Dinspectit.exporters.metrics.prometheus.enabled=false -Dinspectit.exporters.tracing.zipkin.enabled=false -Dinspectit.config.file-based.path=${BASE_DIR}/config/nullWriter/" +JAVAARGS_INSPECTIT_ZIPKIN="${JAVAARGS_LTW} -Dinspectit.service-name=moobench-inspectit -Dinspectit.exporters.metrics.prometheus.enabled=false -Dinspectit.exporters.tracing.zipkin.url=http://127.0.0.1:9411/api/v2/spans -Dinspectit.config.file-based.path=${BASE_DIR}/config/zipkin/" +JAVAARGS_INSPECTIT_PROMETHEUS="${JAVAARGS_LTW} -Dinspectit.service-name=moobench-inspectit -Dinspectit.exporters.metrics.zipkin.enabled=false -Dinspectit.exporters.metrics.prometheus.enabled=true -Dinspectit.config.file-based.path=${BASE_DIR}/config/prometheus/" + +echo "RESULTS_DIR: $RESULTS_DIR" +echo "RAWFN: $RAWFN" +writeConfiguration ## Execute Benchmark -for ((i=1;i<=${NUM_LOOPS};i+=1)); do - j=${RECURSIONDEPTH} +for ((i=1;i<=${NUM_OF_LOOPS};i+=1)); do k=0 - echo "## Starting iteration ${i}/${NUM_LOOPS}" - echo "## Starting iteration ${i}/${NUM_LOOPS}" >>${BASEDIR}inspectit.log - - # No instrumentation - k=`expr ${k} + 1` - echo " # ${i}.${j}.${k} No instrumentation" - echo " # ${i}.${j}.${k} No instrumentation" >>${BASEDIR}inspectit.log - sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & - ${JAVABIN}java ${JAVAARGS_NOINSTR} ${JAR} \ - --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${THREADS} \ - --recursiondepth ${j} \ - ${MOREPARAMS} - kill %sar - [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log - echo >>${BASEDIR}inspectit.log - echo >>${BASEDIR}inspectit.log - sync - sleep ${SLEEPTIME} - - # InspectIT (minimal) - k=`expr ${k} + 1` - echo " # ${i}.${j}.${k} InspectIT (minimal)" - echo " # ${i}.${j}.${k} InspectIT (minimal)" >>${BASEDIR}inspectit.log - sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & - ${JAVABIN}java ${CMR_ARGS} -Xloggc:${BASEDIR}logs/gc.log -jar CMR/inspectit-cmr-mod.jar 1>>${BASEDIR}logs/out.log 2>&1 & - sleep 10 - ${JAVABIN}java ${JAVAARGS_INSPECTIT_MINIMAL} ${JAR} \ - --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${THREADS} \ - --recursiondepth ${j} \ - ${MOREPARAMS} - sleep 10 - kill $! - sleep 10 - kill -9 $! - rm -rf ${BASEDIR}storage/ - rm -rf ${BASEDIR}db/ - kill %sar - [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log - echo >>${BASEDIR}inspectit.log - echo >>${BASEDIR}inspectit.log - sync - sleep ${SLEEPTIME} - - # InspectIT (without CMR) - k=`expr ${k} + 1` - echo " # ${i}.${j}.${k} InspectIT (without CMR)" - echo " # ${i}.${j}.${k} InspectIT (without CMR)" >>${BASEDIR}inspectit.log - sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & - ${JAVABIN}java ${JAVAARGS_INSPECTIT_FULL} ${JAR} \ - --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${THREADS} \ - --recursiondepth ${j} \ - ${MOREPARAMS} - kill %sar - [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log - echo >>${BASEDIR}inspectit.log - echo >>${BASEDIR}inspectit.log - sync - sleep ${SLEEPTIME} - - # InspectIT (with CMR) - k=`expr ${k} + 1` - echo " # ${i}.${j}.${k} InspectIT (with CMR)" - echo " # ${i}.${j}.${k} InspectIT (with CMR)" >>${BASEDIR}inspectit.log - sar -o ${RESULTSDIR}stat/sar-${i}-${j}-${k}.data 5 2000 1>/dev/null 2>&1 & - ${JAVABIN}java ${CMR_ARGS} -Xloggc:${BASEDIR}logs/gc.log -jar CMR/inspectit-cmr-mod.jar 1>>${BASEDIR}logs/out.log 2>&1 & - sleep 10 - ${JAVABIN}java ${JAVAARGS_INSPECTIT_FULL} ${JAR} \ - --output-filename ${RAWFN}-${i}-${j}-${k}.csv \ - --totalcalls ${TOTALCALLS} \ - --methodtime ${METHODTIME} \ - --totalthreads ${THREADS} \ - --recursiondepth ${j} \ - ${MOREPARAMS} - sleep 10 - kill $! - sleep 10 - kill -9 $! - rm -rf ${BASEDIR}storage/ - rm -rf ${BASEDIR}db/ - kill %sar - [ -f ${BASEDIR}hotspot.log ] && mv ${BASEDIR}hotspot.log ${RESULTSDIR}hotspot-${i}-${j}-${k}.log - echo >>${BASEDIR}inspectit.log - echo >>${BASEDIR}inspectit.log - sync - sleep ${SLEEPTIME} - + echo "## Starting iteration ${i}/${NUM_OF_LOOPS}" + echo "## Starting iteration ${i}/${NUM_OF_LOOPS}" >>${BASE_DIR}/inspectIT.log + + runNoInstrumentation + cleanup + + runInspectITDeactivated + cleanup + + runInspectITNullWriter + cleanup + + runInspectITZipkin + cleanup + + runInspectITPrometheus + cleanup + + printIntermediaryResults done -zip -jqr ${RESULTSDIR}stat.zip ${RESULTSDIR}stat -rm -rf ${RESULTSDIR}stat/ -mv ${BASEDIR}inspectit.log ${RESULTSDIR}inspectit.log -mv ${BASEDIR}logs/ ${RESULTSDIR} -[ -f ${RESULTSDIR}hotspot-1-${RECURSIONDEPTH}-1.log ] && grep "<task " ${RESULTSDIR}hotspot-*.log >${RESULTSDIR}log.log -[ -f ${BASEDIR}errorlog.txt ] && mv ${BASEDIR}errorlog.txt ${RESULTSDIR} - -## Generate Results file -# Timeseries -R --vanilla --silent <<EOF -results_fn="${RAWFN}" -output_fn="${RESULTSDIR}results-timeseries.pdf" -configs.loop=${NUM_LOOPS} -configs.recursion=c(${RECURSIONDEPTH}) -configs.labels=c("No Probe","InspectIT (minimal)","InspectIT (without CMR)","InspectIT (with CMR)") -configs.colors=c("black","red","blue","green") -results.count=${TOTALCALLS} -tsconf.min=(${METHODTIME}/1000) -tsconf.max=(${METHODTIME}/1000)+300 -source("${RSCRIPTDIR}timeseries.r") -EOF -# Timeseries-Average -R --vanilla --silent <<EOF -results_fn="${RAWFN}" -output_fn="${RESULTSDIR}results-timeseries-average.pdf" -configs.loop=${NUM_LOOPS} -configs.recursion=c(${RECURSIONDEPTH}) -configs.labels=c("No Probe","InspectIT (minimal)","InspectIT (without CMR)","InspectIT (with CMR)") -configs.colors=c("black","red","blue","green") -results.count=${TOTALCALLS} -tsconf.min=(${METHODTIME}/1000) -tsconf.max=(${METHODTIME}/1000)+300 -source("${RSCRIPTDIR}timeseries-average.r") -EOF -# Bars -R --vanilla --silent <<EOF -results_fn="${RAWFN}" -outtxt_fn="${RESULTSDIR}results-text.txt" -configs.loop=${NUM_LOOPS} -configs.recursion=c(${RECURSIONDEPTH}) -configs.labels=c("No Probe","InspectIT (minimal)","InspectIT (without CMR)","InspectIT (with CMR)") -results.count=${TOTALCALLS} -results.skip=${TOTALCALLS}*3/4 -source("${RSCRIPTDIR}stats.r") -EOF +mv ${BASE_DIR}/inspectIT.log ${RESULTS_DIR}/inspectIT.log +[ -f ${RESULTS_DIR}Hotspot-1-${RECURSION_DEPTH}-1.log ] && grep "<task " ${RESULTS_DIR}hotspot-*.log >${RESULTS_DIR}log.log +[ -f ${BASE_DIR}errorlog.txt ] && mv ${BASE_DIR}errorlog.txt ${RESULTS_DIR} + +# Create R labels +LABELS=$(createRLabels) +run-r ## Clean up raw results -zip -jqr ${RESULTSDIR}results.zip ${RAWFN}* -rm -f ${RAWFN}* -[ -f ${BASEDIR}nohup.out ] && cp ${BASEDIR}nohup.out ${RESULTSDIR} -[ -f ${BASEDIR}nohup.out ] && > ${BASEDIR}nohup.out +zip -jqr ${RESULTS_DIR}/results.zip ${RAWFN}* +rm ${RAWFN}* diff --git a/frameworks/inspectIT/config/isequence-remote/inspectit-agent.cfg b/frameworks/inspectIT/config/isequence-remote/inspectit-agent.cfg deleted file mode 100644 index 6ca618ad09b2000cea9aa25f150e95f5abe47091..0000000000000000000000000000000000000000 --- a/frameworks/inspectIT/config/isequence-remote/inspectit-agent.cfg +++ /dev/null @@ -1,52 +0,0 @@ -## repository <IP> <port> <Agent Name> -############################################# -repository blade1 9070 inspectIT - -## method-sensor-type <name> <fully-qualified-name> <priority> [<additional options>] -##################################################################################### -# method-sensor-type average-timer info.novatec.inspectit.agent.sensor.method.averagetimer.AverageTimerSensor HIGH stringLength=100 -method-sensor-type timer info.novatec.inspectit.agent.sensor.method.timer.TimerSensor MAX stringLength=100 -method-sensor-type isequence info.novatec.inspectit.agent.sensor.method.invocationsequence.InvocationSequenceSensor INVOC stringLength=100 -method-sensor-type jdbc-connection info.novatec.inspectit.agent.sensor.method.jdbc.ConnectionSensor MIN -method-sensor-type jdbc-prepared-statement info.novatec.inspectit.agent.sensor.method.jdbc.PreparedStatementSensor MIN stringLength=1000 -method-sensor-type jdbc-prepared-statement-parameter info.novatec.inspectit.agent.sensor.method.jdbc.PreparedStatementParameterSensor MIN -method-sensor-type jdbc-statement info.novatec.inspectit.agent.sensor.method.jdbc.StatementSensor MIN stringLength=1000 - -## exception-sensor-type <fully-qualified-name> [<additional options>] -###################################################################### -exception-sensor-type info.novatec.inspectit.agent.sensor.exception.ExceptionSensor mode=simple stringLength=500 - -## platform-sensor-type <fully-qualified-name> [<additional options>] -##################################################################### -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.ClassLoadingInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.CompilationInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.MemoryInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.CpuInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.RuntimeInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.SystemInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.ThreadInformation - -## send-strategy <fully-qualified-name> -####################################### -send-strategy info.novatec.inspectit.agent.sending.impl.TimeStrategy time=1000 -#send-strategy info.novatec.inspectit.agent.sending.impl.ListSizeStrategy size=10000 - -## buffer-strategy <fully-qualified-name> -######################################### -#buffer-strategy info.novatec.inspectit.agent.buffer.impl.SimpleBufferStrategy -buffer-strategy info.novatec.inspectit.agent.buffer.impl.SizeBufferStrategy size=1000000 - -## Ignore classes settings -######################################### -exclude-class info.novatec.inspectit.* -exclude-class $Proxy* -exclude-class sun.* -exclude-class java.lang.ThreadLocal -exclude-class java.lang.ref.Reference -exclude-class *_WLStub -exclude-class *[] - -## INSTRUMENTATION -################## -sensor isequence mooBench.monitoredApplication.MonitoredClass monitoredMethod interface=true -#sensor timer mooBench.monitoredApplication.MonitoredClass monitoredMethod interface=true charting=true diff --git a/frameworks/inspectIT/config/isequence/inspectit-agent.cfg b/frameworks/inspectIT/config/isequence/inspectit-agent.cfg deleted file mode 100644 index 93a2115025e4c18ad72082718a4586b36b4cf6e1..0000000000000000000000000000000000000000 --- a/frameworks/inspectIT/config/isequence/inspectit-agent.cfg +++ /dev/null @@ -1,52 +0,0 @@ -## repository <IP> <port> <Agent Name> -############################################# -repository localhost 9070 inspectIT - -## method-sensor-type <name> <fully-qualified-name> <priority> [<additional options>] -##################################################################################### -# method-sensor-type average-timer info.novatec.inspectit.agent.sensor.method.averagetimer.AverageTimerSensor HIGH stringLength=100 -method-sensor-type timer info.novatec.inspectit.agent.sensor.method.timer.TimerSensor MAX stringLength=100 -method-sensor-type isequence info.novatec.inspectit.agent.sensor.method.invocationsequence.InvocationSequenceSensor INVOC stringLength=100 -method-sensor-type jdbc-connection info.novatec.inspectit.agent.sensor.method.jdbc.ConnectionSensor MIN -method-sensor-type jdbc-prepared-statement info.novatec.inspectit.agent.sensor.method.jdbc.PreparedStatementSensor MIN stringLength=1000 -method-sensor-type jdbc-prepared-statement-parameter info.novatec.inspectit.agent.sensor.method.jdbc.PreparedStatementParameterSensor MIN -method-sensor-type jdbc-statement info.novatec.inspectit.agent.sensor.method.jdbc.StatementSensor MIN stringLength=1000 - -## exception-sensor-type <fully-qualified-name> [<additional options>] -###################################################################### -exception-sensor-type info.novatec.inspectit.agent.sensor.exception.ExceptionSensor mode=simple stringLength=500 - -## platform-sensor-type <fully-qualified-name> [<additional options>] -##################################################################### -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.ClassLoadingInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.CompilationInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.MemoryInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.CpuInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.RuntimeInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.SystemInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.ThreadInformation - -## send-strategy <fully-qualified-name> -####################################### -send-strategy info.novatec.inspectit.agent.sending.impl.TimeStrategy time=1000 -#send-strategy info.novatec.inspectit.agent.sending.impl.ListSizeStrategy size=10000 - -## buffer-strategy <fully-qualified-name> -######################################### -#buffer-strategy info.novatec.inspectit.agent.buffer.impl.SimpleBufferStrategy -buffer-strategy info.novatec.inspectit.agent.buffer.impl.SizeBufferStrategy size=1000000 - -## Ignore classes settings -######################################### -exclude-class info.novatec.inspectit.* -exclude-class $Proxy* -exclude-class sun.* -exclude-class java.lang.ThreadLocal -exclude-class java.lang.ref.Reference -exclude-class *_WLStub -exclude-class *[] - -## INSTRUMENTATION -################## -sensor isequence mooBench.monitoredApplication.MonitoredClass monitoredMethod interface=true -#sensor timer mooBench.monitoredApplication.MonitoredClass monitoredMethod interface=true charting=true diff --git a/frameworks/inspectIT/config/logging-config.xml b/frameworks/inspectIT/config/logging-config.xml deleted file mode 100644 index 7c507dbc21ee72b4d0702a6f7acfeb9d955c7fa7..0000000000000000000000000000000000000000 --- a/frameworks/inspectIT/config/logging-config.xml +++ /dev/null @@ -1,123 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<configuration> - <!-- The appenders are defined at the top --> - - <!-- Console output --> - <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> - <Target>System.out</Target> - <encoder> - <pattern>%d{ISO8601}: %-6r [%15.15t] %-5p %30.30c - %m%n</pattern> - </encoder> - </appender> - - <!-- Statistics --> - <appender name="statistics" class="ch.qos.logback.core.FileAppender"> - <file>logs/statistics.log</file> - <encoder> - <pattern>%d{ISO8601}: %m%n</pattern> - </encoder> - </appender> - - <!-- Enriched Sysout --> - <!-- Rollover every day or when file reaches 20MB --> - <appender name="file" class="ch.qos.logback.core.FileAppender"> - <file>logs/cmr.log</file> - <encoder> - <pattern>%d{ISO8601}: %-6r [%15.15t] %-5p %30.30c - %m%n</pattern> - </encoder> - </appender> - - <!-- Exceptions --> - <!-- Only warn & error levels--> - <appender name="exceptions" class="ch.qos.logback.core.FileAppender"> - <file>logs/exceptions.log</file> - <encoder> - <pattern>%d{ISO8601}: %-6r [%15.15t] %-5p %30.30c - %m%n</pattern> - </encoder> - <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> - <level>WARN</level> - </filter> - </appender> - - <!-- Loggers are defined from down here --> - - <!-- set log levels - for more verbose logging change 'info' to 'debug' --> - <root level="info"> - <appender-ref ref="stdout" /> - <appender-ref ref="file" /> - <appender-ref ref="exceptions" /> - </root> - - <!-- deactivate all other loggers, except for errors --> - <logger name="org" level="error" /> - <logger name="com" level="error" /> - <logger name="uk" level="error" /> - - <!-- service logging, set this to 'debug' to get additional information about: - Number of timer objects being stored - information about the exception sensor - information about the combined metric sensor --> - <logger name="info.novatec.inspectit.cmr.service" level="info" /> - - <!-- service logging, set this to 'debug' to get additional information about: - DAOs --> - <logger name="info.novatec.inspectit.cmr.dao" level="info" /> - - <!-- RMI Exporter Logging - this logger provides the information to which ip/port the RMI services are bound --> - <logger name="org.springframework.remoting.rmi" level="info" /> - - <!-- This service logs information about the health status of the CMR. By default this is only being logged into a specific file. Set additivity to true if you want to print this information in the default - appender, too. --> - <logger name="info.novatec.inspectit.cmr.util.HealthStatus" additivity="false" level="info"> - <appender-ref ref="statistics" /> - </logger> - - <!-- Buffer information --> - <logger name="info.novatec.inspectit.cmr.cache.impl.AtomicBuffer" level="info" /> - - <!-- Storage, set this to debug for more information about: - storage and failed storage serializations --> - <logger name="info.novatec.inspectit.storage" level="info" /> - <logger name="info.novatec.inspectit.cmr.storage" level="info" /> - - <!-- Set this to debug for more information about: - IO write/read --> - <logger name="info.novatec.inspectit.storage.nio" level="info" /> - <logger name="info.novatec.inspectit.storage.write" level="info" /> - - <!-- Set this to debug for more information about: - serialization --> - <logger name="info.novatec.inspectit.storage.serializer" level="info" /> - - <!-- Set this to debug for more information about: - schema loading for serialization --> - <logger name="info.novatec.inspectit.storage.serializer.schema" level="info" /> - - <!-- Disabled loggers from down here --> - - <!-- hibernate logging --> - <!-- logger name="org.hibernate" level="info" / --> - - <!-- log HQL query parser activity --> - <!-- logger name="org.hibernate.hql.ast.AST" level="info" / --> - - <!-- log just the SQL --> - <!-- logger name="org.hibernate.SQL" level="info" / --> - - <!-- log JDBC bind parameters --> - <!-- logger name="org.hibernate.type" level="info" / --> - - <!-- log schema export/update --> - <!-- logger name="org.hibernate.tool.hbm2ddl" level="info" / --> - - <!-- log HQL parse trees --> - <!-- logger name="org.hibernate.hql" level="debug" / --> - - <!-- log cache activity --> - <!-- logger name="org.hibernate.cache" level="info" / --> - - <!-- log transaction activity --> - <!-- logger name="org.hibernate.transaction" level="debug" / --> - - <!-- log JDBC resource acquisition --> - <!-- logger name="org.hibernate.jdbc" level="debug" / --> - - <!-- enable the following line if you want to track down connection leakages when using DriverManagerConnectionProvider --> - <!-- logger name="org.hibernate.connection.DriverManagerConnectionProvider" level="trace" / --> - - <!-- Log only the info level of the c3p0 connection pooling --> - <!-- logger name="com.mchange" level="info" / --> - -</configuration> \ No newline at end of file diff --git a/frameworks/inspectIT/config/logging.properties b/frameworks/inspectIT/config/logging.properties deleted file mode 100644 index 8beb798794066cbd195e452b0fd01072a024a9ba..0000000000000000000000000000000000000000 --- a/frameworks/inspectIT/config/logging.properties +++ /dev/null @@ -1,10 +0,0 @@ -# This is the default logging configuration for the inspectIT agent. Feel free -# to adapt this logging to your needs. -# -# To integrate this logging configuration set the "-Djava.util.logging.config.file" Parameter to -# point to the configuration (for example: -Djava.util.logging.config.file=[path-to]/logging.properties -handlers = java.util.logging.FileHandler -java.util.logging.FileHandler.level = INFO -java.util.logging.FileHandler.formatter = info.novatec.inspectit.util.MessageFormatFormatter -java.util.logging.FileHandler.append = true -java.util.logging.FileHandler.pattern = inspectit.log diff --git a/frameworks/inspectIT/config/minimal/inspectit-agent.cfg b/frameworks/inspectIT/config/minimal/inspectit-agent.cfg deleted file mode 100644 index 86963d2f797a142a52a199008bde36569766c615..0000000000000000000000000000000000000000 --- a/frameworks/inspectIT/config/minimal/inspectit-agent.cfg +++ /dev/null @@ -1,52 +0,0 @@ -## repository <IP> <port> <Agent Name> -############################################# -repository localhost 9070 inspectIT - -## method-sensor-type <name> <fully-qualified-name> <priority> [<additional options>] -##################################################################################### -# method-sensor-type average-timer info.novatec.inspectit.agent.sensor.method.averagetimer.AverageTimerSensor HIGH stringLength=100 -method-sensor-type timer info.novatec.inspectit.agent.sensor.method.timer.TimerSensor MAX stringLength=100 -method-sensor-type isequence info.novatec.inspectit.agent.sensor.method.invocationsequence.InvocationSequenceSensor INVOC stringLength=100 -method-sensor-type jdbc-connection info.novatec.inspectit.agent.sensor.method.jdbc.ConnectionSensor MIN -method-sensor-type jdbc-prepared-statement info.novatec.inspectit.agent.sensor.method.jdbc.PreparedStatementSensor MIN stringLength=1000 -method-sensor-type jdbc-prepared-statement-parameter info.novatec.inspectit.agent.sensor.method.jdbc.PreparedStatementParameterSensor MIN -method-sensor-type jdbc-statement info.novatec.inspectit.agent.sensor.method.jdbc.StatementSensor MIN stringLength=1000 - -## exception-sensor-type <fully-qualified-name> [<additional options>] -###################################################################### -exception-sensor-type info.novatec.inspectit.agent.sensor.exception.ExceptionSensor mode=simple stringLength=500 - -## platform-sensor-type <fully-qualified-name> [<additional options>] -##################################################################### -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.ClassLoadingInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.CompilationInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.MemoryInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.CpuInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.RuntimeInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.SystemInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.ThreadInformation - -## send-strategy <fully-qualified-name> -####################################### -send-strategy info.novatec.inspectit.agent.sending.impl.TimeStrategy time=1000 -#send-strategy info.novatec.inspectit.agent.sending.impl.ListSizeStrategy size=10000 - -## buffer-strategy <fully-qualified-name> -######################################### -#buffer-strategy info.novatec.inspectit.agent.buffer.impl.SimpleBufferStrategy -buffer-strategy info.novatec.inspectit.agent.buffer.impl.SizeBufferStrategy size=1000000 - -## Ignore classes settings -######################################### -exclude-class info.novatec.inspectit.* -exclude-class $Proxy* -exclude-class sun.* -exclude-class java.lang.ThreadLocal -exclude-class java.lang.ref.Reference -exclude-class *_WLStub -exclude-class *[] - -## INSTRUMENTATION -################## -#sensor isequence mooBench.monitoredApplication.MonitoredClass monitoredMethod interface=true -#sensor timer mooBench.monitoredApplication.MonitoredClass monitoredMethod interface=true charting=true diff --git a/frameworks/inspectIT/config/nullWriter/nullWriter.yml b/frameworks/inspectIT/config/nullWriter/nullWriter.yml new file mode 100644 index 0000000000000000000000000000000000000000..62aa32139f3a0ce9192d0e506c5214ac3a494412 --- /dev/null +++ b/frameworks/inspectIT/config/nullWriter/nullWriter.yml @@ -0,0 +1,19 @@ +inspectit: + instrumentation: + scopes: + 's_moobench': + type: + name: 'MonitoredClass' + matcher-mode: 'CONTAINS' + rules: + 'r_moobench': + enabled: true + include: + 'r_trace_method': true # do not save anything + 'r_capture_method_duration': false # do not save anything + scopes: + 's_moobench': true + actions: + 'a_do_nothing': + value-body: | + 'if (true) {}' diff --git a/frameworks/inspectIT/config/onlyInstrument/onlyInstrument.yml b/frameworks/inspectIT/config/onlyInstrument/onlyInstrument.yml new file mode 100644 index 0000000000000000000000000000000000000000..a226459211e15d2be67b557eb784f40b4d6673fb --- /dev/null +++ b/frameworks/inspectIT/config/onlyInstrument/onlyInstrument.yml @@ -0,0 +1,19 @@ +inspectit: + instrumentation: + scopes: + 's_moobench': + type: + name: 'MonitoredClass' + matcher-mode: 'CONTAINS' + rules: + 'r_moobench': + enabled: true + include: + 'r_trace_method': false # do not save anything + 'r_capture_method_duration': false # do not save anything + scopes: + 's_moobench': true + actions: + 'a_do_nothing': + value-body: | + 'if (true) {}' diff --git a/frameworks/inspectIT/config/prometheus/prometheus.yml b/frameworks/inspectIT/config/prometheus/prometheus.yml new file mode 100644 index 0000000000000000000000000000000000000000..93be23506c366278bf1177854e521ba7224a02cb --- /dev/null +++ b/frameworks/inspectIT/config/prometheus/prometheus.yml @@ -0,0 +1,15 @@ +inspectit: + instrumentation: + scopes: + 's_moobench': + type: + name: 'MonitoredClass' + matcher-mode: 'CONTAINS' + rules: + 'r_moobench': + enabled: true + include: + 'r_trace_method': false # records spans + 'r_capture_method_duration': true # records metrics + scopes: + 's_moobench': true diff --git a/frameworks/inspectIT/config/timer/inspectit-agent.cfg b/frameworks/inspectIT/config/timer/inspectit-agent.cfg deleted file mode 100644 index c65c99fab40c32750195c07a54a8e748b435deb7..0000000000000000000000000000000000000000 --- a/frameworks/inspectIT/config/timer/inspectit-agent.cfg +++ /dev/null @@ -1,53 +0,0 @@ -## repository <IP> <port> <Agent Name> -############################################# -repository localhost 9070 inspectIT - -## method-sensor-type <name> <fully-qualified-name> <priority> [<additional options>] -##################################################################################### -# method-sensor-type average-timer info.novatec.inspectit.agent.sensor.method.averagetimer.AverageTimerSensor HIGH stringLength=100 -method-sensor-type timer info.novatec.inspectit.agent.sensor.method.timer.TimerSensor MAX stringLength=100 -method-sensor-type isequence info.novatec.inspectit.agent.sensor.method.invocationsequence.InvocationSequenceSensor INVOC stringLength=100 -method-sensor-type jdbc-connection info.novatec.inspectit.agent.sensor.method.jdbc.ConnectionSensor MIN -method-sensor-type jdbc-prepared-statement info.novatec.inspectit.agent.sensor.method.jdbc.PreparedStatementSensor MIN stringLength=1000 -method-sensor-type jdbc-prepared-statement-parameter info.novatec.inspectit.agent.sensor.method.jdbc.PreparedStatementParameterSensor MIN -method-sensor-type jdbc-statement info.novatec.inspectit.agent.sensor.method.jdbc.StatementSensor MIN stringLength=1000 - -## exception-sensor-type <fully-qualified-name> [<additional options>] -###################################################################### -exception-sensor-type info.novatec.inspectit.agent.sensor.exception.ExceptionSensor mode=simple stringLength=500 - -## platform-sensor-type <fully-qualified-name> [<additional options>] -##################################################################### -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.ClassLoadingInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.CompilationInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.MemoryInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.CpuInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.RuntimeInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.SystemInformation -platform-sensor-type info.novatec.inspectit.agent.sensor.platform.ThreadInformation - -## send-strategy <fully-qualified-name> -####################################### -send-strategy info.novatec.inspectit.agent.sending.impl.TimeStrategy time=1000 -#send-strategy info.novatec.inspectit.agent.sending.impl.ListSizeStrategy size=10000 - -## buffer-strategy <fully-qualified-name> -######################################### -#buffer-strategy info.novatec.inspectit.agent.buffer.impl.SimpleBufferStrategy -buffer-strategy info.novatec.inspectit.agent.buffer.impl.SizeBufferStrategy size=1000000 - - -## Ignore classes settings -######################################### -exclude-class info.novatec.inspectit.* -exclude-class $Proxy* -exclude-class sun.* -exclude-class java.lang.ThreadLocal -exclude-class java.lang.ref.Reference -exclude-class *_WLStub -exclude-class *[] - -## INSTRUMENTATION -################## -sensor isequence mooBench.monitoredApplication.MonitoredClass monitoredMethod interface=true -sensor timer mooBench.monitoredApplication.MonitoredClass monitoredMethod interface=true charting=true diff --git a/frameworks/inspectIT/config/zipkin/zipkin.yml b/frameworks/inspectIT/config/zipkin/zipkin.yml new file mode 100644 index 0000000000000000000000000000000000000000..9997999a8c5a6e2b999b3191a4b14db81bc3661b --- /dev/null +++ b/frameworks/inspectIT/config/zipkin/zipkin.yml @@ -0,0 +1,15 @@ +inspectit: + instrumentation: + scopes: + 's_moobench': + type: + name: 'MonitoredClass' + matcher-mode: 'CONTAINS' + rules: + 'r_moobench': + enabled: true + include: + 'r_trace_method': true # records spans + 'r_capture_method_duration': false # records metrics + scopes: + 's_moobench': true diff --git a/frameworks/inspectIT/labels.sh b/frameworks/inspectIT/labels.sh new file mode 100644 index 0000000000000000000000000000000000000000..bf62e408956c400eda8c027eece37aff86a81914 --- /dev/null +++ b/frameworks/inspectIT/labels.sh @@ -0,0 +1,5 @@ +TITLE[0]="No instrumentation" +TITLE[1]="Deactivated processing" +TITLE[2]="Null writer" +TITLE[3]="Zipkin" +TITLE[4]="Prometheus" diff --git a/frameworks/inspectIT/runExponentialSizes.sh b/frameworks/inspectIT/runExponentialSizes.sh new file mode 100755 index 0000000000000000000000000000000000000000..d30fc2cb3ed7a9933110de78cf66ae5c8cc768ad --- /dev/null +++ b/frameworks/inspectIT/runExponentialSizes.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +RESULTS_DIR=results-inspectIT/ +mkdir -p $RESULTS_DIR + +for depth in 2 4 8 16 32 64 128 +do + export RECURSION_DEPTH=$depth + echo "Running $depth" + ./benchmark.sh &> $RESULTS_DIR/$depth.txt + mv $RESULTS_DIR/results.zip $RESULTS_DIR/results-$RECURSION_DEPTH.zip +done diff --git a/frameworks/runAll.sh b/frameworks/runAll.sh new file mode 100755 index 0000000000000000000000000000000000000000..2e8bc3fcec20b0de3459671a4c35dc6ba4fdb09b --- /dev/null +++ b/frameworks/runAll.sh @@ -0,0 +1,11 @@ +#!/bin/bash +echo "This scripts benchmarks all defined monitoring frameworks, currently InspectIT, Kieker and OpenTelemetry" + +start=$(pwd) +for benchmark in inspectIT OpenTelemetry Kieker +do + cd $benchmark + ./benchmark.sh &> $start/log_$benchmark.txt + cd $start +done + diff --git a/frameworks/runR.sh b/frameworks/runR.sh new file mode 100755 index 0000000000000000000000000000000000000000..46a1c0431640341a5b207fa4c738797e78862992 --- /dev/null +++ b/frameworks/runR.sh @@ -0,0 +1,26 @@ +if [ $# -lt 1 ] +then + echo "Please pass the folder that should be analyzed" +fi + +if [[ "$1" = /* ]] +then + echo "absolute path" + BASE_DIR=$1 +else + echo "relative path" + BASE_DIR=$(pwd)/$1 +fi + +source common-functions.sh + +source $1/labels.sh + +echo "RESULTS_DIR: $RESULTS_DIR" +echo "Rawfn: $RAWFN" + +RSCRIPT_PATH=stats.csv.r + +# Create R labels +LABELS=$(createRLabels) +run-r diff --git a/frameworks/stats.csv.r b/frameworks/stats.csv.r new file mode 100644 index 0000000000000000000000000000000000000000..8ba1ca1098b033fb93f7b5d5c61016c066c3af31 --- /dev/null +++ b/frameworks/stats.csv.r @@ -0,0 +1,108 @@ +############################################ +# R - script to collect all moobench results +############################################ + +# these values are here only as documentation. The parameters are set by benchmark.sh +#rm(list=ls(all=TRUE)) +#data_fn="data/" +#folder_fn="results-benchmark-binary" +#results_fn=paste(data_fn,folder_fn,"/raw",sep="") +#outtxt_fn=paste(data_fn,folder_fn,"/results-text.txt",sep="") +#results_fn="raw" +#outtxt_fn="results-text.txt" + +######### +# These are configuration parameters which are automatically prepended to this file by the benchmark.sh script. +# Therefore, they must not be set here. The following lines only serve as documentation. +#configs.loop=10 +#configs.recursion=c(10) +#configs.labels=c("No Probe","Inactive Probe","Collecting Data","Writing Data (ASCII)", "Writing Data (Bin)") +#results.count=2000000 +#results.skip=1000000 + +#bars.minval=500 +#bars.maxval=600 + + +########## +# Process configuration + +# divisor 1 = nano, 1000 = micro, 1000000 = milli seconds +timeUnit <- 1000 + +# number of Kieker writer configurations +numberOfWriters <- length(configs.labels) +recursion_depth <- configs.recursion + +numberOfValues <- configs.loop*(results.count-results.skip) +numbers <- c(1:(numberOfValues)) +resultDimensionNames <- list(configs.labels, numbers) + +# result values +resultsBIG <- array(dim=c(numberOfWriters, numberOfValues), dimnames=resultDimensionNames) + +########## +# Create result + +## "[ recursion , config , loop ]" + +numOfRowsToRead <- results.count-results.skip + +for (writer_idx in (1:numberOfWriters)) { + recordsPerSecond = c() + rpsLastDuration = 0 + rpsCount = 0 + file_idx <- writer_idx - 1 + + # loop + for (loop_counter in (1:configs.loop)) { + results_fn_filepath <- paste(results_fn, "-", loop_counter, "-", recursion_depth, "-", file_idx, ".csv", sep="") + message(results_fn_filepath) + results <- read.csv2(results_fn_filepath, nrows=numOfRowsToRead, skip=results.skip, quote="", colClasses=c("NULL","numeric", "numeric", "numeric"), comment.char="", col.names=c("thread_id", "duration_nsec", "gc", "t"), header=FALSE) + trx_idx <- c(1:numOfRowsToRead) + resultsBIG[writer_idx,trx_idx] <- results[["duration_nsec"]] + } +} + +qnorm_value <- qnorm(0.975) + +# print results +printDimensionNames <- list(c("mean","sd","ci95%","md25%","md50%","md75%","max","min"), c(1:numberOfWriters)) +# row number == number of computed result values, e.g., mean, min, max +printvalues <- matrix(nrow=8, ncol=numberOfWriters, dimnames=printDimensionNames) + +for (writer_idx in (1:numberOfWriters)) { + idx_mult <- c(1:numOfRowsToRead) + + valuesBIG <- resultsBIG[writer_idx,idx_mult]/timeUnit + + printvalues["mean",writer_idx] <- mean(valuesBIG) + printvalues["sd",writer_idx] <- sd(valuesBIG) + printvalues["ci95%",writer_idx] <- qnorm_value*sd(valuesBIG)/sqrt(length(valuesBIG)) + printvalues[c("md25%","md50%","md75%"),writer_idx] <- quantile(valuesBIG, probs=c(0.25, 0.5, 0.75)) + printvalues["max",writer_idx] <- max(valuesBIG) + printvalues["min",writer_idx] <- min(valuesBIG) +} +resultstext <- formatC(printvalues,format="f",digits=4,width=8) + +print(resultstext) + +write(paste("Recursion Depth: ", recursion_depth),file=outtxt_fn,append=TRUE) +write("response time",file=outtxt_fn,append=TRUE) +write.table(resultstext,file=outtxt_fn,append=TRUE,quote=FALSE,sep="\t",col.names=FALSE) + +concResult <- "" +headResult <- "" +# write the first n-1 elements preceded by a comma (,) +for (writer_idx in (1:(numberOfWriters-1))) { + headResult <- paste(headResult, configs.labels[writer_idx], ",") + concResult <- paste(concResult, printvalues["mean",writer_idx], ",") +} +# write the last without a comma +headResult <- paste(headResult, configs.labels[numberOfWriters]) +concResult <- paste(concResult, printvalues["mean", numberOfWriters]) + +write(headResult,file=outcsv_fn,append=TRUE) +write(concResult,file=outcsv_fn,append=TRUE) + +# end diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 622ab64a3cb60378cd29384961554c0b032c9368..ffed3a254e91df704a9acc0f2745c0e340d9b582 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/tools/getConfidenceIntervalTable/getConfidenceIntervalTable.sh b/tools/getConfidenceIntervalTable/getConfidenceIntervalTable.sh new file mode 100755 index 0000000000000000000000000000000000000000..cbdef3b8c139d2ddd0d7cf83db6c0475ec7b3d21 --- /dev/null +++ b/tools/getConfidenceIntervalTable/getConfidenceIntervalTable.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +## Generate Results file +function run-r() { +R --vanilla --silent << EOF +results_fn="${RAWFN}" +outtxt_fn="${RESULTS_DIR}/results-text.txt" +outcsv_fn="${RESULTS_DIR}/results-text.csv" +configs.loop=${NUM_OF_LOOPS} +configs.recursion=${RECURSION_DEPTH} +configs.labels=c($LABELS) +results.count=${TOTAL_NUM_OF_CALLS} +results.skip=${TOTAL_NUM_OF_CALLS}/2 +source("${RSCRIPT_PATH}") +EOF +} + +function createVariantsString { + local LABELS="" + local variants=$(ls $RESULTS_DIR | grep ".csv" | awk -F'[.-]' '{print $4}' | sort | uniq | sed '/^[[:space:]]*$/d') + for variant in $variants + do + if [ -z "$LABELS" ] + then + LABELS="\"$variant\"" + else + LABELS="$LABELS, \"$variant\"" + fi + done + echo $LABELS +} + +function createLatexTable { + cat $RESULTS_DIR/results-text.txt | tail -n 8 > transposeMe.csv + awk ' + { + for (i=1; i<=NF; i++) { + a[NR,i] = $i + } + } + NF>p { p = NF } + END { + for(j=1; j<=p; j++) { + str=a[1,j] + for(i=2; i<=NR; i++){ + str=str" "a[i,j]; + } + print str + } + }' transposeMe.csv > transposed.csv + + cat transposed.csv | awk '{print "["$1-$3";"$1+$3"] & "$2}' +} + +if [ "$#" -lt 1 ] +then + echo "Please pass folder with MooBench CSV files for analysis!" + exit 1 +fi + + +RESULTS_DIR=$1 + +RAWFN=$RESULTS_DIR/raw +NUM_OF_LOOPS=10 +RECURSION_DEPTH=10 +TOTAL_NUM_OF_CALLS=2000000 +LABELS=$(createVariantsString) + + +RSCRIPT_PATH=$MOOBENCH_HOME/frameworks/Kieker/scripts/stats.csv.r + +run-r + +createLatexTable diff --git a/tools/getConfidenceIntervalTable/stats.csv.r b/tools/getConfidenceIntervalTable/stats.csv.r new file mode 100644 index 0000000000000000000000000000000000000000..8ba1ca1098b033fb93f7b5d5c61016c066c3af31 --- /dev/null +++ b/tools/getConfidenceIntervalTable/stats.csv.r @@ -0,0 +1,108 @@ +############################################ +# R - script to collect all moobench results +############################################ + +# these values are here only as documentation. The parameters are set by benchmark.sh +#rm(list=ls(all=TRUE)) +#data_fn="data/" +#folder_fn="results-benchmark-binary" +#results_fn=paste(data_fn,folder_fn,"/raw",sep="") +#outtxt_fn=paste(data_fn,folder_fn,"/results-text.txt",sep="") +#results_fn="raw" +#outtxt_fn="results-text.txt" + +######### +# These are configuration parameters which are automatically prepended to this file by the benchmark.sh script. +# Therefore, they must not be set here. The following lines only serve as documentation. +#configs.loop=10 +#configs.recursion=c(10) +#configs.labels=c("No Probe","Inactive Probe","Collecting Data","Writing Data (ASCII)", "Writing Data (Bin)") +#results.count=2000000 +#results.skip=1000000 + +#bars.minval=500 +#bars.maxval=600 + + +########## +# Process configuration + +# divisor 1 = nano, 1000 = micro, 1000000 = milli seconds +timeUnit <- 1000 + +# number of Kieker writer configurations +numberOfWriters <- length(configs.labels) +recursion_depth <- configs.recursion + +numberOfValues <- configs.loop*(results.count-results.skip) +numbers <- c(1:(numberOfValues)) +resultDimensionNames <- list(configs.labels, numbers) + +# result values +resultsBIG <- array(dim=c(numberOfWriters, numberOfValues), dimnames=resultDimensionNames) + +########## +# Create result + +## "[ recursion , config , loop ]" + +numOfRowsToRead <- results.count-results.skip + +for (writer_idx in (1:numberOfWriters)) { + recordsPerSecond = c() + rpsLastDuration = 0 + rpsCount = 0 + file_idx <- writer_idx - 1 + + # loop + for (loop_counter in (1:configs.loop)) { + results_fn_filepath <- paste(results_fn, "-", loop_counter, "-", recursion_depth, "-", file_idx, ".csv", sep="") + message(results_fn_filepath) + results <- read.csv2(results_fn_filepath, nrows=numOfRowsToRead, skip=results.skip, quote="", colClasses=c("NULL","numeric", "numeric", "numeric"), comment.char="", col.names=c("thread_id", "duration_nsec", "gc", "t"), header=FALSE) + trx_idx <- c(1:numOfRowsToRead) + resultsBIG[writer_idx,trx_idx] <- results[["duration_nsec"]] + } +} + +qnorm_value <- qnorm(0.975) + +# print results +printDimensionNames <- list(c("mean","sd","ci95%","md25%","md50%","md75%","max","min"), c(1:numberOfWriters)) +# row number == number of computed result values, e.g., mean, min, max +printvalues <- matrix(nrow=8, ncol=numberOfWriters, dimnames=printDimensionNames) + +for (writer_idx in (1:numberOfWriters)) { + idx_mult <- c(1:numOfRowsToRead) + + valuesBIG <- resultsBIG[writer_idx,idx_mult]/timeUnit + + printvalues["mean",writer_idx] <- mean(valuesBIG) + printvalues["sd",writer_idx] <- sd(valuesBIG) + printvalues["ci95%",writer_idx] <- qnorm_value*sd(valuesBIG)/sqrt(length(valuesBIG)) + printvalues[c("md25%","md50%","md75%"),writer_idx] <- quantile(valuesBIG, probs=c(0.25, 0.5, 0.75)) + printvalues["max",writer_idx] <- max(valuesBIG) + printvalues["min",writer_idx] <- min(valuesBIG) +} +resultstext <- formatC(printvalues,format="f",digits=4,width=8) + +print(resultstext) + +write(paste("Recursion Depth: ", recursion_depth),file=outtxt_fn,append=TRUE) +write("response time",file=outtxt_fn,append=TRUE) +write.table(resultstext,file=outtxt_fn,append=TRUE,quote=FALSE,sep="\t",col.names=FALSE) + +concResult <- "" +headResult <- "" +# write the first n-1 elements preceded by a comma (,) +for (writer_idx in (1:(numberOfWriters-1))) { + headResult <- paste(headResult, configs.labels[writer_idx], ",") + concResult <- paste(concResult, printvalues["mean",writer_idx], ",") +} +# write the last without a comma +headResult <- paste(headResult, configs.labels[numberOfWriters]) +concResult <- paste(concResult, printvalues["mean", numberOfWriters]) + +write(headResult,file=outcsv_fn,append=TRUE) +write(concResult,file=outcsv_fn,append=TRUE) + +# end diff --git a/tools/receiver/build.gradle b/tools/receiver/build.gradle index b777f15fea4f4a731d1b4d35dfc830ab4eb54e20..15a5514a6ffc4fb25dc6e7fd42855df9f2dac28a 100644 --- a/tools/receiver/build.gradle +++ b/tools/receiver/build.gradle @@ -13,3 +13,12 @@ dependencies { implementation 'org.slf4j:slf4j-api:1.7.+' implementation 'ch.qos.logback:logback-classic:1.2.3' } + +jar { + doLast { + copy { + from jar + into "../../frameworks/Kieker/scripts/receiver/lib/" + } + } +} diff --git a/tools/receiver/src/main/java/moobench/tools/receiver/ReceiverConfiguration.java b/tools/receiver/src/main/java/moobench/tools/receiver/ReceiverConfiguration.java index 4fb52f4d89615768f6cbbff9fc71f0daa044bf31..0f0636cb51da079b18e6d9397652721a726778e9 100644 --- a/tools/receiver/src/main/java/moobench/tools/receiver/ReceiverConfiguration.java +++ b/tools/receiver/src/main/java/moobench/tools/receiver/ReceiverConfiguration.java @@ -1,13 +1,14 @@ package moobench.tools.receiver; +import kieker.analysis.source.rewriter.NoneTraceMetadataRewriter; import kieker.analysis.source.tcp.MultipleConnectionTcpSourceStage; import kieker.analysisteetime.plugin.filter.forward.CountingFilter; import teetime.framework.Configuration; public class ReceiverConfiguration extends Configuration { - public ReceiverConfiguration(int inputPort, int bufferSize) { - MultipleConnectionTcpSourceStage source = new MultipleConnectionTcpSourceStage(inputPort, bufferSize, null); + public ReceiverConfiguration(final int inputPort, final int bufferSize) { + MultipleConnectionTcpSourceStage source = new MultipleConnectionTcpSourceStage(inputPort, bufferSize, new NoneTraceMetadataRewriter()); CountingFilter counting = new CountingFilter(); connectPorts(source.getOutputPort(), counting.getInputPort());