شما می توانید با ارسال ایمیل خود ، بصورت رایگان مشترک شده و از بروزسانی مطلع شوید.

ایمیل خود را وارد کنید:

 WebRTC چیست؟ یکی از تکنولوژی های بسیار مهم در دنیای مخابرات امروز WebRTC ست. با استفاده از این تکنولوژی، می توان در بستر وب و تنها با استفاده از مرورگر، ارتباطات صوتی و تصویری برقرار کرد؛ که این به معنی امکان برقراری ارتباط از طریق هر گجت (Gadget) بدون نیاز به نصب نرم افزار خاص [...]

یکی دیگر از ماژول های کاربردی مورد استفاده در FreePBX ماژول Boss Secretary می باشد که متاسفانه از نسخه ی ۱۲ دیگر بروزرسانی نشده اما به دلیل کاربرد زیاد آن برای مشتریان، در نهایت این ماژول توسط تیم فنی شرکت ساعیان ارتباط بهینه سازی و مشکلات آن مرتفع شده است. در ادامه به معرفی این [...]

یکی از مواردی که پس از نصب فری پی بی ایکس ( FreePBX ) برای کاربران بوجود می آید این است که ارتباط تجهیزاتی مانند گیت وی Gateway با استریسک، پس از دقایقی قطع می شود. در ادامه ابتدا به بررسی علت این مسئله و سپس راهکار آن می پردازیم. نحوه کار قابلیت Intrusion Detection [...]

یکی از سناریوهای رایج و متداولی که بسیاری از همکاران با آن سروکار دارند، ارتباط میان گیت وی های سنگوما Sangoma Vega Gateway و سرور ایزابل Issabel می باشد که در نتیجه ارتباط با شبکه مخابرات PSTN را میسر می نماید. در این مقاله قصد داریم برقراری این ارتباط را به زبانی ساده، آموزش دهیم. [...]

یکی از نیازمندی های اصلی در سیستم های تلفنی تغییر فایل های صوتی مربوط به اعلان های سیستم می باشد. همچنین ممکن است نیاز باشد تا در منوی صوتی از چند زبان مختلف پشتیبانی کنید. برای تغییر prompt های سیستم تلفنی استریسک و همچنین تعریف زبان های مختلف، روش های گوناگونی وجود دارد که ساده [...]

یکی از مباحثی که در راه اندازی شبکه های VoIP رایج است، برقراری ارتباط میان دو سرور تلفنی می باشد. به عنوان مثال دو سرور تلفنی را در نظر بگیرید که در دو مکان مجزا در حال سرویس دهی به کاربران خود می باشند و لازم است تا کاربران این دو سیستم نیز بتوانند با [...]

در FreePBX سه روش جهت راه اندازی فکس وجود دارد: ماژول تجاری Fax Pro، استفاده از اپلیکیشن های استریسک و سرور فکس Hylafax. هر یک از این روش ها ویژگی هایی دارند؛ ماژول Fax Pro قابلیت ارسال و دریافت فکس را برای کاربران از طریق UCP فراهم می کند. یعنی کاربران با ورود به محیط [...]

یکی از نیازمندی های اصلی در یک سیستم تلفنی، امکان ارسال و دریافت فکس می باشد. البته امروزه با توسعه بیش از پیش ابزار های ارتباطی همچون ایمیل، روش های سنتی مانند فکس کمتر مورد استفاده قرار می گیرند؛ ولی هنوز کاملا جایگزین نشده اند. بنابراین با بکارگیری سیستم های تلفنی مبتنی بر VoIP نیز [...]

صندوق صوتی از نیازمندی های مهم IP-PBX ها بوده و می تواند میزان سرویس دهی و همچنین در دسترس بودن را برای کاربران افزایش دهد. علاوه بر این، امکان ارسال پیام های صندوق صوتی از طریق ایمیل، این قابلیت را کاربردی تر می نماید. این قابلیت را در FreePBX می توانید به سادگی برای کابران [...]

در مقاله های قبلی نحوه ضبط پیام صوتی در  ماژول System Recording و بکارگیری آن در ساخت منوی صوتی شرح داده شد. علاوه بر این قابلیت، در برخی موارد نیاز است تا برای تماس گیرنده یک پیام صوتی خاص پخش شود و سپس به مقصد دیگری هدایت شود. به عنوان مثال اطلاع رسانی درباره یک [...]

