LINUX.ORG.RU

Сообщения vromanov

 

На чем сделать кластер?

Форум — Admin

Есть приложение, состоит из нескольких частей. работает по TCP/IP (Diameter), также есть HTTP (nginx). Фактически это прокси,который работает по HTTP и Diameter. Из важной информации внутри приложения - таблица роутинга сессий. Она хранится в shared memory.

Что бы хотелось, чтобы при падении приложения на одном из узлов нагрузка переносилась на второй. Оптимально будет сделать это при помощи IP alias, который назначается либо на один либо на второй сервер. Данные на начальном этапе можно просто периодически копировать с мастера на слейв. Это приемлимо, т.к. потеря этой информации не критична. В качестве платформы используется RHEL 5.x. Вопрос - на чем лучше сделать такую систему?

vromanov
()

Какой либой лучше паковать логи?

Форум — Development

Чем паковать логи? Имеем процесс который пишет логи в огромных объемах. Например, 200k строк в секунду. Сейчас они пишутся в очередь в SHM, а оттуда отельный процес пишет в запакованные файлики. Пакуем при помощи zlib. В общем, более-менее ничего, но сейчас упаковка логов занимает больше ЦПУ, чем работа приложения. Может есть другие алгоритмы упаковки, более заточенные на логи?

Пример лога:

13-12-18 23:45:13.217 pcrf_core_W0[13200] NOTI ##> GxCCR-U e2e:04827D0A f:sohugw02_02.gx.yota.ru n:264 sess:sohugw02_02.gx.yota.ru;773840480;195710;91396 ?sub:250110100657234 ?ip:[10.191.187.234] ev:EVENT_USAGE_REPORT mk:777:o:2537 ?loc:25011386A101
13-12-18 23:45:13.217 pcrf_core_W2[13203] NOTI ##> GxCCR-U e2e:04827D0B f:sohugw02_02.gx.yota.ru n:2651 sess:sohugw02_02.gx.yota.ru;729280576;195454;87245 ?sub:250110100115939 ?ip:[10.191.95.99] ev:EVENT_USAGE_REPORT mk:777:o:0 ?loc:250113879101
13-12-18 23:45:13.217 pcrf_core_W3[13206] NOTI ##> GxCCR-U e2e:0482BFB0 f:sohugw02_02.gx.yota.ru n:3492 sess:sohugw02_02.gx.yota.ru;577081332;193630;100343 ?sub:250110100201883 ?ip:[10.191.145.30] ev:EVENT_USAGE_REPORT mk:777:o:0 ?loc:250113866F05
13-12-18 23:45:13.217 pcrf_core_W1[13202] NOTI ##> GxCCR-U e2e:04827D0C f:sohugw02_02.gx.yota.ru n:6643 sess:sohugw02_02.gx.yota.ru;648271027;195358;86213 ?sub:250110100304677 ?ip:[10.191.177.113] ev:EVENT_USAGE_REPORT mk:777:o:0 ?loc:25011386DC00
13-12-18 23:45:13.217 pcrf_core_W4[13208] NOTI ##> GxCCR-U e2e:A9818A28 f:sohugw02_02.gx.yota.ru n:791 sess:sohugw02_02.gx.yota.ru;767759213;191613;38853 ?sub:250110100129205 ?ip:[10.191.166.253] ev:EVENT_USAGE_REPORT mk:777:o:0 ?loc:250113878404

vromanov
()

Призываются мастера препроцессора С

Форум — Development

У нас есть код типа

#define FUNC_BEGIN(name) \
    static some_struct_t s_##name; \
    static void init_##name() { \
        s_##name.init_func=init_##name; \
        int index=0;
#define FUNC_END() }
#define ADD_INT32(name) \
    s_##name.list[index].type=type_int32; \
    s_##name.list[index].ptr=&name;
#define ADD_STR(name) \
    s_##name.list[index].type=type_str; \
    s_##name.list[index].ptr=name;
// тут дальше много разных типов

static int32_t var1;
static char var2[100];

FUNC_BEGIN(f1)
    ADD_INT32(var1);
    ADD_STR(var2);
