LINUX.ORG.RU

Сообщения volodja-

 

Система оркестрации чистых преобразований данных на основе графа зависимостей (идея)

Форум — Science & Engineering

Система оркестрации чистых преобразований данных на основе графа зависимостей

1. Основная идея

  1. Система превращает приложения в набор запросов к пакетам, а пакеты — в чистые функции inputs → outputs.
  2. Для выполнения запросов система строит DAG (ориентированный ациклический граф) зависимостей пакетов.
  3. Каждое приложение не содержит кода пакетов. Оно:
    1. хранит локальное состояние приложения (например, переменные, настройки, промежуточные результаты для консольных приложений);
    2. формирует запросы к пакетам;
  4. Управляет историей DAG — графом преобразований данных, используемых приложением.

2. Пакеты

2.1 Содержимое пакета

  1. Набор бинарников для разных архитектур и конкретных процессоров, включая варианты с поддержкой инструкций (SSE, AVX, NEON и т.п.).
  2. Манифест, содержащий:
    1. UUID входных и выходных типов данных,
    2. описание пакета,
    3. контакты разработчиков,
    4. версию пакета.

2.2 Граф совместимости архитектур

  1. Определяет, какие бинарники могут запускаться на каких процессорах;
  2. Поддерживаемые наборы инструкций;
  3. Возможность запуска бинарника на более широкой архитектуре (например, x86 может выполняться на x86_64).

2.3 Принципы работы

  1. Чистота пакета:
    1. Пакет может только читать входные данные (inputs);
    2. Пакет может только записывать выходные данные (outputs);
    3. Пакет не имеет доступа к состоянию приложений или других пакетов;
    4. Каждый input и output имеет свой тип данных (UUID);
    5. Результат работы пакета полностью определяется входными данными и типом выходного значения;
    6. Общий кеш системы: outputs сохраняются в кеш, идентифицируемый комбинацией UUID всех входных данных и UUID типа выходных данных;
    7. Альтернативные реализации: при нестабильной или неэффективной работе система выбирает другую реализацию с теми же входными и выходными типами.

3. Входные и выходные данные

3.1 Типы данных

  1. Каждый тип данных имеет собственный UUID, описание и контакты разработчиков.
  2. Примеры типов: TextFile, Image, SensorReading, UIElement.

3.2 Экземпляры данных (inputs/outputs)

  1. Каждый вход и выход пакета связан с конкретным типом данных.
  2. Пакет может принимать несколько входов и создавать несколько выходов.
  3. Все входные данные доступны только для чтения.
  4. Выходные данные помещаются в общий системный кеш.
  5. Идентификация результатов: комбинация UUID всех входных данных и UUID типа выходного значения.

3.3 Особенности

  1. DAG зависимостей строится по связям между типами данных пакетов.
  2. Система автоматически управляет параллельным выполнением, когда одни выходы используются в нескольких ветвях графа.
  3. Кеш предотвращает повторные вычисления, обеспечивая высокую эффективность.
  4. Каждый пакет ведёт себя как чистая функция, без побочных эффектов.

4. Приложения

4.1 Состав

  1. Входные данные от внешних источников — драйверов, пользователя, сети, датчиков и т.п.
  2. Локальное состояние приложения, ассоциированное с экземпляром приложения: хранит привязки inputs → outputs, переменные, настройки, временные данные и другие параметры, необходимые только этому экземпляру.
  3. Принципы:
    1. Приложения не содержат кода пакетов, они лишь управляют потоками данных и вызывают нужные пакеты через систему.
    2. Для GUI используются пакеты визуализации, которые получают данные для отрисовки как обычные входные данные (UIElement и т.п.).
    3. Приложения различаются в основном по структуре запросов и набору используемых типов данных, а не по двоичному коду.

5. Общие черты системы

  1. Общий кеш промежуточных результатов: одинаковые входные данные и тип выходного значения дают один и тот же результат для всех приложений.
  2. Автоматический выбор реализации пакета на основе глобальной статистики стабильности и производительности.
  3. Параллельная обработка: результаты одного пакета могут одновременно использоваться многими другими.
  4. Автоматическая устойчивость к ошибкам: при сбоях система выбирает альтернативную реализацию.
  5. Детерминированность: каждый результат (output) однозначно определяется комбинацией входных данных и типа выходного значения.

6. Состояние приложения

  1. Приложение хранит своё локальное состояние как итеративное кольцо input → output, обновляемое на основе событий от драйверов (пользовательский ввод, сеть, датчики и т.п.).
  2. Каждое событие от драйвера добавляет новый input в кольцо, обрабатываемое через соответствующие пакеты системы.
  3. Результаты обработки (outputs) помещаются в локальное состояние приложения и/или в общий кеш системы, если они могут использоваться другими пакетами или приложениями.
  4. Состояние приложения является циклической структурой событий и их результатов, управляемой приложением и чистыми пакетами.
  5. Локальное состояние хранит:
    • переменные и настройки приложения;
    • промежуточные результаты вычислений для текущего экземпляра приложения;
    • историю DAG вызовов пакетов, связанных с этим приложением.

7. Сравнение с традиционными системами пакетов