عیب یابی مشکل کیفیت صدا در کارت های DAHDI

بیشتر مشکلات مربوط به پایین بودن کیفیت صدا و مشکل در دریافت فکس در کارت‌های تلفنی به دلیل وجود overrun در کارت  می‌باشد. دو دلیل که باعث overrun می شود shared IRQ و Disk activity می‌باشد. برای اینکه از وجود overrun در کارتهای خود مطمئن شوید در کارتهای sangoma شما می‌توانید با زدن دستور watch -d -n 0.5 ifconfig  به دنبال overrun ، در کارت سنگوما خود که به صورت w1g1 نشان داده می‌شود بگردید اگر مقدار overrun رو به افزایش بود، یعنی شما بر روی کارت overrun دارید.

 

overrun

توجه کنید مقداری overrun هنگام up شدن کارت به وجود می‌آید که مشکلی ندارد فقط مقدار آن نباید رو به افزایش باشد که شما می‌توانید با چند بار زدن دستور ifconfig از افزایش آن مطمئن شوید.

برای کارتهای openvox نیز می‌توانید بعد از اجرای دستور dmesg ، در خروجی آن به دنیال overrun بگردید همانند زیر:

dmesg | grep -i overrun

اگر خروجی همانند زیر دیدید در واقع نشان دهنده overrun بر روی کارت openvox می‌باشد.

dahdi: HDLC Receiver overrun on channel TE4/0/1/16 (master=TE4/0/1/16)

 

برای بررسی این موارد ابتدا یک توضیح مختصری در رابطه با هر کدام از آنها می‌دهم .

Interrupt – IRQ

interrupt به روشی گفته  می‌شود که از طریق آن سخت افزار می‌تواند با پردازنده ارتباط برقرار کند. برای مثال هنگامی که یک کارت شبکه بسته‌ای را دریافت می‌کند، از طریق interrupt به پردازنده اطلاع می‌دهد تا پردازش بر روی آن بسته‌ها صورت گیرد.

IRQ یک شماره‌ای است که برای مشخص کردن interrupt استفاده می‌شود. یک PC معمولی ۱۶ IRQ دارد (از شماره ۰ تا ۱۵)  و بیشتر آنها توسط device های onboard مانند floppy ، کارت صدا و … گرفته شده‌اند.

برای به دست آوردن لیست آنها در لینوکس، دستور زیر را وارد کنید .

cat /proc/interrupts

در زیر نمونه‌ای از خروجی دستور بالا را می‌بینید.

           CPU0       CPU1
  0:      42552          0          XT-PIC  timer
  1:          8          0          XT-PIC  i8042
  2:          0          0          XT-PIC  cascade
  5:        173          0          XT-PIC  eth0
  6:          5          0          XT-PIC  floppy
  7:          0          0          XT-PIC  parport0
  8:          0          0          XT-PIC  rtc
  9:          0          0          XT-PIC  acpi, Ensoniq AudioPCI
 10:          0          0          XT-PIC  uhci_hcd:usb2
 11:       6036          0          XT-PIC  ehci_hcd:usb1, ioc0
 12:        116          0          XT-PIC  i8042
 15:        208          0          XT-PIC  ide1
NMI:          0          0
LOC:      65131      66270
ERR:          0
MIS:          0

 

APIC

apic در واقع راهی برای گذشتن از محدودیت ۱۶ IRQ می‌باشد. در سیستم های چند پردازنده‌ای APIC به صورت پیش فرض فعال است.

دستور قبلی با اضافه کردن noapic در پارامترهای kernel در grub.conf اجرا شده بود که ما در نتیجه فقط تا شماره ۱۵ را در IRQ می‌بینیم خروجی دستور زیر بدون noapic در پارامتر های kernel می‌باشد که می‌بینیم شماره‌های بالاتر نیز در IRQ دیده می‌شود.

           CPU0       CPU1
  0:     352717          0    IO-APIC-edge  timer
  1:          9          0    IO-APIC-edge  i8042
  6:          5          0    IO-APIC-edge  floppy
  7:          0          0    IO-APIC-edge  parport0
  8:          0          0    IO-APIC-edge  rtc
  9:          0          0   IO-APIC-level  acpi
 12:         53          0    IO-APIC-edge  i8042
 15:       1930          0    IO-APIC-edge  ide1
 51:       7782          0   IO-APIC-level  ehci_hcd:usb1, ioc0
 59:          0          0   IO-APIC-level  uhci_hcd:usb2
 67:       1205          0   IO-APIC-level  eth0
 75:          0          0   IO-APIC-level  Ensoniq AudioPCI
