Next Article in Journal
Multichannel Real-Time Electronics Platform for the Estimation of the Error in Impact Localization with Different Piezoelectric Sensor Densities
Next Article in Special Issue
Introduction of the ARDS—Anti-Ransomware Defense System Model—Based on the Systematic Review of Worldwide Ransomware Attacks
Previous Article in Journal
Goldmann Tonometry and Corneal Biomechanics
 
 
Font Type:
Arial Georgia Verdana
Font Size:
Aa Aa Aa
Line Spacing:
Column Width:
Background:
Article

An Efficient Library for Reliability Block Diagram Evaluation

Department of Information Engineering (DINFO), School of Engineering, University of Florence, via di S. Marta 3, 50139 Florence, Italy
*
Author to whom correspondence should be addressed.
Appl. Sci. 2021, 11(9), 4026; https://doi.org/10.3390/app11094026
Submission received: 30 March 2021 / Revised: 13 April 2021 / Accepted: 22 April 2021 / Published: 28 April 2021
(This article belongs to the Special Issue Resilient Cyber-Physical Systems)

Abstract

:
Reliability Block Diagrams (RBDs) are widely used in reliability engineering to model how the system reliability depends on the reliability of components or subsystems. In this paper, we present librbd, a C library providing a generic, efficient and open-source solution for time-dependent reliability evaluation of RBDs. The library has been developed as a part of a project for reliability evaluation of complex systems through a layered approach, combining different modeling formalisms and solution techniques at different system levels. The library achieves accuracy and efficiency comparable to, and mostly better than, those of other well-established tools, and it is well designed so that it can be easily used by other libraries and tools.

1. Introduction

Reliability is defined as “the ability of a system or component to perform its required functions under stated conditions for a specified period of time” [1]. Reliability is often expressed through the usage of probability theory, i.e., it is defined as the probability that the system has successfully performed its required functions in time interval [ t 0 , t ) given that it was correctly operating at time t 0 [2].
Reliability of a complex system is assessed by using a reliability model. Several reliability models have been developed. These models can be divided into the following two main categories:
  • Combinatorial models: they allow to efficiently evaluate reliability under the strong assumption of statistically independent components [3,4]. These models include Reliability Block Diagrams (RBDs) [5,6], Fault Trees (FTs) [7,8], Reliability Graphs (RGs) [9,10] and Fault Trees with Repeated Events (FTREs) [8,11].
  • State-space based models: they allow for the modeling of several dependencies among failures, including statistical, time and space dependency, at the cost of a difficult tractability due to the state-space explosion [3,4]. These models include Continuous Time Markov Chains (CTMCs) [12,13], Stochastic Petri Nets (SPNs), Generalized Stochastic Petri Nets (GSPNs) and Stochastic Time Petri Nets (STPNs) [14,15,16,17], Stochastic Reward Nets (SRNs) [18,19] and Stochastic Activity Networks (SANs) [20,21].
The expressive power of state-space based models is obviously greater than the one of combinatorial models. On the other hand, expressive power varies among the different combinatorial models [22].
All models that exploit both the usage of combinatorial and state-space based solutions for the quantitative evaluation are classified as hybrid models and are considered as the state-of-the-art approach to dependability evaluation [3]. Both Dynamic RBD (DRBD) [23,24] and Dynamic FT (DFT) [25,26,27] are hybrid models, since they combine CTMC [13] evaluation with, respectively, RBD [6] and FT [8] quantitative analysis. Hierarchical models, i.e., models that combine the usage of different formalisms in order to analyze the system at different levels, have been proposed in order to both exploit the benefits and to limit the drawbacks of combinatorial and state-space based models [3,28,29].
This paper is structured as follows: Section 1 presents the context and motivation for this work; Section 2 recalls the definition of RBDs and the mathematics used to evaluate them; Section 3 describes the design and optimizations of the implemented RBD computation library; Section 4 presents the materials and the methods used to obtain the results; Section 5 evaluates the performance of the RBD computation library and discusses the results; finally, Section 6 concludes the paper with some final remarks.

Context and Motivation

Our aim is to support the layered approach presented in [28,29], where RBDs are adopted to model major transitions of system structure (e.g., in a reconfiguration), while the finer modeling of the lower levels is based on STPNs and GSPNs. Our goal consists of the definition of a predictive diagnostics approach for the health assessment of complex systems. Specifically, we propose the usage of diagnostics data to estimate the reliability of basic components, leveraging the usage of a reliability hierarchical model to estimate the reliability curve of the system under analysis. By using this tuned reliability curve, we can compute the probability of system failure in a given future time interval, thus implementing a predictive diagnostics system. This approach requires a frequent evaluation of the reliability curve, hence efficient tools to evaluate it are needed.
Consider, for example, the system shown in Figure 1. The system has been subdivided into four statistically independent subsystems. The subsystems C 1 and C 2 model two identical power supplies in current sharing, C 3 is the computing subsystem, while C 4 is the acquisition subsystem. Each separate subsystem can then be modeled using an STPN/GSPN: in this example, all subsystems are modeled using GSPNs.
The approach to the reliability analysis using this layered model is shown in Figure 2. The input data of this approach is the failure rate function λ ( t ) for each modeled component. By inserting the failure rates into the STPN/GSPN models, we can analyze the models and we obtain, for each modeled subsystem, its reliability curve. Please note that, by modifying the failure rate function λ ( t ) of at least one modeled component, we have an impact on its distribution of failures and, as a consequence, we produce a reliability curve of the modeled subsystem with a different shape. Furthermore, by varying both the failure rate functions and their parameters, it is possible to refine the model, hence considering the uncertainties of the model.
Finally, by feeding the reliability curves of all subsystems into the RBD model, we can analyze the whole system and we obtain its reliability curve. Please note that the input data of this second phase are the reliability curves of all subsystems obtained through the analysis of the STPN/GSPN models. Thus, we combine the strength of combinatorial approaches, i.e., their efficiency, with the one of state-space based ones, i.e., their ability to model the statistical dependence of faults.
This hierarchical approach to the reliability evaluation can be extended to model the system-level reliability, i.e., the reliability of the whole system composed by both hardware and software. In general, hardware-related failures are statistically independent from software-related ones, i.e., software bugs [30,31]. The estimation of the number of failures in the source code is a difficult task [32]. However, in recent years, several methodologies have been developed to model and increase the software reliability [33,34,35].
The ORIS tool [36] has been adopted to support STPN and GSPN modeling. In this paper, we focus on the implementation of an efficient tool to evaluate RBD blocks.
More specifically, we looked for a tool with the following characteristics:
  • To be highly optimized.
  • To allow the resolution of RBD basic blocks (excluding singleton given its trivial formula).
  • To allow the reliability computation of an RBD basic block in a time interval.
  • To be available as a free software.
  • To be available for the most common Operating Systems (OS), i.e., Windows, Mac OS and Linux.
Several tools for RBD definition and analysis exist, although the majority of them are commercial tools. We provide a list of tools that were considered during our work:
  • RBDTool: this open-source and multiplatform tool allows the definition of RBD models and it provides support for their quantitative analysis [37].
  • Edraw Block Diagram: this commercial tool allows the definition of RBD models [38].
  • Reliability Workbench: this commercial tool allows the definition and analysis of scalable RBD models through the usage of submodels. Furthermore, it supports the minimal cut-set analysis of the RBD model [39].
  • Relyence RBD: this commercial tool has features comparable with Reliability Workbench [40].
  • SHARPE: the Symbolic Hierarchical Automated Reliability and Performance Evaluator (SHARPE) tool is a general hierarchical modeling tool that analyzes stochastic models of reliability, availability, performance and performability [41,42]. This tool allows the definition of hierarchical reliability models with several formalisms, including RBDs, and it supports the time-dependent reliability analysis.
Of all considered tools, SHARPE is the closest to all our requirements. Since no one fits completely all of them, we have implemented a custom library that provides the RBD evaluation, from now on referred as librbd. More specifically, the librbd library supports the numerical computation of the reliability curve for all RBD basic blocks, it exploits several optimizations and multithreading paradigm, and it is multiplatform. Finally, we have publicly released this open source library under the AGPL v3.0 license [43].

2. Reliability Block Diagrams