FUNC_END
// И таких функций в программе штук 300.
Тут много отрезано.. Что нужно? Нужно сделать функцию которая будет занулять все переменные указанные такими макросами. Сейчас в структуре есть массив, в который заносятся указатели и типы переменных. Чем не нравится - массив фиксированного размера, в каждом воркере создается свой экземпляр. Есть идея переместить его в статические пременные, в которых есть указатель на предидущую переменную. Чтобы получился код типа такого:
typedef struct {
  void* ptr;
  int16_t type;
  const var_rec_t* prev;
} var_rec_t;
static var_rec_t init_var1={&var1, type_int32, NULL};
static var_rec_t init_var2={var2, type_str, &init_var1};
Вот как бы такое сделать макросами? Проблему у меня вызывает указатель на предидущую перменную.

 ,

vromanov
()

Хочу добавить SNMP в приложение. Есть альтернативы agentx?

Форум — Development

Хочу в С/C++ приложение прикрутить мониторинг по SNMP (приложение будет сервером). Было бы неплохо, если бы это работало без интеграции с net-snmp. Т.е. приложение просто слушает на каком-то порту. Есть что годное для этого? Ну и с нормальной лицензией

 , , ,

vromanov
()

Придется обновлять федору

Форум — Talks

Что-то совсем перестали выходить обновления к 17-й федоре. Попробуем обновить на 20-ку с KDE.

vromanov
()

Как узнать моментальную скорость CPU на RHEL5

Форум — Admin

имеется вот такая машинка model name : Intel(R) Core(TM) i7 CPU K 875 @ 2.93GHz stepping : 5 На ней гонеятся тест. Все более мнее ничего, но в какой-то ммоент вдруг резко падет загрузка CPU, но при этом все остально продолжает рабоат нормально, производительность не падает. Есть подозрение, что это так работает управление питанием и температурой.. Какие есть тулы, которые смогут работать под стареньким RHEL5?

 , ,

vromanov
()

Быстро преобразовтаь int64 в строчку на С

Форум — Development

Как быстро прeобразовать число в строчку (char a[100]). Интересует и 10-тичный и 16-тиричный вариант. Хотелось бы реально быстро, хорошо чтобы она еще длинну строки возвращала. А то у меня сейчас в одной програмке vsnprintf 15% цпу выжирает.

 , , ,

vromanov
()

макрос для имени файла без пути

Форум — Development
#define STRINGIFY(x) #x
#define TOSTRING(x) STRINGIFY(x)
#define AT __FILE__ ":" TOSTRING(__LINE__)

Не нравится, что имя файла содержит полный путь. Можно средставами препроцессора получить только имя файла без пути?

 , , ,

vromanov
()

Русский vs English интерфейс

Форум — Talks

Замечаю, что неня коробит русский интерфейс на скриншотах. А у вас нет такого ощущения? Аналогично у меня жена пользуется только английским интерфейсом везде включая телефон

vromanov
()

USB WiFi Stick based on Realtek RTL8192CU

Форум — Linux-hardware

Добрый день! Кто занет какие стики имеющиеся у нас в продаже базируются на этом чипе? Realtek RTL8192CU

 ,

vromanov
()

tail -f с лимитом по времени

Форум — Admin

Есть ли аналог утилиты tail -f c ограничением по времени работы? Т.е. что-то вроде

tail -f --time=10 some_log_file.log
Он печатает новые строчки лога в течении 10 секунд, потом выходит.

 , ,

vromanov
()

Лучше бы перевели что-то другое

Форум — Development

Логарифм — это операция, которая при применении её к числу делает его гораздо меньше (подобно взятию квадратного корня). Итак, первая вещь, которую вы должны запомнить: логарифм возвращает число, меньшее, чем оригинал. http://habrahabr.ru/post/195996/

 , , ,

vromanov
()

Хочется понять говно ли эрланг

Форум — Development

Эрланг, как утвердается очень крут для телекома. А в телекоме активно используется протокол DIAMETER. В эрланге есть его поддержка даже http://www.erlang.org/doc/man/diameter.html

