LINUX.ORG.RU

Сообщения cs

 

Помогите с поиском книги в электронном виде

Добрый день!

Может быть кто-нибудь может помочь с поиском в электронном виде книги:

Дзюба В.П. Скалярно-векторные методы в теоретической акустике. Владивосток: Дальнаука, 2006. 195 с.

Буду очень признателен.

 

cs
()

Анализ текста: поиск пар слов

Добрый день!

Есть задача находить в тексте пары слов, которые могут находиться друг от друга на некотором расстоянии. Не подскажете эффективные алгоритмы?

 ,

cs
()

Профилирование ядерного модуля

Добрый день!

Есть некоторый ядерный модуль, являющийся целью iptables. При существенной сетевой нагрузке процессы events/N начинают отъедать неслабое процессорное время. Соответственно, проблема видимо кроется в функции, используемой в workqueue. Хочется попытаться понять эту проблему и ее решить. Возникает два вопроса:

1) Как создать локальную сетевую нагрузку, чтобы проблему можно отладить? Возможно, ядерный pktgen + tun/tap интерфейс?

2) Как профилировать код модуля ядра? Вроде как, Oprofile хорошо с этим справляется. Может быть есть что-нибудь более простое и узкоспециализированное?

cs
()

Стиль записи memcpy

Доброе утро!

Есть ли более изящный способ записи подобных конструкций на C (желательно без макроса):

        memcpy(sr->ptr, sb, sizeof(struct shm_header));
        sr->ptr += sizeof(struct shm_header);
        memcpy(sr->ptr, ibp, sizeof(struct shm_prelude));
        sr->ptr += sizeof(struct shm_prelude);
        memcpy(sr->ptr, hbuf, ibp->hlen);
        sr->ptr += ibp->hlen;
        memcpy(sr->ptr, paybuf, ibp->len);
        sr->ptr += ibp->len;
cs
()

Проблема с C/pthreads кодом

Добрый день!

Есть некоторая программа, которая порождает несколько потоков. В какой-то случайный момент времени она начинает есть все процессорное время. Если сделать strace, тогда будет видно следующее:

