Hi,

first, after a while owserver could be called pretty stable now using
DS9490 in many (few hundreds) larger installations!
And sorry for the long mail ;)


Now I want to get to some "luxury-problems" and improve
performance/response-time of my client still; i.e. rewrite it in C with
multithreading etc. but struggle finding "the perfect method" to balance
speed, load and responsetime interfacing owfs.


Given my realistic (test-)setup which I'll refer to in this thread:
- owfs 2.8p15(*1), 5x DS9490, 45 slaves: (35x DS18B20, 6x DS2438, 4x DS2413)
and a bunch of DS1990A iButtons, which are most of the time disconnected.
- LX800@500Mhz (586) with some basic but steady load
- the current client (single-threaded) runs in parallel

No issues with the DS18B20 they take their time for convert_t, or DS2438
but I want to poll the DS2413 (IO) and iButtons connect/disconnect as
fast as anyhow possible - uncached(??)
The iButtons can/are connected to a sep. DS9490 with no other slaves on
- but I cannot know which one it will be..



So assuming owfs uses sep. threads for each busmaster I thought it makes
sense to use multiple threads on the client(s) either but have still
some odd results and want to understand the internals of owfs better to
optimize:
(each test was carried out at least 100x, repeatedly)

a) "owget /uncached" -> median: 2.43s, min: 1.51s, max: 4.82s
(why is it so slow? worst case another client could do a parallel
convert_t on a DS18B20 but this takes at most 1sec)

b) "owget /" (cached) -> median: 0.11s, min: 0.05s, max: 0.88s
Good news, thats pretty fast enough (but I have to do uncached owdir to
get iButtons asap? OTOH I want the cache for other things so not disable it)

c) "owget /uncached/3A.B4D207000000/sensed.ALL" (DS2413) ->  median:
0.13s, min: 0.02s, max: 1.23s
Well, fine either.

d) "owget /uncached/01.CE7578120000/present" (with iButton present on
1w!) -> median: 0.01s, min: 0.00s, max: 0.11s
Perfectly fine!

e) "owget /uncached/01.CE7578120000/present" (with this iButton NOT
present on 1w!) -> median: 0.88s, min: 0.27s, max: 2.10s
Thats fine either in terms of my setup but it confuses me! Shouldn't it
be exactly the same SEARCH_ROM on all busses as a) ?
Other slaves haven't (dis)appeared during this test..

In tabular form:
   median min max
a) 2.43s, 1.51s, 4.82s
b) 0.11s, 0.05s, 0.88s
c) 0.13s, 0.02s, 1.23s
d) 0.01s, 0.00s, 0.11s
e) 0.88s, 0.27s, 2.10s


My goal is to optimize responsetime/latency, owserver load (currently
25-30% CPU, while decoding&playing a 320kbit MP3 takes 10% there)
So I thought of at least 4 sep. threads:
- continous uncached owdir
- looking for iButtons (in cache)
- getting DS2413/2406 IO's (uncached)
- reading the - not time critical -remainder, cached

And then I thought, if it wouldn't be great for owserver to have some
kind of long-polling API where the client only gets notified if
something interesting (again: iButtons, IO's) has changed instead of
polling every 100ms.. Though I have no idea if/how this could be
implemented..
During the next days I wanted to add some timestamp-output to debugging
to find out where we loose these 1-3secs but maybe there is an easier
way/thought..

Any ideas, comments, suggestions are welcome.

*1): from the CVS commits I found nothing that should affect my setup
but I could surely update..

Michael

------------------------------------------------------------------------------
LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
Remotely access PCs and mobile devices and provide instant support
Improve your efficiency, and focus on delivering more value-add services
Discover what IT Professionals Know. Rescue delivers
http://p.sf.net/sfu/logmein_12329d2d
_______________________________________________
Owfs-developers mailing list
Owfs-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/owfs-developers

Reply via email to