LINUX.ORG.RU

Сообщения zaz

 

Linux kernel development

Какие есть способы ускорения процесса разработки модулей для linux kernel в 2019 году (по сравнению с 2010) ?

Модуль не работает с железом, поэтому доступ к реальному железу не нужен.

Интересует в основном процесс тестинга. Быстро закинуть модуль в тестовую систему, чтоб в случае креша посмотреть стек трейс, чтоб был быстрый ребут (порядко 1-2 секунд).

В идеале хотелось бы какой-то qemu (или что-то другое побыстрее и попроще) который ОЧЕНЬ быстро грузит ядро, монтирует в ro root (который уже смонтирован в rw на основной системе или root свой но подключить фолдер с хост системы) и в качестве инита стартует баш скрипт

И при этом чтоб терминальный вывод (printk) логировался в файл + сам терминал был интерактивный.

 

zaz
()

Потерялись 2G RAM

Есть старенькая система (CentOS 5), у нее есть физических 4G RAM, и вся память видна в системе. Но система говорит (free) что из 4G реально занято 3G и 1G свободно+дисковый кеш.

Но если начинать разбираться куда ушло 3G памяти то есть непонятка куда пропало 2G RAM.

Если просcумировать RSS всех процессов (/proc/<pid>/status VmRSS) + SLAB ядра + tmpfs + RAM disk(s) + IPC shared memory + file map то получается чуть меньше 1G при реально занятых 3G.

Мало того если посмотреть на /proc/meminfo то видно что активно используются только 370MB, малоактивных меньше 100MB и вообще виртуальной памяти размечено всего на 1.4G (Committed_AS).

Где можно найти кому система отдала 2G RAM ?

 ,

zaz
()

Oracle socket read timeout

Есть приложение (С++) которое конектится к ораклу DB (используя OCI libclntsh.so). Иногда между приложением и ораклом случается отвал сети, в результате чего libclntsh залипает в «read» из сокета и висит там часами.