ПризнакТрадиционные пакеты (rpm, deb)Система на графах
Что такое приложениеИсполняемая программа с зависимостямиНабор запросов к пакетам + локальное состояние
ЗависимостиЖёстко определены при установкеСтроятся динамически по типам данных
СостояниеМожет храниться внутри пакетаТолько в приложении
КешЛокальный для программыОбщий для всей системы
Выбор версииРучной, фиксированныйАвтоматический по статистике
UIВстроен в код приложенияЧерез пакеты отрисовки UI
Ошибки пакетаМогут нарушить работу приложенияАвтоматический выбор альтернативы
СовместимостьЗависит от архитектуры и сборкиГраф совместимости архитектур и инструкций
Множественные inputs/outputsОбычно отсутствуютПоддерживаются и описаны через UUID типов
Идентификация результатаПо имени файла или версииПо UUID входных данных + UUID типа результата

Краткое описание

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

Система сама выбирает наиболее эффективные и стабильные реализации пакетов, управляет потоками данных, визуализацией и устойчивостью к ошибкам.

 , , , ,

volodja-
()

Linux kernel TLS

Форум — Development

Привет всем есть кто-нибудь кто в ядре разбирается ? Подскажите как установить сокет клиент соединение к https серверу используя только linux kernel api без openssl/gnussl и тд. Поиском нашел только:

setsockopt(m_socket, SOL_TCP, TCP_ULP, "tls", sizeof("tls"));

struct tls12_crypto_info_aes_gcm_128 crypto_info;
crypto_info.info.version        = TLS_1_2_VERSION;
crypto_info.info.cipher_type    = TLS_CIPHER_AES_GCM_128;

vector<unsigned char> iv_write          (TLS_CIPHER_AES_GCM_128_IV_SIZE     , 0);
vector<unsigned char> seq_number_write  (TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE, 0);
vector<unsigned char> cipher_key_write  (TLS_CIPHER_AES_GCM_128_KEY_SIZE    , 0);
vector<unsigned char> implicit_iv_write (TLS_CIPHER_AES_GCM_128_SALT_SIZE   , 0);

memcpy(crypto_info.iv, iv_write.data()              , TLS_CIPHER_AES_GCM_128_IV_SIZE);
memcpy(crypto_info.rec_seq, seq_number_write.data() , TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE);
memcpy(crypto_info.key, cipher_key_write.data()     , TLS_CIPHER_AES_GCM_128_KEY_SIZE);
memcpy(crypto_info.salt, implicit_iv_write.data()   , TLS_CIPHER_AES_GCM_128_SALT_SIZE);

setsockopt(m_socket, SOL_TLS, TLS_TX, &crypto_info, sizeof(crypto_info))

но чем заполнить поля iv_write, seq_number_write, cipher_key_write, implicit_iv_write не нашел. Исходники openssl пока что не осилил. Результат выложу в открытый доступ.

 ,

volodja-
()

Best Linux PC: 8 ядерный чемоданчик

Форум — Linux-hardware

Предлагаю завести тему или раздел, в котором будет самая лучшая(!) конфигурация железа под свежий дистрибутив Linux за текущий год, т.е. топовая в пределах разумного. Любой участник может добавить какое-то требование к сборке железа (обоснованно) и предложить конфигурацию. Для решения данного вопроса нужно как можно большее количество участников с опытом по настройки Linux под различное железо.

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

Требования(в порядке убывания значимости):

  • 1. Поддержка XEN с пробросом видеокарты(Windows, разные Unix(*BSD, Linux, Solaris и тд), Mac OS X(!)) подразумевается постоянное использование гостевых операционок
  • 2. Аудиофильская звуковуха(192/24, >2 каналов)
  • 3. Лучшая игровая видеокарта с поддержкой физики
  • 4. Поддержка железа из коробки.

  • 5. >= 2 сетевухи, >= 1 GBit/sec
  • 6. Корпус Mini ITX удобный для переноски(например с ручкой)
  • 7. Оперативная память размер >= 128GB(чтоб можно было размещать образы гостевых систем в оперативке), поддержка ecc
  • 8. SAS HDD
  • 9. SSD через PCI-E или M2
  • 10. работа в качестве WIFI(ac) точки доступа
  • 11. работа 24/7
  • 12. USB3, USB-C, Thunderbolt

Я не смог подобрать конфигурацию, удовлетворяющей данным требованиям.

Вот то что удалось подобрать на 2015 год:

NAS Linux, Raid5, SSD Cache(bcache, EnhanceIO, dm-cache)

  • 1. MB: GIGABYTE GA-Z170N-WIFI
  • 2. RAM: 4x Kingston ValueRAM < KVR1333D3E9S / 8G > DDR-III DIMM 8Gb < PC3-10600 > ECC CL9
  • 3. Intel Network 7260.HMWG WiFi Wireless-AC 7260 H/T Dual Band 2x2 AC+Bluetooth HMC
  • 4. SSD 512 Gb M.2 2280 B&M 6Gb / s Transcend MTS800 < TS512GMTS800 > MLC
  • 5. Thermaltake < TPG-700M > Toughpower Grand 700W (24+8+ 2x4+4х6 / 8пин)Cable Management
  • 6. 4x HDD 4 Tb SAS 2.0 Hitachi Ultrastar 7K4000 < HUS724040ALS640 > 3.5" 7200rpm 64Mb
  • 7. usb проф звуковая карта в отсек 5.25"
  • 8. Lian Li PC-TU200B Black

Цена не имеет значения в разумных пределах.

PS: mac pro 2013 с parallels хорош, но стоит как хороший автомобиль и видео уже не топовое.

Перемещено toney из hardware

 game pc, ,

volodja-
()

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