An RBD decomposes a system into its independent components and shows the logical connections needed for the successful operation of the system [3,4,5,44,45]. The basic assumptions of the RBD methodology are the following ones:
1.
The modeled system, as well as each component, has only two states, i.e., success and failure.
2.
The RBD represents the success state of the modeled system through the usage of success paths, i.e., the connections of the success states of its components.
3.
The system components are statistically independent. Under this assumption, the probability of failure of the block A, P ( A ) , is not related with the probability of failure P ( B ) of the block B A , B such that A B .
P ( A | B ) = P ( A ) A , B | A B

2.1. Basic Blocks

An RBD is built by drawing success paths between blocks composing the system. In order to correctly model an RBD, the following basic blocks are defined:
  • Singleton. This block is the simplest one and it is composed by a single component. The block state is equal to success if and only if the component is in success state. An example is a stand-alone Power Supply.
  • Series. This block is composed by N components. The block state is equal to success if and only if all the components are in success state. An example is a 2-out-of-2 computing system (2oo2).
  • Parallel. This block is composed by N components. The block state is equal to success if and only if at least one component is in success state, or, in other terms, the block state is equal to failure if and only if all the components are in the failure state. An example is a redundant Power Supply system with current sharing.
  • K-out-of-N(KooN). This block is composed by N components. The block state is equal to success if and only if at least K components out of N are in success state. An example is a 2-out-of-3 computing system (2oo3).
  • Bridge. This block is composed by 5 components arranged as shown in Figure 3. The block state is equal to success if at least one of the four following conditions is satisfied:
    1.
    Components A and B are correctly operating.
    2.
    Components C and D are correctly operating.
    3.
    Components A, E and D are correctly operating.
    4.
    Components C, E and B are correctly operating.
    An example is a network infrastructure.

2.2. Quantitative Evaluation Using RBDs

In this section, we recall the mathematical formulas used to quantitatively evaluate the probability that a block is correctly operating, i.e., its state is equal to success, by using the RBD formalism. More specifically, we firstly introduce the general formulas that can be always used; afterwards we present simplified formulas that can be used if and only if all components inside a block are equal, i.e., they have the same probability of being in success state.
Let p i be the probability that the state of the i-th component is equal to success, and let q i = 1 p i be the probability that the state of the i-th component is equal to failure.
Since a singleton block is composed by only one component, its probability of being in success state p s i n g l e t o n is trivially equal to the probability of being in success state of its sole component p.

2.2.1. Quantitative Evaluation: General Formulas

The following general formulas can be used to quantitatively evaluate the probability that the state of an RBD block composed by N components is equal to success:
  • Series. The probability of success of the series block p s e r i e s is computed as:
    p s e r i e s = i = 1 N p i
  • Parallel. The probability of failure of the parallel block q p a r a l l e l is computed as:
    q p a r a l l e l = i = 1 N q i = i = 1 N 1 q i
    The probability of success of the parallel block p p a r a l l e l is thus computed as:
    p p a r a l l e l = 1 i = 1 N 1 p i
  • K-out-of-N(KooN). In order to compute the probability of success of a KooN block, we can use one of the following approaches:
    1.
    Let C ( N , i , j ) be the j-th unique combination of i out of N components correctly working. For a given couple < i , N > , the number of unique combinations is equal to the binomial coefficient N i . We define p a t h ( N , i , j ) as the specific realization of one of the possible system states for which i components out of N are correctly working while the other ( N i ) have failed: the exact set of the working components is selected through the usage of unique combination C ( N , i , j ) . Its probability of occurrence is:
    P p a t h ( N , i , j ) = l C ( N , i , j ) p l · m C ( N , i , j ) q m
    The state of a KooN block is equal to success if and only if the current system state is satisfied by one path of at least K working components. The probability of success of the KooN block can be defined as:
    p K o o N = i = K N j = 1 N i P p a t h ( N , i , j )
    2.
    Observe that the probability of success of a system with 0 or more components out of I in success state is equal to 1 and observe that the probability of success of a system with J or more components out of I with J > I in success state is equal to 0. A recursive approach for evaluating the probability of success of a KooN system is derived by conditioning on the state of the N-th component [3]. The N-th component can assume only two states, success with probability p N and failed with probability q N . Let us assume that the N-th component is correctly working: for a KooN system to be correctly operating, we need at least K 1 working components out of the remaining N 1 . If, on the other hand, the N-th component is failed, we need at least K working components out of the remaining N 1 in order to have a correctly operating KooN system. The probability of success of a KooN block can then be recursively computed as:
    p K o o N = q N · p K o o ( N 1 ) + p N · p ( K 1 ) o o ( N 1 ) p 0 o o I = 1 p J o o I = 0 J > I
  • Bridge. In order to compute the probability of success of a bridge block, we apply the same decompositional approach used in the second set of formulas to compute the probability of success of a KooN block. Let us analyze the bridge block by conditioning the status of component E. If E is failed, the state of the block is equal to success if either A and B or C and D are correctly operating, i.e., if the parallel of two series A, B and C, D is satisfied. The probability of occurrence of this first event is equal to the probability of failure of E. On the other hand, if E is correctly operating, the state of the block is equal to success if at least one component between A and C is correctly operating and if at least one component between B and D is correctly operating, i.e., if the series of two parallel A, C and B, D is satisfied. The probability of occurrence of this second event is equal to the probability of success of E. The probability of success of a bridge block can then be computed through the formula:
    p b r i d g e = p E · ( 1 q A · q C ) · ( 1 q B · q D ) + + q E · ( 1 ( 1 p A · p B ) · ( 1 p C · p D ) )
One could argue that the formulas to compute probability of success of series and parallel blocks are specific cases of the KooN block: series block can be treated as a NooN block, while parallel block can be treated as a 1ooN. On the other hand, the mathematical representation for the specific cases of series and parallel blocks is simpler, thus justifying the usage of two additional formulas.

2.2.2. Quantitative Evaluation: Identical Components’ Formulas

Under the assumption of N identical components having probability of successp, the following simplified formulas can be used to evaluate the probability of success of an RBD block:
  • Series. By substituting p i with p in Equation (2), we can compute the simplified probability of success of the series block p s e r i e s as:
    p s e r i e s = p N
  • Parallel. By substituting p i with p in Equation (4), we can compute the simplified probability of success of the parallel block p p a r a l l e l as:
    p p a r a l l e l = 1 1 p N
  • K-out-of-N(KooN). By substituting p i with p in Equations (5) and (6), we can compute the simplified probability of success of the K-out-of-N block R K o o N as:
    p K o o N = J = K N N J · p J · ( 1 R ) N J
  • Bridge. By substituting p A to p E with p and q A to q E with q in (8), we obtain simplified probability of success of the bridge block p b r i d g e as:
    p b r i d g e = p · ( 1 q 2 ) 2 + q · ( 1 ( 1 p 2 ) 2 )

2.3. Reliability Evaluation Using RBDs

The same mathematics described in Section 2.2 can be used to analytically compute the reliability curve of a block given the reliability curves of its components. In order to perform this time-dependent analysis, it is sufficient to replace each occurrence of p x and q x in equations from Equation (2) to Equation (12) with, respectively, R x ( t ) and F x ( t ) .
The statement above is trivial and it is justified as follows: recall the probabilistic definition of reliability, i.e., the probability that the state of a given system or component at a given time t is equal to success given that it was correctly operating at the initial time t 0 . We can then apply the same mathematics in Section 2.2 to quantitatively evaluate the probability that the state of an RBD block is equal to success at time t, i.e., its reliability.
The described approach can be easily adapted to those applications for which the analytical reliability curve is not needed but only samples acquired from it are sufficient. For example, the reliability curve of a system can be sampled at time instants t 0 + k · Δ t , where t 0 is the initial time, k N and Δ t is the sampling period, by sampling the reliability curves of its components and by applying the proper equations for each evaluated time instant.

3. RBD Computation Library-librbd

As already stated in Section 1, our aim was to develop a library with the following characteristics:
  • To be highly optimized;
  • To support the most common OSes, i.e., Windows, Mac OS and Linux;
  • To support the numerical computation of the reliability curve for all RBD basic blocks;
  • To be available as a free software.
In order to meet the third goal, librbd implements the resolution formulas for series, parallel, KooN and bridge RBD blocks over time by accepting the following parameters:
  • Number N of components within the block;
  • Number T of temporal instants to be analyzed;
  • Reliability values R for the modeled components over the requested time instants.
