I'll be posting a tcpdump real soon now. I checked and the mtu setting is 1500. I tried with pMTUd both on and off, there's no difference. I wouldn't' expect any. There's a single, reasonably modern switch between the server and the squeezeboxes (I've tried a couple, actually) and they wouldn't be messing with packets.
Implementing nonblocking writes made no difference, but I'd be horrified if it had. As far as I can tell, LMS is single threaded (if so, not a shock - threads are a horror show in perl, just like most everything else in perl). So it was forced to use nonblocking I/O everywhere and use select() to figure out what to do next. It wasn't because it was the better choice or had special characteristics - they just didn't have another option, and the LMS code is the spaghetti it is because they didn't have better choices. They get credit for making it work at all, but the code is littered with bug tracking and you can begin to see why the product died. With the Classic at 131 and using my server, -many- songs hit the dreaded empty play buffer condition almost immediately. In 131, when that happens it just halts playing, so instead of stuttering it stops cold. These are all good things as far as my testing is concerned - the stuttering was hard on my nerves, and so was waiting for over a minute to see if things would fail each time. Plus I was getting very tired of hearing the first 40 seconds of Benedictus over and over. The new symptoms are interesting. Since I'm getting play buffer fullness reports every 5 seconds now, I can see that initially the buffer gets some trivial amount of data - 0.01 or so, then it rises a very little but quickly crashes back to 0. How fast it crashes back to 0 depends on the song. For some songs, though, it never hits 0, the buffer fullness rises towards 0.99 and the song plays straight through. When I can see the fullness starting to crash towards 0, if I'm quick enough I can pause the stream, wait a few seconds, and continue, and things are better for awhile. There's an interesting aspect to that. When a song is paused, my server keeps sending the song stream at the squeezebox. The local OS TCP buffer is just about always maxed out or nearly, and it's obvious that the squeezebox isn't "sipping" from the stream very quickly, though why I don't know - it's got nothing else to do when the music is paused, and you'd think it would drink the data at network speeds. But it doesn't, and more interestingly... while the song is paused, I'm still queryng the buffer fullness over and over and -it does not move-. Even though it's taking in data from the TCP stream, it's not going into the play buffer, or if it is it's forgetting to report that. And then I unpause the stream and things get very weird - instead of the buffer fullness jumping to a much higher number (due to all the previous sipping it was doing), it instead -rises in steps over a number of seconds-. I don't know where it was squirreling away the data I shipped (or why it read it so slowly) but it doesn't seem to end up in the classic's play buffer unless the song is playing! When I'm doing now is running strace on LMS - the code is too messy to follow, and all that matters is what system calls it's making anyway. I can see, so far, that it's just sending stream data in a nonblocking fashion in a way that's probably close to identical to what my server is doing. But, while I have to dive deeper into this, I think it's sending different strm commands at the very beginning of the song. It's possible LMS is deliberately or accidentally delaying the start of playing until there's more of the song shipped - in effect, pausing play for long enough to let even the glacially slow classic's reads make a little progress. I'll strace my server, and LMS, and take a hard look at any differences. I wish I could get my hands on the original coders for LMS - I bet they have stories to tell. Funny note, unrelated to the problem - when I installed LMS, I gave it exactly one song in the library. After fussing with getting everything working, I navigated to it with the remote and played it - not hard when there's just one song. It played fine - except the intro was longer! I have no idea how it happened, but LMS had somehow jumped from the one song in my local library to an online version of the same song... I had a few horrible moments of wondering if my .flac file had been corrupt all this time and the old firmware had just skipped part of the song for years - but no, I just needed to restart things and make sure it was really on the local library. I still have no idea how it found a different version of Benedictus... ------------------------------------------------------------------------ ScottAM's Profile: http://forums.slimdevices.com/member.php?userid=69412 View this thread: http://forums.slimdevices.com/showthread.php?t=110986 _______________________________________________ unix mailing list unix@lists.slimdevices.com http://lists.slimdevices.com/mailman/listinfo/unix