Вопрос: можно ли както добавить таймаут на чтение из сокета ? (гугл говорит что для JDBC и С# конектора можно, а вот для C не могу найти ничего такого ...)

 , ,

zaz
()

KWIN Wayland без systemd

Есть ли о кого опыт поднятия kwin_wayland на системе без systemd (желательно gentoo) ?

Я попытался но чтото не запускается, elogind при запуске ругается в лог:

Failed to register Released match on system bus: Invalid argument

А сам kwin_wayland:

kglobalaccel-runtime: Failed to register service org.kde.kglobalaccel

 , ,

zaz
()

Wyland на виртуалке

Запускал ли кто wayland (в составе федоры) на виртуалке (VMWare, Virtual Box) ?

 , ,

zaz
()

RUST feature для стабильной ветки

После обновления раста до версии 1.19.0 перестал работать feature макрос, при попытке использовать выдает ошибку:

error[E0554]: #[feature] may not be used on the stable release channel

Я так понял в стабильной зборке запретили использование не стабильного API? Можно както этот момент обойти (например ключами компилятора), ночную сборку ставить очень не хочется :(

 

zaz
()

Нужна библиотека для передачи цифрового сигнала через аналоговый звук

Собственно ищится библиотека (желательно C/C++) для передачи данных (скорость не критична, главное стабильность) через звуковой канал (динамик - микрофон, либо line out - line in на SB).

В идеале хотелось бы библиотеку у которой есть 2 метода:

1 - На вход получает массив данных (unsigned char[]) а на выходе выдает звуковой семпл (в PCM или WAV не важно)
2 - На вход получает звуковой семпл, на выходе массив данных

Может кто встречал/использовал чтото подобное ?

 , , ,

zaz
()

Строки в RUST

Есть вопрос по строкам (str не String) в Rust, насколько я понял строки это по сути теже масивы (&[u8]) но со своими особенностями.

И все было более мение понятно пока я не попытался разобраться в деталях работы/реализации вот этого метода (часть документации):

fn get<I>(&self, i: I) -> Option<&<I as SliceIndex<str>>::Output> 
where
    I: SliceIndex<str>
А именно меня здесь настараживает 'str' в случае с range Взято отсюда: https://doc.rust-lang.org/std/primitive.str.html

Я пошел смотреть исходники libcore (1.16.0) и во первых я не нашел там объявления этого метода, зато есть get для SliceExt:

fn get<I>(&self, index: I) -> Option<&I::Output>
        where I: SliceIndex<Self::Item>;

Во вторых имплиментация SliceIndex (для Range) указывает Output тип как:

type Output = [T];
Тоесть получается что <I as SliceIndex<str>>::Output - должен быть массив строк (а не строка).

Может ктото растолковать где я запутался ?

 

zaz
()

make «наследованеи» многопоточности

Есть некий Makefile такого содержания:

all:
        [ -d subdir1 ] && $(MAKE) -C subdir1 ; true
        [ -d subdir2 ] && $(MAKE) -C subdir2 ; true
        [ -d subdir3 ] && $(MAKE) -C subdir3 ; true
И вобщем все работает, но если я запускаю:
$ make -j4
То толку ноль так как «$(MAKE) -C subdir1» не наследует параметр "-j".

Какбы поправить код так чтоб make в subdir1, subdir2 и тд. наследовал значение -j ?

 , ,

zaz
()

Ускорить ретрансмиты TCP SYN

Есть клиентское ПО, оно пытается установить TCP соединение с сервером. У клиентов иногда бывают проблемы с сетью, и система долго устанавливает соединение. Основная проблема в том что в случае если до сервера не дошел первый SYN пакет система отправляет следующий с некоторой задержкой, 3й пакет отправится еще с большей задержкой, и ретрансмит интервал очень быстро вырастает до 10 секунд и более. Можно ли както через ioctl,setsockopt (или еще как) задать максимальное время ретрансмита для сокета (скажем максимум 2 секунды, чтобы каждые 2 секунды система слала SYN пакет) ?

 ,

zaz
()

Атомарное обновление файла

Допустим есть процес(ы) который часто (несколько раз в секунду) читает содержимое файла (открыл - прочитал - закрыл). Файл статический но иногда (скажем раз в 1-2 недели) в файле нужно внести какието изменения, при этом не хотелось бы чтоб процесс который читает данные из файла прочел какойто промежуточный вариант (где часть данных уже обновилась, а часть нет). Скажу сразу с локами возится не хочется, и не факт что получится их прикрутить в текущей задаче.

На данном этапе я храню несколько версий файла

data.v1
data.v2
data.v3
+ симлинк
data -> data.v3
И если мне нужно обновить данные, я создаю новую копию data.v4 и когда копия полностью готова то обновляю симлинк data -> data.v4 . Вродебы все работает, но хотелось бы узнать действительно ли такая процедура гарантирует атомарность обновления данных, и нельзя ли обойтись без симлинки (например подготавливаем копию потом делаем mv data.new data с перезаписью - но боюсь что mv с перезаписью это unlink + rename и есть короткий промежуток времени где файла вообще не будет).

 ,

zaz
()

AWS опять глючит

Что там с сабжем ? Какие слухи ходят ?

 ,

zaz
()

CPU for workstantion

Решил тут обновить железо на своей рабочей машине чтоб проекты (С++) можно было пересобирать не по 30 минут а побыстрее. И чтото меня огорчила последняя линейка интелов (Kaby Lake) - там либо цена $250+ либо уж совсем порезано все (частота, ядра, кеш).

Решил даже посмотреть в сторону AMD (чего не делал последние лет 6), а там какойто кошмар сплошной. Возник вопрос AMD забила на CPU и все силы бросила на GPU? И получается что в 2017 году на рынке CPU для серверов/десктопов/ноутов остался только Intel ?

 , ,

zaz
()

Anycast с минимальными затратами

Какая сейчас минимальная сеть для организации anycast ? (раньше вродебы была /23 но может чтото изменилось или я чтото путаю). И есть ли кто в инете кто может предоставить anycast без выдиления подсети (например запроксировать из anycast сети какойто HTTP ресурс на ближайший датацентр, или предоставить VPS/Shared host в существующей anycast группе) ?

PS. Есть желание отказатся от GEO DNS (из за некоторых технических проблем), в идеале подходит anycast но както жаба давит ради раздачи 1го мелкого XML файла по HTTP заводить /23 подсеть.

 ,

zaz
()

Получить стек от вызова функции

Есть ли способ приатачится к java процессу и просмотреть стек вызова стандартного методо ?

Тоесть: есть работающий процесс (tomcat), в определеный момент он в тихоря закрывает сокет (java.net.Socket.close()) - нужно узнать (желательно весь стек) кто дергает close(). Реально это сделать без рестарта и/или ребилда ?

 ,

zaz
()

Возврат старого значения переменной

Есть класс некоторое подобие смартпоинтера, у него есть метод detachObject который возвращает указатель на объект и отсоединяет смартпоинтер от этого объекта. Простейшая реализация в 3 строчки:

Object* detachObject()
{
  Object *tmpVar = m_obj;
  m_obj = NULL;
  return tmpVar;
}

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

PS. Понятно что профита это никакого не даст (компилятор и так все проаптимизирует и tmpVar выбросит) - но есть чисто «спортивный» интерес можно ли обойтись в єтом методе без tmpVar ?

 ,

zaz
()

QML + DBUS

Есть ли какой стандартный плагин (QT/KDE 5) для доступа к DBUS из QML ?

 , ,

zaz
()

Выбор NoSQL

Посоветуйте выбрать DB для хранения логов (действия пользователя в системе). Искать нужно будет по ID пользователя (UINT32), времени (UINT64) - в качестве данных будут BLOB (cереализированные кастомные объекты) от пары байт до пары килобайт. Это все нужно быстро инсертить, и быстро искать (User ID + time period) - основное ПО написано на С++.

В принципе пока траффик не сильно большой (вполне справится какойто SQL сервер вроде MySQL/PSQL/Oracle) - но всеже хочется за недорого получить запас на будущее + маштабирование.

Вот присматриваюсь к cassandra - вродебы всем неплохо (тут и маштабирование и отказоустойчивость из коробки + есть куча док и всяких тулзов), но может есть какие подводные камни или решение полутчше ?

 ,

zaz
()

Как избавится от копирования в RUST

Вобщем немного ковыряю по свободе RUST и сталкнулся с идиоцкой проблемой. Не могу избавится от лишнего копирования при создании объектов. Вот пример кода:

struct Foo { val: i32}

impl Foo {
  pub fn new() -> Foo {
    let o = Foo{val: 123};
    print!("Create new Foo: {:p}\n", &o);
    return o;
  }

  fn print(&mut self) {
    print!("In foo print {:p} -> {}\n", self, self.val);
  }
}

impl Drop for Foo {
  fn drop(&mut self) {
    print!("Destroy foo {:p}\n", self);
  }
}

fn main() {
  let mut f = Foo::new();
  f.print();
}

Выхлоп:

Create new Foo: 0x7ffff965fa10
In foo print 0x7ffff965fa58 -> 123
Destroy foo 0x7ffff965fa58

Как видно в конструкторе «new» у нас создается локальный объект на стеке, потом он копируется в во второй стековый объект f (внутри main). Вопрос как создавать объекты без лишнего копирования ?

 ,

zaz
()

Ускорить запуск перл скрипта

Есть небольшой перловый скрипт, сам скрипт работает довольно быстро (порядка 1 милисекунды) но из за того что он импортит (use) пол десятка стандартных модулей + свой код то процесс старта занимает довольно много времени (порядка 60 милисекунд) - можно ли както ускорить процесс запуска ? Например сгенерировать байткод (perl -MO=Bytecode) в котором уже будут все необходимые модули чтоб он не бегал по диску и не искал/парсил их ?

 ,

zaz
()

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