Меня удивило, что эриксон сделал свою софтину, которая активно использует диаметр на С++ и жава, а не на родном эралнге. И есть пдозрение, что реализвация диаметра в эранге полное говно. Меня бы разубедили бы бенчмарки, но их не найти. Может кто-то понимающий в эрланге помог бы? Сбацали бы тест, сравнили ли бы с реализацией на С/C++? С меня реализация на С++ и тула для создания нагрузки (seagull)

Перемещено mono из talks

 , ,

vromanov
()

Java - эпик фэйл

Форум — Talks

Когда началась Java широко рекламировась идея кросплатформености. В результате идея была просрана на 200%. И кросплатформености не получилось, а случилось еще хуже.. теперь еще куча приложений имеет в дистрибутиве jre. Примеры - Clear Case, SoapUI итд. Или вот пример - идем на сайт самого оракла, загрузка SQL Developer и смотрим «Windows 32-bit - zip file includes the JDK1.6.0_35». Это просто авпофиоз кроссплатформености! Видать с другими версиями JDK он не будет работать.

Перемещено beastie из development

vromanov
()

Cubieboard2 - хочу использовать медиацентр. Что лучше?

Форум — Talks

Едет по почте cubieboard2. Хочу дома прикрутить к телевизу для просмотра фильмов в hdd, как торентокачаку/раздавалку, може еще чего полезного поручить. Какой образ на него лучше накатить под это дело? Есть живые и счастливые пользователи?

 ,

vromanov
()

Минимальный Rhel/Centos 5

Форум — Linux-install

Для виртуального образа, который выкладывается на сайт нужен минимальный образ Centos 5. Ставлю при помощи кикстарта. Потом еще приходится вырезать ненужные пакеты. Такие как, lvm, mkinitrd, device-mapper итд.

Какие еще пути уменьшить размер получающего образа? Может есть другие минималистические сборки rpm-based дистрибутивов?

vromanov
()

Atomic CAS (Compare And Swap) для битов

Форум — Development

Интересно, существует ли такой? Хочется сделать большую битовую карту. И выставлять/проверять статус «занятости» без блокировок. Вообще похоже, что можно будет обойтись обычный байтовым CAS. Нужно для реализации lockless множества чисел. Прогамма работает с сообщениями, если уже сейчас обрабатывается сообщение связанное с пользователем (точнее с IP), и приходит еще одно, то новое должно быть отложено пка не завершится обработка предидущего. Таких обработчиков ограниченое количество - 100-200, обычно 16. Нужна структура, где хранить те IP которые в обработке.

 , ,

vromanov
()

free/top показывает направильный размер памяти

Форум — Admin

Оказывается, free или top при показе свободной памяти не показывает память занимаемую объектами sys v (семафоры, очередеи, shared memory). Если у вас есть какие-либо приложения, которые ее используют данные мониторинга могут окзаться сильно неправильными

vromanov
()

LockFree очередь сообщений в shared memory - какие хорошие реализации?

Форум — Development

Итак, имеем следующую задачу. Один (или несколько) процессов вычитывают из сети сообщения. Несколько других процессов обрабатывают эти сообщения. Т.е. апи приблизительно такой -

  • retcode_t push(void* data, int size);
  • retcode_t pop(void* data, int max_size, int* size);

При том это все рабоатет на уровне сообщения. Т.е. если вставили тру кусочка по 100, 200, и 300 то и выберем 100, 200, 300 а не 600 одним куском.

Хотелось бы это сделать без блокировок. Писателей/читателей от 4 до 50

vromanov
()

SpinLock в Shared memory

Форум — Development

Добрый день! В приложении используется Shared Memory. Для того, чтобы разные процессы не меняли данные одновременно используется spinlock в виде переменной, лежащей в той-же Shared Memory. Проблема в том, что при большом количестве заблокированных процессов, они начинают слишком много времени тратить в цикле спинлока. Сейчас есть идея сделать счетчик процеесов, коорые ждут лока и если их больше количества ядер-1, то сразу вызвать sleep вместо цикла спинлока. Может есть другие решения? Где про это все хорошо написано?

 , , ,

vromanov
()

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