In order to meet the first two goals, several optimizations have been designed and implemented, as described in Section 3.1. Finally, in Section 3.2 we validate the results obtained using librbd by comparing the reliability curves of several blocks with the ones obtaining by using SHARPE tool.

3.1. Design

The two goals of portability and optimization tend to be in contrast. Interpreted languages, for example, are portable by nature, but they often lack performance; compiled languages, on the other hand, offer greater performance, but they are less portable when an interaction with the OS is required [46]. We decided to implement librbd in C language, at the cost of introducing small parts of conditional compilation when an interaction with the OS is needed. Furthermore, librbd is available both as a dynamic and static library.
In order to minimize numerical errors, all computations are performed using double-precision floating-point format (double) compliant with binary64 format [47].
Both the uncertainties and the numerical errors are due to the chosen format and, since the reliability is a real number in range [ 0 , 1 ] , they are limited to the maximum resolution of floating-point numbers in the same range as described in [47].
We decided to implement both formulas for RBD blocks with identical components and for RBD blocks with generic components. This choice implies doubling the Application Programming Interfaces (APIs), thus almost doubling the size of the library itself, but it allows for the achievement of higher performance in the identical case, especially for KooN blocks.

3.1.1. Optimizations for KooN Computation

Several optimizations have been designed and implemented for RBD KooN blocks.
Two trivial optimizations, applicable to both RBD KooN blocks with generic and identical components, have been implemented. A KooN system with K = N is solved as an RBD series block, while a KooN system with K = 1 is solved as an RBD parallel block.
A major optimization, applicable to both RBD KooN blocks with generic and identical components, minimizes the number of computational steps. This optimization exploits the formula of the trivial configuration 0ooN, which is shown in Equation (13):
R 0 o o N = i = 0 N j = 1 N i P p a t h ( N , i , j ) = 1
Starting from Equation (13), we divide the outer sum into two separate sums, the first one ranging from 0 to K 1 , the second one ranging from K to N, and we substitute the contribution shown in Equation (6). Finally, we resolve for R K o o N as:
i = 0 K 1 j = 1 N i P p a t h ( N , i , j ) + i = K N j = 1 N i P p a t h ( N , i , j ) = 1 F K o o N + R K o o N = 1 R K o o N = 1 F K o o N
where F K o o N is the unreliability of a KooN block, i.e., the probability of having at least N K + 1 components failed in a block of N components. We finally observe that, when N K > K 1 , we can compute R K o o N exploiting Equation (14) decreasing the mathematical complexity.
For RBD KooN blocks with identical components, we compute and store all coefficients N i , i [ K , N ] that will be used during the computation of the reliability for each time instant. For RBD KooN blocks with generic components, we try to compute all combinations of i out of N components with i [ K , N ] that are needed to compute the reliability for each time instant. The number of these combinations is equal to i = K N N i .
The last optimization, which is applicable to RBD KooN blocks with generic components, is the adoption of a heuristic to decrease the computation time by using either Equation (7) or Equation (14). The number of recursion steps performed while applying Equation (7) is limited to N 2 [41]. On the other hand, the number of iterative steps performed while applying Equation (14) is limited to i = K N N i , with K N / 2 . The chosen heuristic used to compute reliability of a KooN block with generic components is the following one:
  • Use Equation (7) when all the following conditions are true:
    -
    The OS is able to allocate the memory to store all combinations of i out of N components with i [ K , N ] that are needed to compute the reliability for each time instant;
    -
    i = K N N i < N 2 .
  • Use Equation (14) otherwise.