rt_sigtimedwait([INT ALRM TERM], NULL, NULL, 8^C <unfinished ...> 

Есть ли идеи, что может вызывать такое поведение?

cs
()

архитектура демона

Добрый день!

Есть задача написать некоторый демон, он считывает некоторый конфигурационный файл и, следуя ему, начинает слушать некоторые источники информации и записывать в области общей памяти. Каждому источнику информации соответствует некоторая область памяти. Я думаю сделать так: для каждой такой пары порождать процесс fork-ом, и в каждом подпроцессе создавать область памяти и прослушивать источник. В каждом из потомков может что-то случиться, поэтому было бы хорошо, чтобы главный процесс получал оповещение о смерти потомков и мог его перезапускать. Нормально ли использовать такой подход? Может быть есть примеры в каких-то проектах?

cs
()

Проблема с getprotobynumber(3)

Добрый день!

Имеется некоторая программа, которая достаточно часто вызывает функцию getprotobynumber():

pe = getprotobynumber(proto);

if (dir > 0) {
  fprintf(stdout, "OUT %llu:%llu %u.%u.%u.%u:%u %u.%u.%u.%u:%u %s\n",
          received, sent, src[0], src[1], src[2], src[3], srcport,
          dst[0], dst[1], dst[2], dst[3], dstport, 
          pe?(pe->p_name):"unk");
  } else {
  fprintf(stdout, "IN %llu:%llu %u.%u.%u.%u:%u %u.%u.%u.%u:%u %s\n",
          received, sent, src[0], src[1], src[2], src[3], srcport,
          dst[0], dst[1], dst[2], dst[3], dstport, 
          pe?(pe->p_name):"unk");
} 

В какой-то (очень редкий) момент времени, программа начинает крутиться в бесконечном цикле:

open("/etc/protocols", O_RDONLY|O_CLOEXEC) = 4
fcntl64(4, F_GETFD)                     = 0
fcntl64(4, F_SETFD, FD_CLOEXEC)         = 0
fstat64(4, {st_mode=S_IFREG|0644, st_size=2626, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fbf000
read(4, "# Internet (IP) protocols\n#\n# Upd"..., 4096) = 2626
close(4)                                = 0
munmap(0xb7fbf000, 4096)                = 0
open("/etc/protocols", O_RDONLY|O_CLOEXEC) = 4
fcntl64(4, F_GETFD)                     = 0
fcntl64(4, F_SETFD, FD_CLOEXEC)         = 0
fstat64(4, {st_mode=S_IFREG|0644, st_size=2626, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fbf000
read(4, "# Internet (IP) protocols\n#\n# Upd"..., 4096) = 2626
close(4)                                = 0
....

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

cs
()

IPC

Имеется некоторое приложение, которое получает бинарные данные из некого потока информации (пусть это будет FIFO-файл). Хочется, чтобы несколько других приложений могли обрабатывать эти данные в реальном времени. Для этого реализована схема с двойной буферизацией: в каждый момент времени в одном из буферов находятся все обработчики, а в другой в это время происходит запись. Синхронизация основана на двух семафорах. Проблема состоит в следующем: обработчик информации может захватить семафор и заблокироваться на неопределенный момент времени во время чтения. Из-за этого обработчики сразу же делают memcpy() всего буфера в локальную память и отпускают блокировку. В случае если они задерживаются, то происходит восстановление из архива, требующее I/O. Возможно имеется какая-то известная схема решения этой проблемы?

cs
()

Пример смешанного проекта с autotools

Доброе утро!

Есть проект, содержащий как ядерный модуль (kernel-space код), так и много user-space утилит, и библиотеку. Примерно следующая структура:

dir1/ksrc (kernel module)
dir1/ipt_target (iptables user-space target)
dir1/kernel_to_stdout (pass some info from kernel-space to user-space)
lib/ (несколько статичных библиотек, используемых user-space утилитами)
apps/app1/
apps/app2
..
tools/app1
tools/app2 (некоторые user-space приложения, которые линкуются с библиотеками из lib/)
common/ (общие для user-space и kernel-space хеадеры, которые собираются с помощью awk и Make)

Хочется все это перевести на autotools, а для этого хочется увидеть хороший пример уже сделанного проекта с похожей структурой. Хочется, чтобы ./configure скрипт понимал вещи вроде --without-kernel-module, --without-apps, --without-dirs и не компилировал соответствующие части, а также чтобы можно было задавать некоторые константы общие для всех частей проекта (таких 2 или 3 + пути к сырцам ядра/iptables). Буду очень признателен, если кто-нибудь поможет найти что-то подобное. Вопрос выбора autotools обсуждать не стоит.

cs
()

Ищу средство IPC

Доброе утро!

Есть следующая задача: некоторое приложение принимает из сети информацию, которая должна быть обработана несколькими клиентами. Проще говоря, имеет одного производителя и много потребителей. Каждый пакет должен быть обработан всеми клиентами в "приблизительно" реальном времени. Клиенты -- разнородные процессы на одном хосте. Первое, что приходит в голову -- использовать кольцевой буфер в общей память, а также семафоры для синхронизации. Однако, возможен следующий сценарий: один из клиентов заснет и проспит достаточно долго (мы не удерживаем блокировку долго из соображений эффективности) и проспит весь круг -- нужно иметь способ восстановиться из архива (есть также один клиент, который просто архивирует информацию на диск). Средство IPC, имеющее отношение к диску лучше не предлагать (например, вызов внешнего приложения при ротации архива). Может быть будут какие-либо идеи?

Заранее спасибо.

cs
()

Запретить форвардинг пакетов с определенного интерфейса

Добрый день!

Ситуация следующая: есть интерфейс (предположим, tun0), на который приходят пакеты из совершенно другой сети (просто пересылаются копии пакетов с некоторого граничного маршрутизатора). Нужно запретить этим пакетам после прихода куда-либо перенаправляться, но с одним условием: должен работать механизм connection tracking (/proc/net/ip_conntrack), который должен отслеживать состояние соединений, соответствующих этим пакетам. Есть идея сделать бридж и перебрасывать пакеты в несуществующую сеть, но может быть есть какие-то более простые и/или готовые решения?

>>>

cs
()

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