LINUX.ORG.RU

Сообщения kirichenkoga

 

Настройка сети для раздачи виртуальным машинам ip в разных VLAN

Форум — Admin

Доброго времени суток.

Столкнулся с такой проблемой - необходимо в libvirt сделать 2 виртуальные сети с одним диапазаоном адресов и разными vlan, и в этих сетях назначать ip по DHCP. Для этого поднял openvswitch интерфейс (vbr), к нему подключил сеть libvirt, 2 виртуалкам прописал разные vlan (42 и 44). Как теперь правильно настроить выдачу ip этим машинам?

Я пробовал поднимать отдельный мост (br1) с назначеным ip и слушающим dhcpd на нем, и для каждого vlan создавать veth пару, один конец которой подключать к vswith в tagged порт, другой к мосту с dhcp. Вроде все работает, но мне кажется, что должен быть более простой и правильный путь.

Спасибо.

 , , ,

kirichenkoga
()

iperf3, tcp window scaling

Форум — Admin

Доброго времени суток.

Объясните пожалуста причину странного поведения tcp congestion window при использовании iperf3. Усливия такие: имеется centos хост с kvm, внутри которого крутится гость также с centos (сеть подключена мостом, драйвер virtio). В госте поднят iperf3 как сервер. В хосте установлено ограничение на виртуальный интерефейс с помошью tc:

tc qdisc add dev vnet8 root netem delay 200ms rate 1024mbit
Поднимаю в хосте iperf3-клиент с несколькими потоками и вижу, что после увеличения количества потоков больше чем 2-3 перестает расти TCP Window (cwnd) и растет количество повторов (Retr). То есть, если я использую 2 потока, то для каждого окно достигает размера в 6mb для каждого, а если 4 и больше, то окно не превышает 400kb. В итоге скорость с 5-8 потоками оказывается в несколько раз ниже, чем с 2. Подскажите, в какую сторону копать, чтобы понять причину такого поведения и как это исправить.

 ,

kirichenkoga
()

radeonsi hdmi dmix alsa

Форум — Linux-hardware

Доброго времени суток!

Третий день пытаюсь настроить вывод через hdmi дискретной видеокарты (7750, свободный драйвер)с нескольких источников. Получается странная ситуация - при выводе на устройтсво напрямую с mmap получается чистый звук: aplay -v -D"radeon_hdmi_dev" -M Downloads/Roland-GR-1-Breathy-Pad-C4.wav Если убрать mmap (опцию -M, режим RW_INTERLEAVED) то звук с треском и повторами и заиканиями. При выводе через dmix звук тоже испорченный. При этом через интегрированную звуковую звук через dmix чистый. Вот конфиг /etc/asound.conf pcm.!default plug:both

ctl.!default { type hw card ALC889 }

pcm.both { type route; slave.pcm { type multi; slaves.a.pcm "ALC889"; slaves.b.pcm "radeon_hdmi"; slaves.a.channels 2; slaves.b.channels 2; bindings.0.slave a; bindings.0.channel 0; bindings.1.slave a; bindings.1.channel 1;

bindings.2.slave b; bindings.2.channel 0; bindings.3.slave b; bindings.3.channel 1; }

ttable.0.0 1; ttable.1.1 1;

ttable.0.2 1; ttable.1.3 1; }

ctl.both { type hw; card SB; }

pcm.radeon_hdmi_dev { type hw card 1 device 3 }