Algorithm 1, together with auxiliary functions shown in Algorithm 2, is used to compute the reliability of an RBD KooN block with generic components, while Algorithm 3 is used to compute the reliability of an RBD KooN block with identical components.
Algorithm 1: Computation of RBD KooN block with generic components.
Input: Reliability R i of each component
Result: Reliability R of KooN block
begin (
   N _ s q u a r e = N · N ;
   s u m _ n C i = 0 ;
   if  ( N K ) ( K 1 )  then (
    for  i [ K , N ]  do
     ( s u m _ n C i = s u m _ n C i + N i ;
    if  s u m _ n C i < = N _ s q u a r e  then (
     R = 0 ;
     for  i [ K , N ]  do
      ( for  j N i  do
       ( R = R + R e l i a b i l i t y S t e p ( N , i , j ) ;
    else (
     R = R e l i a b i l i t y R e c u r s i v e ( N , K ) ;
   else (
    for  i [ 0 , K 1 ]  do
     ( s u m _ n C i = s u m _ n C i + N i ;
    if  s u m _ n C i < = N _ s q u a r e  then (
     R = 1 ;
     for  i [ 0 , ( K 1 ) ]  do
      ( for  j N i  do
       ( R = R R e l i a b i l i t y S t e p ( N , i , j ) ;
    else (
     R = R e l i a b i l i t y R e c u r s i v e ( N , K ) ;
Algorithm 2: Auxiliary functions for computation of RBD KooN block with generic components.
Input: Reliability R i of each component
Input: j-th combination of iooN components C ( N , i , j )
Function ReliabilityStep(N, i, j) (
   R s t e p = 1 ;
   for  l [ 1 , N ] )  do
    ( if  l C ( N , i , j )  then (
     R s t e p = R s t e p · R l ;
    else (
     R s t e p = R s t e p · ( 1 R l ) ;
   return  R s t e p ;
Function ReliabilityRecursive(i, j) (
   if  j = 0  then (
    return 1;
   if  j > i  then (
    return 0;
  return  ( 1 R i ) · R e l i a b i l i t y R e c u r s i v e ( i 1 , j ) + R i · R e l i a b i l i t y R e c u r s i v e ( i 1 , j 1 ) ;
Algorithm 3: Computation of RBD KooN block with identical components.
Input: Reliability R c of each component
Result: Reliability R of KooN block
begin (
   if  ( N K ) ( K 1 )  then (
    R = 0 ;
    for  i [ K , N ]  do
     ( R = R + N i · R c i · ( 1 R c ) N i ;
   else (
    R = 1 ;
    for  i [ 0 , ( K 1 ) ]  do
     ( R = R N i · R c i · ( 1 R c ) N i ;

3.1.2. Symmetric Multi-Processing (SMP)

In order to further increase performance, librbd adopts the Symmetric Multi-Processing (SMP) paradigm. The external library chosen for adding SMP support is pthreads. This library implements the management of threads and is compliant with the POSIX standard OS interface [48]. This library is always available on fully and mostly POSIX-compliant OSes (e.g., Mac OS and Linux). Microsoft Windows does not offer a native support to pthreads, but it is still possible to use it through one of the following two methods:
  • Download pthreads-win32, a freely available library which implements a large subset of the POSIX standard threads related API for Windows [49]. After pthreads-win32 has been downloaded, it is possible to use the desired IDE and Compiler (e.g., Visual Studio).
  • Download and install Cygwin, a freely available environment (i.e., tools and libraries) which provides a large collection of GNU and Open Source tools, including GCC, and a substantial POSIX API functionality, including pthreads-win32 [50].
In order to fully exploit the SMP paradigm, a key point is the subdivision of the task into batches. For this particular problem, the best subdivision is to assign a subset of data, i.e., a batch, to each thread. In particular, each thread receives as input the reliability values of all components over a subset of time instants. Furthermore, librbd interrogates the OS to retrieve the total number of CPU cores and uses this number as the maximum number of threads that can be created.
The usage of the SMP paradigm adds an overhead: each time an application requests the creation of a new thread and each time a thread terminates its computation, the OS has to perform additional operations. This overhead negates the benefits of SMP when the computational task is too small. In order to mitigate this issue, several tests have been conducted to find a minimum to the batch size. This minimum has been empirically set to 10 , 000 time instants.
The SMP functionality can be enabled or disabled at compile time. When SMP is not needed, i.e., when librbd is built as a Single Threaded (ST) library, it is compiled providing external compiler flag CPU_SMP defined with value 0. When SMP is needed, librbd is compiled without providing external compiler flag CPU_SMP or by defining it with a value different from 0.

3.2. Validation

To validate the developed library, we perform a comparison of librbd output with the one obtained by using SHARPE tool [41]. Two different RBD models for each RBD block have been generated, one using identical components and the other using generic components. The validation process has been carried out by using fifteen electronics components with constant failure rate validated using Telcordia SR-332 [51]: their failure rate is shown in Table 1. The eight RBD blocks modeled during the validation process are shown in Table 2.
For each RBD model, we have produced an output file containing the reliability of each analyzed time instant using both librbd and SHARPE. The reliability has been formatted using scientific notation with eight decimal places. Please note that, due to the chosen numerical representation, the uncertainty of the comparison operations is limited to 1.00 × 10 8 . The reliability curves obtained for each analyzed block are shown in Figure 4a–h. For a better graphical visualization, only the first 100,000 h are plotted for each reliability curve. The blue line represents the reliability curve obtained using librbd, while the red one uses SHARPE tool. In all the figures, the blue and red curves are overlapping, with the blue line completely hiding the red one. The visual inspection of the reliability curves obtained from the RBD models with both librbd and SHARPE tool proves the validity of the developed library.
To further strengthen the results of this validation we have computed, for each analyzed RDB model, the error function as the difference between the two reliability curves and we have computed the maximum and minimum value of this error function. The obtained minimum and maximum error are shown, for each RBD model, in Table 3. We suppose that this error is due to the different implementation of the two tools, in particular regarding the exact sequence of operations performed over floating-point numbers. From the analysis of the obtained results, we can observe that the maximum and minimum error between the two solutions is lower than the maximum uncertainty, hence it can be considered negligible.
Hence, we can conclude that librbd produces the valid result, i.e., the correct reliability curve, for each implemented RBD basic block.

3.3. librbd Usage

This section covers the library API. As already stated, librbd provides, for each RBD basic block, two distinct interfaces, one for the case of generic components and the other one for identical components. The library exposes a single header file, “rbd.h”, which provides access to the entire API.

3.3.1. API for Generic Components

The following interfaces are used to evaluate the reliability of RBD blocks with generic components:
  • int rbdSeriesGeneric(double *R, double *O, unsigned char N, unsigned int T)
  • int rbdParallelGeneric(double *R, double *O, unsigned char N, unsigned int T)
  • int rbdKooNGeneric(double *R, double *O, unsigned char N, unsigned char K, unsigned int T)
  • int rbdBridgeGeneric(double *R, double *O, unsigned char N, unsigned int T)
The capitalized and bold characters identify the following input parameters:
  • N: the number of components inside the block. Note that, for the bridge block, the number of components must be equal to 5.
  • K: the minimum number of components inside the block. Note that this parameter is available for KooN blocks.
  • T: the number of time instants over which the reliability curve is computed.
  • R: the reliability curves for the input components. Since this is the generic components case, this parameter underlies an N × T matrix.
  • O: the computed reliability curve, returned as an array of T elements.
All interfaces return 0 in case of successful computation and a negative number otherwise.

3.3.2. API for Identical Components

The following interfaces are used to evaluate the reliability of RBD blocks with identical components:
  • int rbdSeriesIdentical(double *R, double *O, unsigned char N, unsigned int T)
  • int rbdParallelIdentical(double *R, double *O, unsigned char N, unsigned int T)
  • int rbdKooNIdentical(double *R, double *O, unsigned char N, unsigned char K, unsigned int T)
  • int rbdBridgeIdentical(double *R, double *O, unsigned char N, unsigned int T)
The capitalized and bold characters identify the following input parameters:
  • N: the number of components inside the block. Note that, for the bridge block, the number of components must be equal to 5.
  • K: the minimum number of components inside the block. Note that this parameter is available for KooN blocks.
  • T: the number of time instants over which the reliability curve is computed.
  • R: the reliability curves for the input components. Since this is the identical components case, this parameter underlies an array of T elements.
  • O: the computed reliability curve, returned as an array of T elements.
All interfaces return 0 in case of successful computation, a negative number otherwise.

3.3.3. Example of librbd Usage

Let us consider the system shown in Figure 1. Since components C1 and C2 are identical in parallel configuration, the reliability curve of this first block can be computed by invoking rbdParallelIdentical. Finally, the reliability of the whole system can be computed through a series block with components C3 and C4 and the reliability of the previously evaluated parallel block by invoking rbdSeriesGeneric.
Listing 1 shows the C source code used to implement and analyze the described system. The reliability curves of all components are evaluated over T = 10 time instants. The source code, through the consecutive invocation of two different librbd APIs, evaluates the reliability of the whole system. Finally, the evaluated reliability is printed to the standard output.
Listing 1: Example of librbd usage.
 #include <stdio.h>
 #include <string.h>
 #include “rbd.h”   /* Include librbd header          */
 void main (void){
  /* Input data r_c1 - Reliability of C1/C2 as T array     */
  double r_c1[10] = {
   1.000, 0.930, 0.860, 0.790, 0.720,
   0.650, 0.580, 0.510, 0.440, 0.370
  };
  /* Input data r_c3 - Reliability of C3 as T array      */
  double r_c3[10] = {
   1.000, 0.980, 0.960, 0.940, 0.920,
   0.900, 0.880, 0.860, 0.840, 0.820
  };
  /* Input data r_c4 - Reliability of C4 as T array      */
  double r_c4[10] = {
   1.000, 0.970, 0.950, 0.910, 0.880,
   0.860, 0.830, 0.780, 0.720, 0.610
  };
  /* Intermediate data r_tmp - Reliability as NxT matrix   */
   double r_tmp[3][10];
  /* Output data - Reliability of the system as T array    */
double r_system[10];
    /* Compute reliability of parallel block and store     */
  /* result in first row of r_tmp              */
  rbdParallelIdentical (&r_c1[0], &r_tmp[0][0], 2, 10);
    /* Copy reliability of C3 to second row of r_tmp      */
  memcpy (&r_tmp[1][0], &r_c3[0], sizeof(double) * 10);
  /* Copy reliability of C4 to third row of r_tmp       */
  memcpy (&r_tmp[2][0], &r_c4[0], sizeof(double) * 10);
    /* Compute reliability of series block and store      */
  /* result in r_system                  */
  rbdSeriesGeneric (&r_tmp[0][0], &r_system[0], 3, 10);
    /* Print computed reliability             */
  for (int i = 0; i < 10; i++) {
    printf (“Reliability %d: %.6f\n”, i, r_system[i]);
  }
}
The C source code related to the described example and shown in Listing 1 has been compiled and executed. Its output is shown in Listing 2.
Listing 2: Output of librbd example.
  Reliability 0:  1.000000
  Reliability 1:  0.945942
  Reliability 2:  0.894125
  Reliability 3:  0.817677
  Reliability 4:  0.746127
  Reliability 5:  0.679185
  Reliability 6:  0.601557
  Reliability 7:  0.509741
  Reliability 8:  0.415135
  Reliability 9:  0.301671

4. Materials and Methods

In this section, we present the materials and the methods used to evaluate the performance of librbd. In particular, in Section 4.1 we present the materials used, while in Section 4.2 we discuss the methodology adopted to evaluate the performance of librbd and to compare it with SHARPE.

4.1. Materials

The five PCs listed in Table 4 have been used in order to measure the performance of librbd [43].
Both librbd and test binaries were built using the following compiling options:
  • Optimization level set to the maximum level (−O3);
  • Target architecture set as follows:
    -
    Advanced Micro Devices X86-64 (amd64) for Intel CPUs;
    -
    ARMv6 with VFPv2 coprocessor (armv6+fp) for ARM CPU.
To compare the performance of librbd, we use SHARPE [41,42] since it is the closest tool to all our requirements. SHARPE tool is available on Windows OS only. To perform the comparison with SHARPE tool, we exploited the dual boot-able PC1. The second OS installed on this machine is Windows 7 with Cygwin GCC 7.4 . 0 .

4.2. Methods

The evaluation of performance has been conducted through the usage of a test application instrumented in order to measure the execution time of librbd of several RDB blocks over different time instant configurations. In particular, we defined the following set of RBD models to be used during the execution time monitoring:
  • Series blocks with 2, 3, 5, 10 and 15 generic components;
  • Series blocks with 2, 3, 5, 10 and 15 identical components;
  • Parallel blocks with 2, 3, 5, 10 and 15 generic components;
  • Parallel blocks with 2, 3, 5, 10 and 15 identical components;
  • 1oo2, 2oo3, 3oo5, 5oo10 and 8oo15 blocks with generic components;
  • 1oo2, 2oo3, 3oo5, 5oo10 and 8oo15 blocks with identical components;
  • Bridge block with generic components;
  • Bridge block with identical components.
Each RBD model has been analyzed for 50,000 , 100,000 and 200,000 time instants. To further investigate the performance of KooN RBD blocks, we used the following models and we analyzed them over 100,000 time instants:
  • All blocks ranging from 1oo15 to 15oo15 with generic components;
  • All blocks ranging from 1oo15 to 15oo15 with identical components.
The chosen instrumentation method has been implemented through a succession of invocations to clock_gettime API, one immediately preceding the librbd invocation and the other one as soon as librbd returned. The usage of this API has the following advantages and drawbacks:
  • It returns a monotonic clock (i.e., guaranteed to be nondecreasing), which allows to measure the time spent in executing a program routine with a time resolution up to nanoseconds;
  • It takes into account not only user time (application time) but also system time;
  • It is defined by The Open Group POSIX standard [48].
In order to minimize the impact from the second point, each experiment has been repeated 15 times and, after all experiments were run, the median time of execution has been selected. We chose the median time since it minimizes the impact of the time spent by the OS which is unrelated to the RBD block analysis.
To compare the performance of librbd w.r.t. SHARPE, we define the following set of RBD models analyzed for 100,000 time instants:
  • Series blocks with 2, 3, 5, 10 and 15 generic components;
  • Series blocks with 2, 3, 5, 10 and 15 identical components;
  • Parallel blocks with 2, 3, 5, 10 and 15 generic components;
  • Parallel blocks with 2, 3, 5, 10 and 15 identical components;
  • 1oo2, 2oo3, 3oo5, 5oo10 and 8oo15 blocks with generic components;
  • 1oo2, 2oo3, 3oo5, 5oo10 and 8oo15 blocks with identical components;
  • Bridge block with generic components;
  • Bridge block with identical components.
The comparison experiments were done for series, parallel, KooN and bridge blocks for a time interval of 200,0000 time instants. The failure rate λ of each component has been chosen using the same criteria described in Section 3.2 and in Table 1.
To compare the execution time, we created a test application that uses librbd to run the aforementioned RBD models and that produces an output log file with the same formatting of SHARPE tool.

5. Results and Discussion: Evaluation of librbd Performance

In this section, we evaluate the performance of the librbd library. In Section 5.1 we evaluate the execution time of librbd using different computers and different RBD layouts. Finally, in Section 5.2, we compare the execution time needed to analyze the same problem by both SHARPE and librbd.

5.1. Evaluation of librbd Execution Time

The measurement experiments were performed as described in Section 4.2 and the execution time results are presented in Table 5, Table 6, Table 7, Table 8, Table 9, Table 10, Table 11, Table 12, Table 13 and Table 14 for generic and identical components, for each of the different RBD blocks (namely, series, parallel, N / 2 ooN, Koo15, bridge).
As expected, for both series and parallel blocks with generic and identical components (see Table 5, Table 6, Table 7 and Table 8), we observe that the computation time is linear w.r.t. both the number of time intervals and the number of components.
This result hence confirms the correctness of librbd design w.r.t. the optimization of both series and parallel blocks.
The experiments with N / 2 ooN blocks are used to evaluate the worst case execution time of KooN blocks (see Table 9Table 10). Using the optimized computation Algorithms 1 and 2 for KooN blocks with generic components we verify that the complexity is O ( N 2 · T ) and that the complexity for KooN blocks with identical components computed using Algorithm 3 is O ( N · T ) . The experiments with Koo15 blocks are used to evaluate the impact of the optimized algorithms for KooN computation with a fixed number of components (see Table 11 and Table 12). For these experiments, we observe that the execution time is, as expected, symmetrical w.r.t. the worst case K = N / 2 .
The experiments performed on all KooN blocks are aligned with the foreseen complexity and hence they validate the correctness of both librbd design and optimization algorithms implemented for the most complex RBD block.
Finally, as expected, for bridge block with both generic and identical components, we observe that the computation time is linear w.r.t. the number of time intervals (see Table 13 and Table 14).
In addition, for this last result, we confirm the correctness of librbd design w.r.t. the optimization of bridge blocks.
Finally, it is important to note the execution times on the different PCs. We observe that, for all Intel i7 CPUs, we have obtained comparable results. The difference between the Intel i5 CPU and the other Intel CPUs may be due to both differences in the CPU architecture and in the OS used. Finally, we observe a sensible difference between all Intel-based PCs and the ARM-based one. This may be due to several architectural differences of the two CPU architectures. The principal one could be that, while the tested ARM CPU incorporates 4 physical cores, i.e., with the number of concurrently executing threads equal to 4, the tested Intel CPUs incorporate 4 physical cores with Hyper-Threading technology, thus providing a number of concurrently executing threads ranging from 4 to 8. Nonetheless, the performed experiments show promising results also on low-power and low-cost CPUs.

5.2. Comparison with SHARPE

SHARPE provides a Graphical User Interface for specifying performance, reliability and performability models through the usage of a specification language. It then provides analysis and solution methods for the previously generated models. The analysis methods are available as a Command Line Interface executable. This tool acquires the input model through the usage of a SHARPE specification language file and produces as output a textual log file.
The comparison experiments were performed as described in Section 4.2 and the obtained results are presented in Table 15. We observe that the execution times of librbd are significantly lower than the ones obtained by using SHARPE.

6. Conclusions and Future Work

In this paper, we presented librbd, an open source optimized library for reliability evaluation using the RBD formalism. After the mathematical background description, we illustrated the library design and characteristics. Then, we showed its execution times on different platforms and performed a comparison with the most similar tool identified at the state-of-the-art. The good results achieved enable the usage of librbd in hierarchical approaches for reliability evaluation exploiting strengths of both combinatorial and state-space based models. In particular, the comparison experiments show that the execution time of librbd is, in general, almost 9 times faster than the one obtained using SHARPE. These good results encourage the usage of librbd to implement a prognostics application that leverages a frequent computation of the tuned reliability curve.
Future research and advancements of librbd include the following:
  • Development of a tool that allows the graphical definition of RBDs and their analysis through the usage of librbd.
  • Development of a tool that allows the graphical definition of hierarchical models (RBDs and STPNs/GSPNs) and that integrates librbd and SIRIO library for their quantitative evaluation.
  • Usage of native Windows APIs for SMP to decrease the execution time on this OS.
  • Investigation on the performance loss experienced for KooN block with generic components. This performance loss is visible with N = 15 and it is probably due to a nonoptimized usage of the cache memory.

Author Contributions

Conceptualization, L.C. (Laura Carnevali), L.C. (Lorenzo Ciani), A.F. and M.P.; methodology, L.C. (Laura Carnevali), L.C. (Lorenzo Ciani), A.F. and M.P.; software, M.P.; validation, A.F., G.G. and M.P.; formal analysis, G.G. and M.P.; investigation, G.G. and M.P.; resources, M.P.; data curation, M.P.; writing—original draft preparation, M.P.; writing—review and editing, L.C. (Laura Carnevali), L.C. (Lorenzo Ciani), A.F., G.G. and M.P.; visualization, G.G. and M.P.; supervision, A.F.; project administration, A.F.; funding acquisition, A.F. All authors have read and agreed to the published version of the manuscript.

Funding

This research received no external funding.

Institutional Review Board Statement

Not applicable.

Informed Consent Statement

Not applicable.

Data Availability Statement

Data sharing not applicable. No new data were created or analyzed in this study. Data sharing is not applicable to this article.

Conflicts of Interest

The authors declare no conflict of interest.

Abbreviations

The following abbreviations are used in this manuscript:
CTMCContinuous Time Markov Chain
DFTDynamic FT
DRBDDynamic RBD
FTFault Tree
FTREFT with Repeated Events
GSPNGeneralized Stochastic Petri Net
OSOperating System
RBDReliability Block Diagram
RGReliability Graph
SANStochastic Activity Network
SMPSymmetric Multi-Processing
SPNStochastic Petri Net
SRNStochastic Reward Net
STPNStochastic Time Petri Net

References

  1. ISO/IEC/IEEE. International Standard-Systems and Software Engineering—Vocabulary; ISO/IEC/IEEE 24765:2010(E); IEEE: New York, NY, USA, 2010; pp. 1–418. [Google Scholar] [CrossRef]
  2. CENELEC. EN 50126-1: Railway Applications–The Specification and Demonstration of Reliability, Availability, Maintainability and Safety (RAMS)-Part 1: Generic RAMS Process; Technical Report; CENELEC: Brussels, Belgium, 2017. [Google Scholar]
  3. Trivedi, K.S.; Bobbio, A. Reliability and Availability Engineering; Cambridge University Press: Cambridge, UK, 2017. [Google Scholar] [CrossRef]
  4. Mahboob, Q.; Zio, E. Handbook of RAMS in Railway Systems: Theory and Practice; CRC Press: Boca Raton, FL, USA, 2018. [Google Scholar] [CrossRef]
  5. Moskowitz, F. The analysis of redundancy networks. Trans. Am. Inst. Electr. Eng. Part I Commun. Electron. 1958, 77, 627–632. [Google Scholar] [CrossRef]
  6. IEC. IEC 61078: Reliability Block Diagrams; Technical Report; IEC: Geneva, Switzerland, 2016. [Google Scholar]
  7. Hixenbaugh, A.F. Fault Tree for Safety; Technical Report; Boeing Aerospace Company: Seattle, WA, USA, 1968. [Google Scholar]
  8. IEC. IEC 61025: Fault Tree Analysis (FTA); Technical Report; IEC: Geneva, Switzerland, 2006. [Google Scholar]
  9. Rubino, G. Network reliability evaluation. In State-of-the-Art in Performance Modeling and Simulation; Gordon & Breach Books: London, UK, 1998. [Google Scholar]
  10. Bryant, R.E. Graph-Based Algorithms for Boolean Function Manipulation. IEEE Trans. Comput. 1986, C-35, 677–691. [Google Scholar] [CrossRef] [Green Version]
  11. Ericson, C. Fault Tree Analysis-A History. In Proceedings of the 17th International System Safety Conference, Orlando, FL, USA, 16–21 August 1999; pp. 1–9. [Google Scholar]
  12. Stewart, W. Introduction to the Numerical Solution of Markov Chains; Princeton University Press: Princeton, NJ, USA, 1994. [Google Scholar]
  13. IEC. IEC 61165: Application of Markov Techniques; Technical Report; IEC: Geneva, Switzerland, 2006. [Google Scholar]
  14. Molloy, M. Performance Analysis Using Stochastic Petri Nets. IEEE Trans. Comput. 1982, 31, 913–917. [Google Scholar] [CrossRef]
  15. Marsan, M.A.; Conte, G. A class of generalized stochastic petri nets for the performance evaluation of multiprocessor systems. ACM Trans. Comput. Syst. 1983, 2, 93–122. [Google Scholar] [CrossRef]
  16. Vicario, E.; Sassoli, L.; Carnevali, L. Using stochastic state classes in quantitative evaluation of dense-time reactive systems. IEEE Trans. Softw. Eng. 2009, 35, 703–719. [Google Scholar] [CrossRef]
  17. IEC. IEC 62551: Analysis Techniques for Dependability—Petri Net Techniques; Technical Report; IEC: Geneva, Switzerland, 2012. [Google Scholar]
  18. Ciardo, G.; Blakemore, A.; Chimento, P.F.; Muppala, J.K.; Trivedi, K.S. Automated Generation and Analysis of Markov Reward Models Using Stochastic Reward Nets. In Linear Algebra, Markov Chains, and Queueing Models; Meyer, C.D., Plemmons, R.J., Eds.; Springer-Verlag: New York, NY, USA, 1993; pp. 145–191. [Google Scholar]
  19. Ciardo, G.; Trivedi, K.S. A decomposition approach for stochastic reward net models. Perform. Eval. 1993, 18, 37–59. [Google Scholar] [CrossRef]
  20. Meyer, J.; Movaghar, A.; Sanders, W. Stochastic Activity Networks: Structure, Behavior, and Application. In Proceedings of the International Workshop on Timed Petri Nets, Torino, Italy, 1–3 July 1985; pp. 106–115. [Google Scholar]
  21. Sanders, W.H.; Meyer, J.F. Stochastic Activity Networks: Formal Definitions and Concepts. In Lectures on Formal Methods and Performance Analysis: First EEF/Euro Summer School on Trends in Computer Science Bergen Dal, The Netherlands, 3–7 July 2000; Hermanns, H., Katoen, J.-P., Brinksma, E., Eds.; Springer: Berlin/Heidelberg, Germany, 2000; pp. 315–343. [Google Scholar] [CrossRef]
  22. Malhotra, M.; Trivedi, K.S. Power-hierarchy of dependability-model types. IEEE Trans. Reliab. 1994, 43, 493–502. [Google Scholar] [CrossRef] [Green Version]
  23. Distefano, S.; Puliafito, A. Dynamic reliability block diagrams: Overview of a methodology. In Proceedings of the European Safety and Reliability Conference 2007, ESREL 2007-Risk, Reliability and Societal Safety, Stavanger, Norway, 25–27 June 2007; Volume 2. [Google Scholar]
  24. Distefano, S.; Puliafito, A. Dependability Evaluation with Dynamic Reliability Block Diagrams and Dynamic Fault Trees. IEEE Trans. Dependable Secur. Comput. 2009, 6, 4–17. [Google Scholar] [CrossRef]
  25. Dugan, J.B.; Bavuso, S.J.; Boyd, M.A. Dynamic fault-tree models for fault-tolerant computer systems. IEEE Trans. Reliab. 1992, 41, 363–377. [Google Scholar] [CrossRef] [Green Version]
  26. Codetta-Raiteri, D. The Conversion of Dynamic Fault Trees to Stochastic Petri Nets, as a case of Graph Transformation. Electron. Notes Theor. Comput. Sci. 2005, 127, 45–60. [Google Scholar] [CrossRef] [Green Version]
  27. Volk, M.; Weik, N.; Katoen, J.P.; Nießen, N. A DFT Modeling Approach for Infrastructure Reliability Analysis of Railway Station Areas. In Formal Methods for Industrial Critical Systems; Larsen, K.G., Willemse, T., Eds.; Springer International Publishing: Cham, Switzerland, 2019; pp. 40–58. [Google Scholar]
  28. Carnevali, L.; Ciani, L.; Fantechi, A.; Papini, M. A novel layered approach to evaluate reliability of complex systems. In Proceedings of the 2019 IEEE 5th International forum on Research and Technology for Society and Industry (RTSI), Florence, Italy, 9–12 September 2019; pp. 291–295. [Google Scholar] [CrossRef]
  29. Papini, M. Reliability Evaluation of an Industrial System Through Predictive Diagnostics. Ph.D. Thesis, Universitá degli Studi di Firenze, Florence, Italy, 2021. [Google Scholar]
  30. Iannino, A.; Musa, J.D. Software Reliability. In Advances in Computers; Marshall, C.Y., Ed.; Elsevier: Amsterdam, The Netherlands, 1990; Volume 30, pp. 85–170. [Google Scholar] [CrossRef]
  31. Lyu, M. Handbook of Software Reliability Engineering; McGraw-Hill, Inc.: New York, NY, USA, 1996. [Google Scholar]
  32. Mzyk, R.; Paszkiel, S. Influence of Program Architecture on Software Quality Attributes. In Control, Computer Engineering and Neuroscience; Paszkiel, S., Ed.; Springer International Publishing: Cham, Switzerland, 2021; pp. 322–329. [Google Scholar] [CrossRef]
  33. Wood, A. Predicting software reliability. Computer 1996, 29, 69–77. [Google Scholar] [CrossRef]
  34. Pham, H. System Software Reliability (Springer Series in Reliability Engineering); Springer-Verlag: Berlin/Heidelberg, Germany, 2006. [Google Scholar] [CrossRef]
  35. Ballerini, S.; Carnevali, L.; Paolieri, M.; Tadano, K.; Machida, F. Software rejuvenation impacts on a phased-mission system for Mars exploration. In Proceedings of the 2013 IEEE International Symposium on Software Reliability Engineering Workshops (ISSREW), Pasadena, CA, USA, 4–7 November 2013; pp. 275–280. [Google Scholar] [CrossRef]
  36. Paolieri, M.; Biagi, M.; Carnevali, L.; Vicario, E. The ORIS Tool: Quantitative Evaluation of Non-Markovian Systems. IEEE Trans. Softw. Eng. 2019, in press. [Google Scholar] [CrossRef]
  37. RBDTool. Web Page. Available online: http://pages.mtu.edu/~pjbonamy/rbdtool.html (accessed on 13 November 2019).
  38. Edraw Block Diagram. Web Page. Available online: https://www.edrawsoft.com/reliability-block-diagram-software.php (accessed on 23 April 2021).
  39. Reliability Workbench. Web Page. Available online: https://www.isograph.com/software/reliability-workbench/rbd-analysis/ (accessed on 23 April 2021).
  40. Relyence RBD. Web Page. Available online: https://www.relyence.com/products/rbd/ (accessed on 23 April 2021).
  41. Sahner, R.A.; Trivedi, K.S.; Puliafito, A. Performance and Reliability Analysis of Computer Systems: An Example-Based Approach Using the SHARPE Software Package; Kluwer Academic Publishers: Alphen aan den Rijn, The Netherlands, 1996. [Google Scholar] [CrossRef]
  42. SHARPE. Web Page. Available online: https://sharpe.pratt.duke.edu/ (accessed on 23 April 2021).
  43. librbd. Web Page. Available online: https://github.com/marcopapini/librbd (accessed on 23 April 2021).
  44. Siewiorek, D.P.; Swarz, R.S. Reliable Computer Systems: Design and Evaluation, 3rd ed.; A. K. Peters, Ltd.: Natick, MA, USA, 1998. [Google Scholar]
  45. Catelani, M.; Ciani, L.; Venzi, M. RBD Model-Based Approach for Reliability Assessment in Complex Systems. IEEE Syst. J. 2019, 13, 2089–2097. [Google Scholar] [CrossRef]
  46. Fourment, M.; Gillings, M. A comparison of common programming languages used in bioinformatics. BMC Bioinform. 2008, 9, 82. [Google Scholar] [CrossRef] [PubMed] [Green Version]
  47. IEEE. IEEE. IEEE Standard for Floating-Point Arithmetic. In IEEE Std-754-2019 (Revision IEEE-754-2008); IEEE: New York, NY, USA, 2019; pp. 1–84. [Google Scholar] [CrossRef]
  48. IEEE. IEEE. IEEE Standard for Information Technology–Portable Operating System Interface (POSIX™) Base Specifications, Issue 7. In IEEE Std 1003.1-2017 (Revision of IEEE Std 1003.1-2008); IEEE: New York, NY, USA, 2018; pp. 1–3951. [Google Scholar] [CrossRef]
  49. pthreads-win32. Web Page. Available online: http://sourceware.org/pthreads-win32/ (accessed on 23 April 2021).
  50. Cygwin. Web Page. Available online: https://www.cygwin.com/ (accessed on 23 April 2021).
  51. Telcordia SR-332. Reliability Prediction Procedure for Electronic Equipment; Technical Report Issue 4; Telcordia Network Infrastructure Solutions (NIS): Bridgewater, NJ, USA, 2016. [Google Scholar]
Figure 1. Example of layered reliability model.
Figure 1. Example of layered reliability model.
Applsci 11 04026 g001
Figure 2. Application of layered reliability evaluation.
Figure 2. Application of layered reliability evaluation.
Applsci 11 04026 g002
Figure 3. Layout of RBD bridge block.
Figure 3. Layout of RBD bridge block.
Applsci 11 04026 g003
Figure 4. Validation of reliability of RBD blocks
Figure 4. Validation of reliability of RBD blocks
Applsci 11 04026 g004
Table 1. Components and their respective failure rate λ .
Table 1. Components and their respective failure rate λ .
ComponentFailure Rate λ ( h 1 ) ComponentFailure Rate λ ( h 1 )
C10.0000084019C90.0000027777
C20.0000039438C100.0000055397
C30.0000078310C110.0000047740
C40.0000079844C120.0000062887
C50.0000091165C130.0000036478
C60.0000019755C140.0000051340
C70.0000033522C150.0000095223
C80.0000076823
Table 2. RBD models used during validation.
Table 2. RBD models used during validation.
RBD BlockTopologyT (h)Components
Series identical15 components 200,000 C1
Series generic15 components 200,000 All
Parallel identical15 components 200,000 C1
Parallel generic15 components 200,000 All
KooN identical8oo15 200,000 C1
KooN generic8oo15 200,000 All
Bridge identical5 components 200,000 C1
Bridge generic5 components 200,000 From C1 to C5
Table 3. Error function between librbd and SHARPE tool.
Table 3. Error function between librbd and SHARPE tool.
RBD BlockError Function
MinimumMaximum
Series identical−1.00 × 10 13 1.00 × 10 13
Series generic−1.00 × 10 13 1.00 × 10 11
Parallel identical0.00 × 10 0 0.00 × 10 0
Parallel generic0.00 × 10 0 0.00 × 10 0
KooN identical−1.00 × 10 9 0.00 × 10 0
KooN generic−1.00 × 10 9 0.00 × 10 0
Bridge identical0.00 × 10 0 0.00 × 10 0
Bridge generic0.00 × 10 0 0.00 × 10 0
Table 4. PCs used for performance evaluation.
Table 4. PCs used for performance evaluation.
NameChassisCPU & RAMOS & Compiler
PC1WorkstationIntel i7-2600Ubuntu
@ 3.8 GHz 18.04 _amd64
16GB-DDR3GCC
@ 1333MHz 5.4 . 0
PC2NotebookIntel i7-6700HQMac OS
@ 3.5 GHz 10.13 . 6
16GB-LPDDR3Apple LLVM
@ 2133MHz 10.0 . 0
PC3NotebookIntel i7-7700HQUbuntu
@ 3.8 GHz 18.04 _amd64
32GB-DDR4GCC
@ 2400MHz 5.4 . 0
PC4NotebookIntel i5-8365UWindows
@ 1.9 GHz10
16GB-DDR4Cygwin GCC
@ 2666MHz 7.4 . 0
PC5Raspberry
Pi 3
4 × Cortex - A 53 Raspberry Pi OS
@ 1.2 GHz10_AArch32
1GB-LPDDR2GCC
@ 900MHz 8.3 . 0
Table 5. Performance evaluation of series generic block.
Table 5. Performance evaluation of series generic block.
Topology# TimesExecution Time (ms)
PC1PC2PC3PC4PC5
250,0000.4360.2680.2280.6572.812
2100,0000.2470.3650.2900.8964.336
2200,0000.5480.7060.6211.6928.156
350,0000.1740.2600.2280.6712.446
3100,0000.3800.4190.3070.9044.732
3200,0000.7010.8510.6571.65911.720
550,0000.1930.2640.2890.6464.229
5100,0000.4120.3940.4360.9276.505
5200,0000.9020.7920.7291.76713.761
1050,0000.3510.3510.3170.7068.312
10100,0000.8840.6370.6341.02113.734
10200,0001.7541.1901.1441.97227.330
1550,0000.5380.4910.4330.76011.697
15100,0001.2790.8730.8481.11720.715
15200,0002.6501.8311.6462.03441.191
Table 6. Performance evaluation of series identical block.
Table 6. Performance evaluation of series identical block.
Topology# TimesExecution Time (ms)
PC1PC2PC3PC4PC5
250,0000.3880.2630.2200.6332.325
2100,0000.2520.3430.2900.9583.785
2200,0000.5110.6380.5971.7096.790
350,0000.1630.2550.2050.6901.510
3100,0000.3650.3700.3060.8693.521
3200,0000.6020.7740.6261.5586.591
550,0000.1790.2600.2530.6831.865
5100,0000.3290.3560.4110.8563.098
5200,0000.5610.6900.6941.7406.862
1050,0000.2870.2670.2740.6672.146
10100,0000.5320.3790.4380.9254.041
10200,0000.6730.7250.7371.8398.507
1550,0000.4130.3140.3470.7372.419
15100,0000.5730.4690.5650.9324.262
15200,0000.8740.9330.9351.8747.831
Table 7. Performance evaluation of parallel generic block.
Table 7. Performance evaluation of parallel generic block.
Topology# TimesExecution Time (ms)
PC1PC2PC3PC4PC5
250,0000.1970.3100.2040.6851.978
2100,0000.2780.4300.3920.8584.053
2200,0000.5940.8610.6351.5888.407
350,0000.1830.2950.1980.6553.190
3100,0000.3560.4320.4560.8845.626
3200,0000.6910.8040.6631.69811.161
550,0000.2060.3130.2260.6864.056
5100,0000.4740.4330.4560.9517.139
5200,0000.9400.8580.7341.65514.948
1050,0000.4460.3550.4190.6519.915
10100,0000.8790.6170.7090.94716.667
10200,0001.7971.2321.1101.89129.725
1550,0000.5480.4400.5520.76513.544
15100,0001.3470.9450.8961.08922.388
15200,0002.6491.8531.9162.11042.094
Table 8. Performance evaluation of parallel identical block.
Table 8. Performance evaluation of parallel identical block.
Topology# TimesExecution Time (ms)
PC1PC2PC3PC4PC5
250,0000.1810.3020.1990.6411.406
2100,0000.2600.3960.3420.8383.983
2200,0000.5230.8210.6291.6277.381
350,0000.1780.2920.1970.6421.637
3100,0000.3600.4230.4440.8313.316
3200,0000.5660.7560.6231.6306.872
550,0000.1870.2920.2240.7042.093
5100,0000.4010.3830.4380.8683.784
5200,0000.5940.7760.6731.5277.597
1050,0000.2900.2840.3150.6272.068
10100,0000.5610.3940.4890.8544.145
10200,0000.7180.7540.7181.7007.429
1550,0000.3880.3050.3470.6882.522
15100,0000.6420.4760.5520.9184.626
15200,0000.8010.8920.9511.9978.311
Table 9. Performance evaluation of N / 2 ooN generic block.
Table 9. Performance evaluation of N / 2 ooN generic block.
Topology# TimesExecution Time (ms)
PC1PC2PC3PC4PC5
1oo250,0000.1830.3060.2110.6671.810
1oo2100,0000.2540.4020.3930.7913.873
1oo2200,0000.5610.7820.6171.5408.123
2oo350,0000.6690.7680.7090.7766.478
2oo3100,0001.2651.2781.2801.16312.146
2oo3200,0002.7242.2992.7872.12221.686
3oo550,0002.4532.4192.7162.10330.528
3oo5100,0004.3135.4024.4684.09044.617
3oo5200,0007.2249.4668.4487.61182.247
5oo1050,00020.58445.09620.46235.188299.916
5oo10100,00044.08388.87646.22778.124506.973
5oo10200,00078.657178.79380.726288.728986.001
8oo1550,000558.2921212.422571.2781838.1667753.987
8oo15100,0001167.8562406.3771194.0933694.70815,316.800
8oo15200,0002233.6624784.1582278.3037666.60430,172.290
Table 10. Performance evaluation of N / 2 ooN identical block.
Table 10. Performance evaluation of N / 2 ooN identical block.
Topology# TimesExecution Time (ms)
PC1PC2PC3PC4PC5
1oo250,0000.1710.2930.1990.6171.397
1oo2100,0000.2500.3780.3670.8053.613
1oo2200,0000.5330.7480.5981.5378.085
2oo350,0000.3770.3340.3800.6493.745
2oo3100,0000.6160.4820.7181.0026.674
2oo3200,0000.9800.8561.1492.09912.279
3oo550,0000.4910.3720.5790.9645.452
3oo5100,0000.8400.6820.8821.1489.192
3oo5200,0001.2511.2441.5132.05615.876
5oo1050,0000.6580.7080.7640.96110.244
5oo10100,0001.3151.3961.2201.30915.746
5oo10200,0002.1692.3391.9904.62128.266
8oo1550,0001.4221.1681.7202.65118.303
8oo15100,0003.0272.4562.8104.75627.901
8oo15200,0004.4034.0354.94010.61348.033
Table 11. Performance evaluation of Koo15 generic block.
Table 11. Performance evaluation of Koo15 generic block.
Topology# TimesExecution Time (ms)
PC1PC2PC3PC4PC5
1oo15100,0001.2800.7650.9292.30517.021
2oo15100,00010.94410.0579.16724.55288.657
3oo15100,00073.16561.57764.344155.191571.809
4oo15100,000183.721341.797183.270604.8272025.680
5oo15100,000406.931836.953418.7331297.4444983.553
6oo15100,000740.5321503.090753.5732314.1679237.214
7oo15100,0001062.3302126.8531071.3693260.55713,325.713
8oo15100,0001190.3092386.7321192.3854171.04315,280.717
9oo15100,0001064.5832134.6901052.0933688.21013,398.969
10oo15100,000742.0561511.135758.8242466.0449164.543
11oo15100,000411.900837.570417.8531287.8064967.779
12oo15100,000183.203341.557189.317590.7642015.668
13oo15100,00062.120107.02672.951107.102664.601
14oo15100,0009.43215.41610.36817.220100.526
15oo15100,0001.4400.9331.0412.16318.609
Table 12. Performance evaluation of Koo15 identical block.
Table 12. Performance evaluation of Koo15 identical block.
Topology# TimesExecution Time (ms)
PC1PC2PC3PC4PC5
1oo15100,0000.6630.4300.6352.0834.653
2oo15100,0000.8280.8830.8842.9088.284
3oo15100,0001.1541.1851.0643.05411.596
4oo15100,0001.4541.4011.4023.38514.935
5oo15100,0001.8481.6601.5353.18318.000
6oo15100,0002.1471.8981.7233.51321.169
7oo15100,0002.4782.1361.9683.73424.497
8oo15100,0003.0632.4752.8315.84227.787
9oo15100,0002.7312.1182.5966.28324.446
10oo15100,0002.4321.9002.4184.91721.156
11oo15100,0002.0721.6461.9313.69618.043
12oo15100,0001.5621.4141.6663.14414.822
13oo15100,0001.2401.1811.3402.56411.546
14oo15100,0000.9330.9351.1282.3428.221
15oo15100,0000.6350.4640.6411.9804.719
Table 13. Performance evaluation of bridge generic block.
Table 13. Performance evaluation of bridge generic block.
# TimesExecution Time (ms)
PC1PC2PC3PC4PC5
50,0000.2530.2630.2401.3612.962
100,0000.4060.4490.4521.7365.967
200,0000.8530.8230.7743.37510.985
Table 14. Performance evaluation of bridge identical block.
Table 14. Performance evaluation of bridge identical block.
# TimesExecution Time (ms)
PC1PC2PC3PC4PC5
50,0000.2350.2480.2181.3771.600
100,0000.3380.3410.3951.6733.272
200,0000.5480.7060.6493.2937.289
Table 15. Execution time comparison.
Table 15. Execution time comparison.
RBD BlockTopologyExecution Time (s)Gain (%)
librbdSHARPE
Series generic20.100.9889.95
30.101.1291.04
50.110.9888.97
100.101.9494.60
150.102.5996.19
Series identical20.100.9089.24
30.110.9688.32
50.110.9087.72
100.121.2390.40
150.101.4593.31
Parallel generic20.110.9889.08
30.101.1291.20
50.110.9889.22
100.102.0394.95
150.102.7896.36
Parallel identical20.100.9289.19
30.110.9588.74
50.110.9288.51
100.121.3191.16
150.101.5993.85
KooN generic1oo20.111.0189.37
2oo30.121.1589.95
3oo50.111.0189.44
5oo100.152.2893.21
8oo152.353.3629.96
KooN identical1oo20.110.8887.80
2oo30.110.8988.13
3oo50.110.8887.71
5oo100.081.3194.20
8oo150.081.8195.71
Bridge generic50.101.6494.16
Bridge identical50.091.6694.35
Publisher’s Note: MDPI stays neutral with regard to jurisdictional claims in published maps and institutional affiliations.

Share and Cite

MDPI and ACS Style

Carnevali, L.; Ciani, L.; Fantechi, A.; Gori, G.; Papini, M. An Efficient Library for Reliability Block Diagram Evaluation. Appl. Sci. 2021, 11, 4026. https://doi.org/10.3390/app11094026

AMA Style

Carnevali L, Ciani L, Fantechi A, Gori G, Papini M. An Efficient Library for Reliability Block Diagram Evaluation. Applied Sciences. 2021; 11(9):4026. https://doi.org/10.3390/app11094026

Chicago/Turabian Style

Carnevali, Laura, Lorenzo Ciani, Alessandro Fantechi, Gloria Gori, and Marco Papini. 2021. "An Efficient Library for Reliability Block Diagram Evaluation" Applied Sciences 11, no. 9: 4026. https://doi.org/10.3390/app11094026

APA Style

Carnevali, L., Ciani, L., Fantechi, A., Gori, G., & Papini, M. (2021). An Efficient Library for Reliability Block Diagram Evaluation. Applied Sciences, 11(9), 4026. https://doi.org/10.3390/app11094026

Note that from the first issue of 2016, this journal uses article numbers instead of page numbers. See further details here.

Article Metrics

Back to TopTop