I managed to move connect functionality over, and then it took me no time to convert sockperf over to new api. with some mods to the app to allow for more tests per iteration, here are the results.

NB These were done against the same echod running using the current api.

Current API

APR Test Application: sockperf
Tests Complete!
      1024 byte block:
        100 iterations :          Average:    351
      4096 byte block:
        100 iterations :          Average:    472
     16384 byte block:
        100 iterations :          Average:  81524
     65536 byte block:
        100 iterations :          Average:   3422
    262144 byte block:
        100 iterations :          Average:  14361

APR Test Application: sockperf
Tests Complete!
      1024 byte block:
        100 iterations :          Average:    639
      4096 byte block:
        100 iterations :          Average:    632
     16384 byte block:
        100 iterations :          Average:  81753
     65536 byte block:
        100 iterations :          Average:   2009
    262144 byte block:
        100 iterations :          Average:  10227

Revised IO api

APR Test Application: sockperf
Tests Complete!
      1024 byte block:
        100 iterations :          Average:    324
      4096 byte block:
        100 iterations :          Average:    290
     16384 byte block:
        100 iterations :          Average:  83065
     65536 byte block:
        100 iterations :          Average:   2358
    262144 byte block:
        100 iterations :          Average:  10132

APR Test Application: sockperf
Tests Complete!
      1024 byte block:
        100 iterations :          Average:    581
      4096 byte block:
        100 iterations :          Average:    578
     16384 byte block:
        100 iterations :          Average:  83164
     65536 byte block:
        100 iterations :          Average:   2637
    262144 byte block:
        100 iterations :          Average:  12143

NB any idea why the 16k tests are so much slower? Is it an apr issue or an os one?

Basically the results show the sorts of variations we'd expect I think. They don't seem to point to truly horrible reduction in IO though.

I think that somehow people aren't really "on the same page" as I am, so I'll try and explain again what I'm aiming for. When fully implemented the IO abstraction will allow ANY app to create it's own type of apr_io_t - which can then be mised/matched with any other type of apr_io_t within the app. In my imagination the revised apr_ssl code simply creates apr_io_t's - there is no longer a notion of files/sockets/pipes or anything else. All the code currently under network_io and file_io goes away - replaced instead by code unser simply 'io'. The api is extensible - deliberatly so.

I have the headers creating docs, so if people want me to put them online then I'm happy to do so. They should at least point to how it all fits together.

This seems to be what is needed and what people want. That's why I dropped the 'io' from the function names as there shouldn't be a need for any other forms of these functions. Will's suggestion that you should be able to call specific functions is utter lunacy with the abstraction I'm aiming for - if you even care then you're doing something wrong. That's not to say there aren't functions that will need to be called directly, but a function apr_xml_config_get(...) is different to simply reading the file, which would be done by apr_read().

Now,if people don't want this or don't see a need then I'm happy to walk away and forget it.

david

Reply via email to