LINUX.ORG.RU

Сообщения rom_ka

 

ALSA, использование poll()

Экспериментирую с alsa. В тестовых целях пытаюсь написать некий код для вывода звука. Не могу понять как правильно опрашивать хандлеры (snd_pcm_t) с помощью вызова poll()
Следующие функции:

int snd_pcm_poll_descriptors_count(snd_pcm_t *pcm)
int snd_pcm_poll_descriptors(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int space)
int snd_pcm_poll_descriptors_revents(snd_pcm_t *pcm, struct pollfd *pfds, unsigned int nfds, unsigned short *revents)
«кагбы намекают» мне, что у одного хандлера может быть несколько файловых дескрипторов.

Собственно вопросы:

  • в каких случаях у хандлера может быть больше одного дескриптора?
  • в случае двух и больше дескрипторов, по какому из них запускать snd_pcm_poll_descriptors_revents()? По первому? По каждому?
  • можно ли в тот же массив struct pollfd добавлять другие дескрипторы, например сетевые?

В документации (которая практически отсутствует) к alsa ответов не нашел. Гугл также молчит. Надеюсь на вашу помощь в познании «истины» alsa. :)

 ,

rom_ka
()

Тип контроллера

Для тестов некоторого софта потребовалось поднять несколько виртуалок в virtualbox. Диски виртуалок решено подключать по iscsi. Если я правильно понял, протокол iscsi это, в грубом приближении, передача scsi команд по tcp. Собственно вопрос: установка типа контроллера scsi в настройках вирт.машины дает ли какие либо улучшения перформанса? А также интересует насколько эмуляция scsi затратнее по сравнению с ide и sata?

 ,

rom_ka
()

Значение sin6_scope_id в структуре sockaddr_in6

В целях самообразования решил поэкспериментировать с ipv6 сокетами. Но возникла проблемка - никак не могу понять суть поля sin6_scope_id в структуре sockaddr_in6

struct sockaddr_in6 {
    sa_family_t sin6_family;    /* AF_INET6 */
    in_port_t sin6_port;        /* Transport layer port # */
    uint32_t sin6_flowinfo;     /* IPv6 flow information */
    struct in6_addr sin6_addr;  /* IPv6 address */
    uint32_t sin6_scope_id;     /* IPv6 scope-id */
};
Гугль рекомендует заполнять это поле так:
addr.sin6_scope_id = if_nametoindex("eth0");
Но недопонимание сути этого scope id напрягает. Собственно вопрос: какое назначение у поля sin6_scope_id и в какое значение его правильно устанавливать?

 

rom_ka
()

KVM+virtio+win2k3

В целях эксперимента установил win2k3 в kvm c virtio-дровами (брал здесь http://alt.fedoraproject.org/pub/alt/virtio-win/latest/images/bin/virtio-win-...), но получил забавный эффект. Практически все устройства винда предлагает безопасно отключить. Скрин Некоторые устройства отключаються, некоторые нет. Удалось «безопасно» отключить даже сетевой адаптер «Red Hat VirtIO Ethernet Adapter». Собственно вопрос: это нормальное поведение kvm+virtio+win или я что-то накосячил?

Дистрибутив: Debian squeeze
Uname:

Linux svr7 2.6.32-5-xen-amd64 #1 SMP Mon Oct 3 07:53:54 UTC 2011 x86_64 GNU/Linux
Виртуалка создавалась командой:
virt-install -n host4 -r 512 --disk /dev/vg00/host4_d1,bus=virtio,format=raw --disk /home/rom/iso/virtio-win-0.1-22.iso,device=cdrom --accelerate --vnc --vncport=5904 --vnclisten 0.0.0.0 --noautoconsole --os-type=windows --os-variant=win2k3 -w bridge:brm0,model=virtio
Конфиг виртуалки:
<domain type='kvm'>
  <name>host4</name>
  <uuid>94d9798a-cd7b-c8db-929e-5ad1d16e8cce</uuid>
  <memory>524288</memory>
  <currentMemory>524288</currentMemory>
  <vcpu>1</vcpu>
  <os>
    <type arch='x86_64' machine='pc-0.12'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <clock offset='localtime'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='block' device='disk'>
      <driver name='qemu' type='raw'/>
      <source dev='/dev/vg00/host4_d1'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </disk>
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <source file='/home/rom/iso/virtio-win-0.1-22.iso'/>
      <target dev='hdc' bus='ide'/>
      <readonly/>
      <address type='drive' controller='0' bus='1' unit='0'/>
    </disk>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:e4:2c:68'/>
      <source bridge='brm0'/>
      <model type='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='5904' autoport='no' listen='0.0.0.0' keymap='en-us'/>
    <video>
      <model type='vga' vram='9216' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </memballoon>
  </devices>
</domain>

rom_ka
()

Linux raid1 partitioned и все такое...

Взвесив все «за» и «против» пришел к выводу, что зеркало из целого диска для сервера более предпочтительно(IMHO). Вооружившись VirtualBox и Debian lenny, «воткнув» 4 виртуальных диска, решил поэксперементировать. После некоторых шаманских действый удалось все это завести и даже установить grub (отдельная песня). Создал 2 масива hd_d0 (sda,sdb) - система и потроха, hd_d1 (sdc,sdd) - разделы з даными. Все красиво грузится с разных дисков, зеркалируется, работает, в общем благодать.

screen1

Но иногда, mdadm не может собрать зеркало, вернее он собирает его, но оно какое-то кривое. Если это происходит с md_d0, то соответственно система вываливаеться в initramfs с криками «где мой /».

screen2

Попытка примонтировать его (md_d0p2) вручную тоже заканчиваеться ошибкой (mount: mounting /dev/md_d0p2 on /tmp failed: No such file or directory) но устройство /dev/md_d0p2 присутствует. Строчка md_d0: unknown partition table наводит на мысль что mdadm не может (или не хочет) по каким-то причинам прочитать таблицу разделов и создать правильные md_d0p1, md_d0p2, md_d0p3... Если это происходит с md_d1 то загрузка продолжается, но соответственно разделы c md_d1 не монтируются. Все это происходит рандомно, определить причину что вызывает это поведение mdadm я так и не смог. В основном одна из десяти загрузок сопровождаеться таким поведением mdadm.

Уважаемые Гуру поделитесь мыслями по этому поводу.

Debiab lenny

Linux host1 2.6.26-2-686 #1 SMP Thu Sep 16 19:35:51 UTC 2010 i686 GNU/Linux

mdadm - v2.6.7.2 - 14th November 2008

udevadm version 125

rom_ka
()

RSS подписка на новые темы