pcm.radeon_hdmi { type dmix ipc_key 14096 ipc_key_add_uid false ipc_perm 0666 slave { pcm "hw:1,3" period_time 0 period_size 2048 # buffer_size 8192 buffer_size 32768 # buffer_time 0 # periods 128 # rate 44100 # channels 2 } bindings { 0 0 1 1 } }

pcm.ALC889 { # type dmix ipc_key 2048 ipc_key_add_uid false ipc_perm 0666 slave { pcm "hw:0" period_time 0 period_size 2048 # buffer_size 8192 buffer_size 65536 buffer_time 0 periods 128 rate 48000 channels 2 } bindings { 0 0 1 1 } }

ctl.radeon_hdmi { type hw card 1 }

ctl.ALC889 { type hw card "SB" }

Вывод aplay -l

**** List of PLAYBACK Hardware Devices **** card 0: SB [HDA ATI SB], device 0: ALC889 Analog [ALC889 Analog] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: SB [HDA ATI SB], device 3: ALC889 Digital [ALC889 Digital] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: HDMI [HDA ATI HDMI], device 3: HDMI 0 [HDMI 0] Subdevices: 1/1 Subdevice #0: subdevice #0 aplay -L null Discard all samples (playback) or generate zero samples (capture) sysdefault:CARD=SB HDA ATI SB, ALC889 Analog Default Audio Device front:CARD=SB,DEV=0 HDA ATI SB, ALC889 Analog Front speakers surround21:CARD=SB,DEV=0 HDA ATI SB, ALC889 Analog 2.1 Surround output to Front and Subwoofer speakers surround40:CARD=SB,DEV=0 HDA ATI SB, ALC889 Analog 4.0 Surround output to Front and Rear speakers surround41:CARD=SB,DEV=0 HDA ATI SB, ALC889 Analog 4.1 Surround output to Front, Rear and Subwoofer speakers surround50:CARD=SB,DEV=0 HDA ATI SB, ALC889 Analog 5.0 Surround output to Front, Center and Rear speakers surround51:CARD=SB,DEV=0 HDA ATI SB, ALC889 Analog 5.1 Surround output to Front, Center, Rear and Subwoofer speakers surround71:CARD=SB,DEV=0 HDA ATI SB, ALC889 Analog 7.1 Surround output to Front, Center, Side, Rear and Woofer speakers hdmi:CARD=SB,DEV=0 HDA ATI SB, ALC889 Digital HDMI Audio Output hdmi:CARD=HDMI,DEV=0 HDA ATI HDMI, HDMI 0 HDMI Audio Output Пробовал разные настройки buffer_size, period_size (в том числе скопированные с параметров вывода чистого звука aplay -v) но ситуация не улучшилась. Пробовал на ядрах 3.17, 3.18. Система gentoo amd64, alsa из ядра, alsa-plugins версия 1.0.28 Есть подозрение, что dmix неправильно выводит звук. Подскажите, это только у меня и куда надо копать.

 , , ,

kirichenkoga
()

emrege, сравнение версий

Форум — General

Доброго времени суток. При попытке установить samba4 увидел странное: sys-libs/ntdb блокирует версии samba меньше чем 4.1.7, при этом версия самой самбы 4.1.14 и это является проблемой для emerge. Правильно ли я понимаю, что emerge сравнивает версии как строки (то есть 4.1.7 > 4.1.14)? Как правильно разруливать такие ситуации? Спасибо.

 , ,

kirichenkoga
()

Kernel, ожидания, вытеснение, LDD

Форум — Development

Всем доброго времени суток!

Во время прочтения Linux Device Drivers (глава 6, «засыпания» при блокирующем вводе выводе) возникло небольшое непонимание. Приведен код, целью которого является помещение процесса в состояние сна до наступления определенного события (невыполнение условия сна):

while (spacefree(dev) == 0)
{
...
  prepare_to_wait(&dev->outq, &wait, TASK_INTERRUPTIBLE);
  if (spacefree(dev) == 0)
    schedule( );
  finish_wait(&dev->outq, &wait); 
...
}
Аналогичный код был найден в исходниках ядра (например, inet_connection_sock.c:inet_csk_wait_for_connect()). Но у меня возникает подозрение, что данный код не будет работать правильно в ядрах с вытеснением. Допустим, работа произошла по следующему сценарию: При входе в цикл условие истино - цикл начинается. После этого в другом потоке выколнения условие изменяется, пробуждаются все процессы, находящиеся в очереди outq (нашего там еще нет). Затем первый поток выполняет метод prepare_to_wait - процесс помещается в очередь, а его состояние - TASK_INTERRUPTIBLE, но процесс все еще на процессоре и, по идее, проверив условие засыпания должен пропустить вызов shedule и перейти в состояние TASK_RUNNING в методе finish_wait. Однако, до вызова finish_wait он может быть вытеснен другим процессом или прерыванием и отправиться в спячку непредсказуемой длительности при ложном значении условиия сна. Подскажите, правильно ли я понимаю эту ситуацию, и если нет, то куда копать для ее понимания.

Спасибо.

 

kirichenkoga
()

signal не прерывает ожидание flock

Форум — Development

Доброго времени суток! Поясните, должно ли ожидание эксклюзивной блокировки flock на файле, уже заблокированном другим процессом, прерываться по сигналу? Если исходить из manа, то одна из возможных ошибок при выполнении метода - EINTR. С другой стороны, эксперимент показывает обратное - ожидание не прерывается, хотя сигнал до процесса доходит - обработчик сигнала вызывается (пробовал SIGINT, SIGTERM). С методом lockf - ситуация такая-же. Каким образом можно добиться требуемого поведения? Спасибо.

kirichenkoga
()

объеденить i386 и x86_64

Форум — Development

Доброго времени суток!

Изучаю туториал по разработке ядра (был недавно в новостях), возник такой вопрос: загрузчик выполняет 32-битный код (по моему так) после чего передает управление в ядро. Значит начальный код ядра должен быть 32-битным. Затем ядро осуществляет переход в long mode (64 бит), становятся доступны адресация и команды 64 битного режима. Получаем что в одном файле ядра мы должны иметь и 32-битный и 64-битный код, но ld-ругается при линковке при попытке сотворить такое.

Чую, что я где-то неправильно себе представляю процесс загрузки 64-битных ядер, объясните в двух словах, как это должно происходить?

У меня есть только предположение, что код инициализации такого ядра и перевод в long mode тоже должен быть 64-битным ([BITS 64] в nasm), но до этого перехода использовать 32-битные команды (с регистрами eax, ebx и т.п. а не rax и rbx)

Спасибо!

kirichenkoga
()

Latex, itemize, отступ сверху и снизу от всего списка

Форум — General

Доброго времени суток!
Возможно нубский вопрос, но все-же. Делаю диссер в латеке и вот столкнулся с такой неприятной штукой:

Переопределил itemize:
\makeatletter
\let\old@itemize=\itemize
\def\itemize{\old@itemize
\setlength{\itemsep}{0pt}
\setlength{\parskip}{0pt}
\setlength{\topmargin}{0pt}
\setlength{\leftskip}{-1em}
\setlength{\topsep}{0pt}
\setlength{\partopsep}{0pt}
\setlength{\parsep}{0pt}
}
\makeatother

Но никак не могу сделать так, чтобы между абзацем и первым элементом списка, а также между последним элементом и следующим абзацем, был бы «нормальный» отступ (как между обычными абзацами):
бла-бла-бла
(большой интервал)
--первый элемент
--
(большой интервал)
бла-бла-бла

Посмотрел доку, где есть схема itemize, написано что верхний отступ складывается из \parskip + \topsep + \partopsep. Выставляю все в 0, но все равно большой промежуток остайтся. пробовал делать это для конкретного списка - то же самое, и для не переопределённого списка.

Как мне поправить это дело? Спасибо!

kirichenkoga
()

Регрессия в kernel

Форум — Development

Доброго времени суток!

И снова я, и снова с ядром. Нашел регрессию (или что это такое) между 37-rc6 и 37-rc7: в arch/x86/kernel/hpet.c были сделаны следующие изменения: стали использоваться такие значения

#define HPET_MIN_CYCLES 128

#define HPET_MIN_PROG_DELTA (HPET_MIN_CYCLES + (HPET_MIN_CYCLES >> 1))

вместо 8 и 5000 соответственно. В результате на GA MA780G-UD3H (больше ни на чем попробовать не смог) в самом начале загрузки ядра система замирает на какое-то время (из замирания можно вывести передергиванием USB). Простановка в дефайны старых значений это зависание убирает (пробовал на 37-rc7) и на 3.0.

Теперь буду внимательно искать и курить документацию на HPET и думать над нормальными значениями, может кто-нибудь подсказать, куда смотреть?

И второе, если получится установить, что-же там должно быть, что делать дальше - писать в список рассылки lkml или куда-то еще?

Спасибо!

kirichenkoga
()

Помогите разобраться с git

Форум — Development

Доброго времени суток!

Первый раз работаю с git-ом и не могу понять кое что. Смотрю сейчас исходники ядра на git-хабе, историю коммитов в tag-е 2.6.37-rc7 (https://github.com/torvalds/linux/commits/v2.6.37-rc7). Не могу понять логику commit-ов, которые merge.

Почему при попытке посмотреть исходники я вижу какое-то не такое содержание файлов? Например, в commit-е v2.6.37-rc6 в Makefile было прописано обновление EXTRAVERSION=rc6 с EXTRAVERSION=rc5, в commit-е v2.6.37-rc7 там же обновлено EXTRAVERSION=rc7 вместо EXTRAVERSION=rc6. Но если я смотрю исходник какого-либо commit-а (например https://github.com/torvalds/linux/tree/050c6c9b896625d9fa498265be17b82c5fc65257) между ними или делаю checkout на локальном репозитории, то вижу rc6, rc5, rc1 и тому подобное, хотя если посмотреть лог изменений этого файла, то подобных изменений в нем между этими commit-ами не было. То же самое происходит и с другими файлами.

Это так и должно быть? Как загрузить состояние нужной ветки, чтобы увидеть то, что храниться именно в ней? Например, чтобы в Makefile было EXTRAVERSION=rc6 при загрузке любой ревизии между v2.6.37-rc6 и v2.6.37-rc7

Спасибо

kirichenkoga
()

openldap, oracle

Форум — Admin

Задача усложнилась, надо подружить openldap и oracle. С постгресом все работает, а с ораклом выдает странную ошибку - SQL_NO_DATA (видно из файла трассировки unixODBC). В качестве драйвера ODBC используется стандартный libsqora.so.11.1.

Странно, что если в конфиге убрать из запроса параметр, то он отрабатывает (при этом openldap работает не правильно) Текст запроса: «SELECT name,sel_expr,from_tbls,join_where,add_proc,delete_proc,param_order,expect_return,sel_expr_u FROM ldap_attr_mappings where oc_map_id=?»

вот фрагмент трейса ODBC:

[ODBC][22466][1316178040.696639][SQLBindParameter.c][393] Exit:[SQL_SUCCESS]

[ODBC][22466][1316178040.696706][SQLExecute.c][183] Entry: Statement = 0x1bcc000

[ODBC][22466][1316178040.696747][SQLExecute.c][344] Exit:[SQL_ERROR]

[ODBC][22466][1316178040.696826][SQLError.c][348] Entry: Statement = 0x1bcc000 SQLState = 0x7ffff6854b10 Native = 0x7ffff6854b18 Message Text = 0x7ffff6854910 Buffer Length = 511 Text Len Ptr = 0x7ffff6854b1e

[ODBC][22466][1316178040.696846][SQLError.c][385] Exit:[SQL_NO_DATA]

В документации сказано, что ошибка SQL_NO_DATA выдается только на update или delete, но никак не на select.

Куда копать? Это ошибка драйвера? Есть ли альтернативные версии ODBC-драйвера для Oracle?

Спасибо!

kirichenkoga
()

openLdap, Potgresql, ldif

Форум — Admin

Доброго времени суток!

Может я плохо искал, или голова уже не работает, но подскажите следующее:

Необходимо подружить openldap с Postgresql в качестве бэкэнда. При конфигурировании с помощью файла slapd.conf указываются параметры dbName, dbUser и dbPasswd для odbc подключения. Но, с другой стороны, сейчас используется (и вроде как рекомендуется) динамическая конфигурация с использованием ldif-файлов.

Моя проблема заключается в том, что никак не могу найти где и под какими именами в соответствующем файле «olcDatabase={1}sql.ldif» указываются параметры ODBC-подключения. Все примеры конфигурации найденые в интернете используют старый формат slapd.conf, курение манов тоже ничего не дало (либо для старого формата, либо для hdb/bdb где этих параметров нет). Конвертация из старого формата в новый утилитой openldap-а этих параметров не выводит, но должны же они как-то передаваться.

Без этих параметров сервис не стартует с ошибкой подключения к БД.

Спасибо!

kirichenkoga
()

Зависание ядра

Форум — Linux-hardware

Доброго времени суток!

Возникает довольно странная ситуация - при загрузке ядро зависает на 5 минут, после чего пордолжает работать без видимых проблем. Причем, такое происходит не всегда, но очень часто.

система Debian 64, ядро 3.0.1 ванильное (с 3.0.0.1 из репов аналогичная ситуация, с 2,6,32 - все нормально). GA-MA780G-UD3G, Athlon2x2
выдкржка и dmesg:

[ 2.017211] usbcore: registered new interface driver usbhid
[ 2.017212] usbhid: USB HID core driver
[ 2.084429] EXT4-fs (sda1): mounted filesystem with ordered data mode. Opts: (null)
[ 2.132149] INFO: rcu_sched_state detected stalls on CPUs/tasks: { 0} (detected by 1, t=74992 jiffies)
[ 2.132149] sending NMI to all CPUs:
[ 2.132139] NMI backtrace for cpu 0
[ 2.132139] CPU 0
[ 2.132139] Modules linked in: usbhid hid ext4 mbcache jbd2 crc16 sg sd_mod crc_t10dif ata_generic pata_atiixp ohci_hcd ahci libahci libata r8169 mii ehci_hcd scsi_mod usbcore [last unloaded: scsi_wait_scan]
[ 2.132139]
[ 2.132139] Pid: 0, comm: swapper Not tainted 3.0.1 #1 Gigabyte Technology Co., Ltd. GA-MA780G-UD3H/GA-MA780G-UD3H
[ 2.132139] RIP: 0010:[<ffffffff8131f311>] [<ffffffff8131f311>] _raw_spin_lock_irqsave+0x1e/0x25
[ 2.132139] RSP: 0018:ffffffff81601e08 EFLAGS: 00000097
[ 2.132139] RAX: 0000000000000002 RBX: ffffffff8177b8a0 RCX: 000000000000114b
[ 2.132139] RDX: 000000000000114c RSI: 0000000000000005 RDI: ffffffff8177b8a0
[ 2.132139] RBP: ffff88012fc0dd40 R08: 0000000000000000 R09: 0000000000000000
[ 2.132139] R10: 0000000000000046 R11: 0000000000000100 R12: 0000000000000000
[ 2.132139] R13: ffffffff81611340 R14: 0000000000000005 R15: 0000000000000000
[ 2.132139] FS: 00007f8ebc2f07a0(0000) GS:ffff88012fc00000(0000) knlGS:0000000000000000
[ 2.132139] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[ 2.132139] CR2: 00007f8ebb9d3d90 CR3: 0000000125c75000 CR4: 00000000000006f0
[ 2.132139] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[ 2.132139] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
[ 2.132139] Process swapper (pid: 0, threadinfo ffffffff81600000, task ffffffff8160b020)
[ 2.132139] Stack:
[ 2.132139] ffffffff81601f14 ffffffff810682c0 ffffffff81601f14 0000000000000001
[ 2.132139] 00000000ffffffff 0000000000000000 000000000008c800 ffffffff81067c69
[ 2.132139] ffffffff8160b3d8 00ff88012fc12840 ffffffff8160b020 ffffffff81601f14
[ 2.132139] Call Trace:
[ 2.132139] [<ffffffff810682c0>] ? tick_broadcast_oneshot_control+0x54/0x102
[ 2.132139] [<ffffffff81067c69>] ? tick_notify+0x210/0x367
[ 2.132139] [<ffffffff81322339>] ? notifier_call_chain+0x2e/0x5b
[ 2.132139] [<ffffffff810673eb>] ? clockevents_notify+0x2f/0x13b
[ 2.132139] [<ffffffff8100ef24>] ? amd_e400_idle+0xd3/0xe4
[ 2.132139] [<ffffffff81008251>] ? cpu_idle+0x9d/0xd7
[ 2.132139] [<ffffffff8169fb3b>] ? start_kernel+0x3bd/0x3c8
[ 2.132139] [<ffffffff8169f140>] ? early_idt_handlers+0x140/0x140
[ 2.132139] [<ffffffff8169f3c4>] ? x86_64_start_kernel+0x104/0x111
[ 2.132139] Code: c0 0f 95 c0 0f b6 c0 c3 e9 0f e4 d4 ff 53 48 89 fb e8 d4 e3 d4 ff ba 00 00 01 00 f0 0f c1 13 0f b7 ca c1 ea 10 39 d1 74 07 f3 90 <0f> b7 0b eb f5 5b c3 51 48 89 3c 24 e8 a6 e3 d4 ff 48 8b 3c 24
[ 2.132139] Call Trace:
[ 2.132139] [<ffffffff810682c0>] ? tick_broadcast_oneshot_control+0x54/0x102
[ 2.132139] [<ffffffff81067c69>] ? tick_notify+0x210/0x367
[ 2.132139] [<ffffffff81322339>] ? notifier_call_chain+0x2e/0x5b
[ 2.132139] [<ffffffff810673eb>] ? clockevents_notify+0x2f/0x13b
[ 2.132139] [<ffffffff8100ef24>] ? amd_e400_idle+0xd3/0xe4
[ 2.132139] [<ffffffff81008251>] ? cpu_idle+0x9d/0xd7
[ 2.132139] [<ffffffff8169fb3b>] ? start_kernel+0x3bd/0x3c8
[ 2.132139] [<ffffffff8169f140>] ? early_idt_handlers+0x140/0x140
[ 2.132139] [<ffffffff8169f3c4>] ? x86_64_start_kernel+0x104/0x111
[ 2.132149] NMI backtrace for cpu 1
[ 2.132149] CPU 1
[ 2.132149] Modules linked in: usbhid hid ext4 mbcache jbd2 crc16 sg sd_mod crc_t10dif ata_generic pata_atiixp ohci_hcd ahci libahci libata r8169 mii ehci_hcd scsi_mod usbcore [last unloaded: scsi_wait_scan]

kirichenkoga
()

Странное зависание при загрузке

Форум — General

Доброго времени суток.

Начиная с версии ядра 38 ловлю странный глюк - сразу после начала загрузки система зависает на время до 100(примерно) секунд, время все время разное.

Странно следующее - если вытащить и вставить ethernet кабель в on-board сетевой то загрузка тут же продолжается. Можно выдернуть и вставить usb (клавиатура или мышь) - иногда помогает одно устройство, иногда надо передернуть оба (в этом случае после передергивания одного устройства загрузка продолжается, но потом опять зависает - ощушение что проснулось только одно ядро ЦПУ)

Если дергать usb или просто ждать, то выводится ошибка о SP5100 TCO (память уже используется)

В загруженной системе все работает нормально.

Подскажите, куда копать. Спасибо!

Система 3.0.0-1-amd64, Debian unstable

lspi:

00:00.0 Host bridge: Advanced Micro Devices [AMD] RS780 Host Bridge

00:02.0 PCI bridge: Advanced Micro Devices [AMD] RS780 PCI to PCI bridge (ext gfx port 0)

00:0a.0 PCI bridge: Advanced Micro Devices [AMD] RS780/RS880 PCI to PCI bridge (PCIE port 5)

00:11.0 SATA controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode]

00:12.0 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI0 Controller

00:12.1 USB Controller: ATI Technologies Inc SB7x0 USB OHCI1 Controller

00:12.2 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB EHCI Controller

00:13.0 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI0 Controller

00:13.1 USB Controller: ATI Technologies Inc SB7x0 USB OHCI1 Controller

00:13.2 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB EHCI Controller

00:14.0 SMBus: ATI Technologies Inc SBx00 SMBus Controller (rev 3a)

00:14.1 IDE interface: ATI Technologies Inc SB7x0/SB8x0/SB9x0 IDE Controller

00:14.2 Audio device: ATI Technologies Inc SBx00 Azalia (Intel HDA)

00:14.3 ISA bridge: ATI Technologies Inc SB7x0/SB8x0/SB9x0 LPC host controller

00:14.4 PCI bridge: ATI Technologies Inc SBx00 PCI to PCI Bridge

00:14.5 USB Controller: ATI Technologies Inc SB7x0/SB8x0/SB9x0 USB OHCI2 Controller

00:18.0 Host bridge: Advanced Micro Devices [AMD] Family 10h Processor HyperTransport Configuration

00:18.1 Host bridge: Advanced Micro Devices [AMD] Family 10h Processor Address Map

00:18.2 Host bridge: Advanced Micro Devices [AMD] Family 10h Processor DRAM Controller

00:18.3 Host bridge: Advanced Micro Devices [AMD] Family 10h Processor Miscellaneous Control

00:18.4 Host bridge: Advanced Micro Devices [AMD] Family 10h Processor Link Control

01:00.0 VGA compatible controller: ATI Technologies Inc RV730 PRO [Radeon HD 4650]

01:00.1 Audio device: ATI Technologies Inc RV710/730

02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 02)

03:0e.0 FireWire (IEEE 1394): Texas Instruments TSB43AB23 IEEE-1394a-2000 Controller (PHY/Link)

kirichenkoga
()

pthread_mutex дождаться освобождения без захвата мьютекса

Форум — Development

Доброго времени суток!

Подскажите, возможно ли заставить поток ожидать освобождения мьютекса без его захвата? Если использовать pthread_mutex_lock то после освобождения мьютекса ожидающий поток захватит его, а этого надо избежать по следующей причине - мьютекс может быть после освобождения уничтожен тем потоком, который захватил его раньше.

Другими словами мне нужно разрешить следующую ситуацию:

Поток 1 - поиск объекта и захват мьютекса (успешный) - trylock

Поток 2 - поиск объекта и попытка захвата (не успешная) - trylock, ожидаем освобождения мьютекса - lock.

Поток 1 - удаление объекта из списка, освобождение мьютекса, уничтожение объекта и мьютекса

Поток 2 - продолжение работы, освобождение УНИЧТОЖЕННОГО мьютекса и повторный рекурсивный поиск объекта (он не будет найден - это нормальная ситуация)

Таким образом, происходит уничтожение в первом потоке мьютекса, блокиремого вторым, что очевидно ненормально. В качестве выхода вижу вариант ожидания освобождения мьютекса без его захвата, но не знаю, есть ли такая возможность (C++, Linux, POSIX). В качестве некрасивого варианта вижу цикл с trylock и sleep.

Спасибо!

kirichenkoga
()

sleep и SIGCHLD

Форум — Development

Доброго времени суток!

Возникла проблема, никак не могу понять, как ее решить.

Почему nanosleep прерывается по сигналу SIGCHLD только в случае если явно повесить обработчик.

Пробовал делать SIG_UNBLOCK и назначение SIG_DFL для SIGCHLD, но без явно проставленного обработчика nanosleep (sleep и usleep тоже) не прерывается. Самое странное, что обработчик может быть пустым (то есть не попрождать SIGALRM и вообще ничего не делать).

Можно ли разрешить обработку в nanosleep сигнала без явного определения его обработчика?

Как я думаю, надо курить в сторону sigmask или еще чего-то в этом же духе?

Debian Linux unstable, x86_64

Спасибо

kirichenkoga
()

Безопасно выполнить скрипт

Форум — Development

Доброго времени суток!

Хочу спросить совета. Есть приложение (C++), которое получает из БД скрипт и должно его выполнить (например запустить какой-либо внешний обработчик). Выполняться может как некоторый скрипт, переданный непосредственно в команде, так и стороннее приложение. Естественно, есть опасения, что в этом скрипте могут оказаться «нехорошие» команды.

Какие разумные механизмы безопасности можно применить в этом случае? Из вариантов я вижу следующие - 1. запуск жестко заданного списка программ (минус - будет работать только для сторонних приложений, но не для скриптов. Если разрешить запуск bash, то получится решето) 2. настройка AppArmor или SELinux (минус - имею только общее представление о них) 3. запуск этих скриптов из собственных «песочниц» или chroot-ов

Спасибо!

kirichenkoga
()

Сделать remap_pfn_range без mmap?

Форум — Development

Доброго времени суток!

Подскажите пожалуйста, можно ли сделать следующее: Есть некоторое устройство и к нему драйвер (модуль ядра). В модуле имеется диспетчер памяти устройства (выделить окно, освободить, дать ID и т.п.).

Необходимо сделать следующее - отобразить такое окно в UserSpace. Можно и спользовать mmap, но тут есть следующее НО: программа в UserSpace должна знать адрес начала региона физической памяти, и теоритически может получить доступ к любой области памяти устройства.

Хотелось бы, чтобы обращение к региону физической памяти проходило по его идентификатору (имени). Другими словами в UserSpace должны происходить, например, следующие вызовы: 1. ObjId = AllocateObj(Size); 2. MapObj(ObjId, Addr); (или Addr = MapObj(ObjId);) 3. memcpy(Addr,...);

По идее должна подойти функция remap_pfn_range, но у меня следующая проблема - как в этом случае правильно определить структуру vm_area_struct.

Возможно ли это, или настолько неудобно, что проще забить и использовать все-таки mmap?

Спасибо!

kirichenkoga
()

Память, device -> User, do_mmap,

Форум — Development

Доброго времени суток!

Допустим есть некоторое PCI-устройство с памятью (видеокарта), и необходимо дать приложению из User-Space записать что-то в память этого устройства.

Если я правильно понял, то адресное пространство устройства в таком случае отображается на реальное адресное пространство ЦП. Диапазон адресов такого отображение можно увидеть с помощью /proc/iomem. Как я понимаю, отбражение выполняется системой (мб. железом или самим ядром) без участия драйвера непосредственно устройства, это так?

Далее по запросу соответствующий модуль должен сделать отображение из диапазона адресов устройства в виртуальное адресное пространство приложения User-Space, и делается это функцией do_mmap. Как правильно её вызвать и отранслировать адреса?

Правилен ли такой вызов: do_mmap(NULL, <адрес>, <размер>, <флаги защиты>, <флаги памяти>, <смещение>).

В этом вызове я не до конца понял, что имено означают пара значений <адрес> и <смещение>, и какой адрес вернет сама функция - в пространстве ядра или в пространстве вызвавщего процесса?

Как должен выглядеть вызов функции когда надо получить 10-ый мегабайт из устройства, если результат lspci: Memory at c0000000 (64-bit, prefetchable) [size=256M]

Или может я не в ту сторону смотрю и необходимо использовать remap_pfn_range?

Спасибо!

kirichenkoga
()

Kernel Module, ioctl, синхронизация

Форум — Development

Доброго времени суток!

Думаю над следующим вопросом: Есть модуль ядра, в котором определена некоторая структура данных, с которой надо обеспечить синхронную работу.

Возможна ли ситуация, когда два (или более) User-Space процесса «одновременно» вызовут ioctl (запись-запись или чтение-запись) и произойдет нарушение работы со структурой данных в модуле?

Если я правильно понимаю, в этом случае необходимо в соответствующих методах использовать мьютексы? Операции модификации достаточно малы, будет ли в этом случае spinlock эффективней?

Спасибо!

kirichenkoga
()

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