[ 
https://issues.apache.org/jira/browse/NIFI-1460?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15131590#comment-15131590
 ] 

ASF GitHub Bot commented on NIFI-1460:
--------------------------------------

Github user trkurc commented on the pull request:

    https://github.com/apache/nifi/pull/202#issuecomment-179579922
  
    @taftster  - code readability is subjective, I prefer actually prefer what 
is in the PR. The String.format makes it an order of magnitude slower based on 
my initial tests. I see no appreciable difference between StringBuffer and 
StringBuilder
    
    The results of the below code:
    ``
    1 ===== 304 elapsed
    2 ===== 1717 elapsed
    3 ===== 248 elapsed
    ```
    The StringBuffer is faster, but it is likely due to some of the JVM string 
magic.
    
    ```java
            int iter = 1<<20;
            AtomicLong ai = new AtomicLong(0);
    
            long now = System.currentTimeMillis();
    
            for(int i=0; i < iter; i++) {
                final String s=Long.toHexString(ai.getAndIncrement());
                String x2 = new 
StringBuilder("00000000-0000-0000-0000000000000000".substring(0,(35-s.length()))+s).insert(23,
 '-').toString();
                
            }
            System.out.printf("1 ===== %d elapsed\n", 
(System.currentTimeMillis() - now ));
            
            now = System.currentTimeMillis();
    
            for(int i=0; i < iter; i++) {
                String x2 =        new StringBuilder()
                .append("00000000-0000-0000-")
                .append(String.format("%016x", ai.getAndIncrement()))
                 .insert(23, '-')
                .toString();     
            }
            System.out.printf("2 ===== %d elapsed\n", 
(System.currentTimeMillis() - now ));
            
            
            now = System.currentTimeMillis();
    
            for(int i=0; i < iter; i++) {
                final String s=Long.toHexString(ai.getAndIncrement());
    
                String x2 = new 
StringBuffer("00000000-0000-0000-0000000000000000".substring(0,(35-s.length()))+s).insert(23,
 '-').toString();
    
            }
            System.out.printf("3 ===== %d elapsed\n", 
(System.currentTimeMillis() - now ));
    ``` 


> Test Performance improvement. Test Timeout Mitigation.
> ------------------------------------------------------
>
>                 Key: NIFI-1460
>                 URL: https://issues.apache.org/jira/browse/NIFI-1460
>             Project: Apache NiFi
>          Issue Type: Improvement
>          Components: Core Framework, Tools and Build
>    Affects Versions: 0.4.1
>         Environment: linux, unix with true random number generator.
>            Reporter: Puspendu Banerjee
>            Assignee: Tony Kurc
>            Priority: Minor
>              Labels: performance
>             Fix For: 0.6.0
>
>   Original Estimate: 1h
>  Remaining Estimate: 1h
>
> Existing test case 
> nifi-framework-core/src/test/java/org/apache/nifi/controller/TestStandardFlowFileQueue.java
>  uses a huge number of call to UUID.randomUUID() which is very slow in linux 
> , unix environment if there is not much activity [ like mouse move etc.] .In 
> addition to that UUID.randomUUID() depends on /dev/(u)random to get a random 
> number, such system call costs IO and /dev/random is bandwidth/rate limited  
> which again slows down overall performance.
> Workaround is rngd daemon(ref: http://linux.die.net/man/8/rngd)



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to