NMI:          0          0
LOC:     635562     635318
ERR:          0
MIS:          0

 

به طور کلی داشتن APIC می‌تواند گزینه مناسبی برای جلوگیری از interrupt sharing باشد.

 

برای پیدا کردن IRQ متناظر با کارت خود دستور lspci -v را اجرا کنید.

lspci -v

 

معمولا برای پیدا کردن کارتهای تلفنی خود می‌توانید در آخر خروجی دستور، آن را پیدا کنید در زیر نمونه‌ای از کارت سنگوما می‌باشد که بر روی IRQ ۱۹ قرار دارد.

۰۳:۰۱٫۰ Network controller: Sangoma Technologies Corp. A200/Remora FXO/FXS Analog AFT card
        Subsystem: Device a112:3713
        Flags: bus master, medium devsel, latency 255, IRQ 19
        Memory at fddf8000 (32-bit, non-prefetchable) [size=32K]

 

برای پیدا کردن Interrupt sharing دستور زیر را اجرا کنید.

cat /proc/interrupts
           CPU0       CPU1       CPU2       CPU3
  0:        123          1         24          2   IO-APIC-edge      timer
  1:          1          0          1          0   IO-APIC-edge      i8042
  3:          0          0          1          1   IO-APIC-edge
  4:          0          1          0          0   IO-APIC-edge
  7:          0          0          0          0   IO-APIC-edge      parport0
  8:          0          0          0          1   IO-APIC-edge      rtc0
  9:          0          0          0          0   IO-APIC-fasteoi   acpi
 12:          0          2          1          1   IO-APIC-edge      i8042
 14:       9176       6896      18477       5449   IO-APIC-edge      ata_piix
 15:      36146       9492      70544       8499   IO-APIC-edge      ata_piix
 16:     102726      17955        336         29   IO-APIC-fasteoi   uhci_hcd:usb5
 18:          0          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb4
 19:       2652       2656       2712   21713805   IO-APIC-fasteoi   uhci_hcd:usb3, wanpipe1, wanpipe2
 23:          2          1          0          0   IO-APIC-fasteoi   ehci_hcd:usb1, uhci_hcd:usb2
 26:     318565       4208      60929      87446   PCI-MSI-edge      i915
 27:        151        142        109        111   PCI-MSI-edge      snd_hda_intel
 28:         13      16460         11      12647   PCI-MSI-edge      eth0
NMI:        307        269        173        543   Non-maskable interrupts
LOC:    6395114    6735099    7258826    1308457   Local timer interrupts
SPU:          0          0          0          0   Spurious interrupts
PMI:        307        269        173        543   Performance monitoring interrupts
IWI:          0          0          0          0   IRQ work interrupts
RES:      10055       8496      11959      11831   Rescheduling interrupts
CAL:      10161        218       9802        238   Function call interrupts
TLB:       6258       4324       3038       4931   TLB shootdowns
TRM:          0          0          0          0   Thermal event interrupts
THR:          0          0          0          0   Threshold APIC interrupts
MCE:          0          0          0          0   Machine check exceptions
MCP:         29         29         29         29   Machine check polls
ERR:          0
MIS:          0

 

در مثال بالا می‌بینیم که کارتهای سنگوما با پورت usb یک IRQ دارند برای رفع این مسئله می‌توانید در تنظیمات BIOS خود کارتهایی را که به آنها نیازی ندارید مانند کارت VGA و پورت های usb اضافه را disable کنید و یا slot pci کارت خود را جابه‌جا کنید.

 

برای به دست آوردن مقدار interrupt دستور زیر را اجرا کنید. در این دستور خروجی دستور cat /proc/interrupts هر یک ثانیه یک بار نمایش داده می‌شود.

watch -n 1 'cat /proc/interrupts '

در این دستور تعداد interrupt مربوط به هر IRQ را در یک ثانیه نشان می‌دهد. برای کارتهای تلفنی شما باید در هر ثانیه ۱۰۰۰ interrupt داشته‌ باشید.

 

