[Asterisk-Users] Re: four wildcards in a single pc
Stephen R. Besch
sbesch at acsu.buffalo.edu
Mon Dec 13 09:53:50 MST 2004
Jim Van Meggelen wrote:
> OK, look, you _might_ be able to free up enough IRQs on a PIC-based
> motherboard -- if you disable the serial ports, mouse, parallel port and
> USB. It's not recommended, but it's theoretically possible.
>
> And if you have a MoBo that is APIC-compliant, you should be able to
> have all the IRQs you can handle, so lack of IRQs doesn't need to be an
> issue (make sure you have a BIOS and chipset that's up to the task).
>
> BUT . . .
>
> Getting dedicated IRQs for the cards is a minor problem compared to what
> happens when you have four cards hammering away mercilessly at the
> chipset and CPU of your motherboard; 1000 IRQs per second, per card.
> Nobody's really sure what's wrong, but it causes problems for pretty
> nearly everyone.
>
> What everyone here is saying is that we're all pretty sure you're gonna
> run into problems; problems that could easily be avoided by avoiding the
> whole TDM400 mess in the first place.
>
>
>>What am I missing?
>
>
> The Digium cards are unique in the world of telephony, because instead
> of having an expensive DSP chip on board, they use the CPU to provide
> this functionality. The challenge comes from the fact that voice is
> intolerant of delay. In order to ensure that the voice processing that
> goes on in the CPU is handled with no perceivable delay, the zaptel
> cards have to establish a kind of pseudo-synchronous clocking with the
> CPU. Unfortunately, the signalling bus on a PC isn't synchronous, at
> least not in that way. The "clock" that the zaptel cards use is the IRQ
> of the card, literally requesting the CPU interrupt what it's doing and
> pay attention to it 1000 times per second, regardless of what it's
> doing. You are proposing the use of FOUR of these cards.
>
> Since this has caused trouble for nearly everyone who has tried it,
> everyone is suggesting that you might want to give the matter some
> careful thought. There _are_ less painful ways.
>
> Cheers,
>
> Jim.
Not so much to raise an argument as to make a few comments. Please
remember that the following is mostly a synthesis based on comments in
this thread. They are made in the interest of clarification and are
subject to additional comments, corrections, flames, etc.
1) This is not to minimize the problem, but 1000 interrupts per second
is quite a few, but not an overwhelming amount. Keep in mind that an
"unbuffered" serial card (and there are more than a few of these out
there) working at 19.2 Kbaud will rack up 1900 interrupts per second and
the CPU doesn't even sweat. Even an old pig CPU wasn't much strained by
19.2 Kbaud. I used to run an interprocessor link between 2 PDP8's at
38.4 KBaud as a background task with a data terminal running at 19.2
KBaud, and it was hard to tell when data transfer's were going on. That
computes to as many as 5700 interrupts per second. I suspect that
something else is going on here.
2) While it is hard to estimate directly, if the driver is properly
designed, the number of interrupts should not scale linearly. One drive
should handle all cards, and part of the time there will be more than
one card needing servicing on an interrupt. If the driver does not test
for this, then it should.
3) No card is truly "unbuffered". That would make the interrupt service
headroom nearly zero. You would have to get to the card in the time it
takes to transfer a single bit, that's only 15.6 microseconds at 64K.
One must use at least a single buffer. From the comments made earlier in
this thread, clearly the Digium card is using at least an 8-deep buffer.
In fact, I suspect that the buffer is a standard 16-byte FIFO with the
threshold set at 8 bytes. What this means is that it would be possible
to handle all 4 cards in a single interrupt, depending of course on the
design of the buffer, by always emptying all 4 card's buffers on any
interrupt. In fact, only one card (i.e., the master) should even have
interrupts enabled!
4) All of the preceding notwithstanding, I suspect that the real issue
has nothing (or little) to do with interrupt load, but, given that the
card uses CPU cycles rather than a DSP, the problem is more likley CPU
overload from data handling, which in turn, causes missed interrupts.
The point here is that the card designers made the choice to use the CPU
as a DSP, assuming that a server box+card was cheaper than a more
expensive card. In otherwords, the combination was intended to be the
telephony apparatus, not just the card. If you make that assumption,
then those who are successfully using more than one card per CPU are
getting a really good deal. The second, third ... card is essentially a
freebie.
Sincerely,
Stephen R. Besch
More information about the asterisk-users
mailing list