اگر پردازنده تعداد زیادی interrupt در لحظه دریافت کند این باعث می‌شود که cpu شانس کمتری برای پردازش اطلاعات دریافتی از کارت تلفنی را داشته باشد.

چه اتفاقی می‌افتد اگر cpu در لحظه ۲ interrupt را دریافت کند؟

cpu بر اساس اولویت شماره IRQ آنها پاسخ خواهد داد.

[۰ ۱ ۲ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ ۱۵ ۳ ۴ ۵ ۶ ۷]

در لیست بالا ۰ بالاترین اولویت و ۷ پایین ترین اولویت را خواهد داشت

با توجه به این که اگر APIC در سیستم شما فعال می‌باشد IRQ گرفته شده در کارت PCI شما شماره‌ای غیر از اعداد بالا خواهد بود بنابراین برای به دست آوردن IRQ مناسب دستور lspci -vb را اجرا کنید تا IRQ دقیق را به دست آورید (دستور lspci با option -b باعث می‌شود IRQ متناظر از دید کارت نشان داده شود در حالی که با option -v شما IRQ داده شده از دید kernel را مشاهده می‌کنید)

هر چه IRQ شما بیشتر در سمت چپ لیست بالا قرار گیرد کارت تلفنی شما اولویت بیشتری نسبت به device های دیگر برای پردازش دیتا دارد.

در سیستم های چند پردازنده‌ای اگر توجه کنید بعضی از core های cpu هیچ interrupt را دریافت نمی‌کنند، شما می‌توانید با دادن مقدار به فایل smp_affinity مربوط به IRQ خود، تمامی interrupt های دریافتی از آن IRQ را بر روی core و یا core های دیگر بفرستید. به این صورت که در فایل proc/irq//[irq number]/smp_affinity/ عدد دلخواه خود را وارد کنید برای مثال:

echo 0 > /proc/irq/19/smp_affinity

دستور بالا تمامیinterrupt های دریافتی از IRQ ۱۹ را به پردازنده اول میفرستد درحالی که دستور زیر تمامی interrupt ها را به پردازنده دوم می‌فرستد

echo 1 > /proc/irq/19/smp_affinity

 

مشکلات Disk

ابتدا مطمئن شوید خروجی دستورات زیر بالاتر از ۴۰mb/sec است. اگر از هارد sata استفاده می‌کنید دستور زیر را اجرا کنید.

hdparm -t /dev/sda

/dev/sda:
 Timing buffered disk reads:  286 MB in  3.01 seconds =  94.97 MB/sec

و اگر از هارد IDE استفاده می‌کنید دستور زیر را اجرا کنید.

hdparm -t /dev/hda
/dev/hda:
 Timing buffered disk reads:  240 MB in  3.01 seconds =  79.73 MB/sec

hdparm  /dev/hda

/dev/hda:
 multcount    = 16 (on)
 IO_support   =  0 (default 16-bit)
 unmaskirq    =  0 (off)
 using_dma    =  1 (on)
 keepsettings =  0 (off)
 readonly     =  0 (off)
 readahead    = 256 (on)
 geometry     = 65535/16/63, sectors = 80026361856, start = 0

 

مطمئن شوید که using_dma برابر با ۱ است. اگر تمامی تست‌های بالا با موفقیت انجام شد مطمئن شوید acpi در سیستم شما فعال نباشد. acpi باعث می‌شود تا از عملکرد کامل pci شما جلوگیری شود. برای این کار دستور زیر را اجرا کنید اگر خروجی عددی غیر از صفر بود آن گاه acpi در سیستم شما فعال است.

cat /proc/interrupts | grep -c acpi

 

برای غیر فعال کردن آن در فایل etc/grub.conf/ پارامتر زیر را به آخر خط kernel خود اضافه کنید.

title Test Linux (3.5.3)
        root (hd0,0)
        kernel /vmlinuz-3.5.3 ro root=UUID=e553f7ad-bfbf-47a3-9eec-17d367f77b5d rhgb quiet acpi=off
        initrd /initramfs-3.5.3.img

 

(توجه کنید ACPI و APIC شما را گمراه نکند)

 

دیدگاه خود را به ما بگویید.