LINUX.ORG.RU

Сообщения vbr

 

Хочу USB хаб для программиста

Форум — Talks

Мои пожелания в порядке убывания:

  1. Полная 100% гальваническая развязка, как по питанию, так и по сигнальным линиям. Никакого шанса того, что включенное в хаб устройство может навредить компьютеру, не должно быть.

  2. Физические кнопки включения/выключения для каждого порта, которые отключают все линии порта.

  3. Программное управление включением/выключением каждого порта через стандартные USB запросы (см. uhubctl)

  4. Питание от компьютера, без всяких дополнительных блоков питания.

  5. На даунстрим 4 порта USB-A, 4 порта USB-C, на апстрим (соединение с компьютером) порт, а не припаянный провод.

  6. Поддержка USB 3.

Может кто-то видел такое в природе за разумные деньги?

 ,

vbr
()

Посоветуйте консольный калькулятор

Форум — General

Наверное мне на самом деле нужно что-то вроде REPL… Мои пожелания:

  1. Простая консольная тулза, моментально запускающаяся и тд.

  2. Традиционный формат записи.

  3. Поддержка всех популярных математических функций, в частности логарифмов по произвольным основаниям (или хотя бы по 2/e/10) и чтобы оно было сразу доступно, без всяких импортов.

  4. Поддержка рациональных чисел, пока получается. Чтобы 10 / 3 * 3 === 10 было. В идеале вообще символьные, но допускаю, что мне это на самом деле не надо.

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

  6. Поддержка битовых операций, двоичного, шестнадцатеричного представления. Наверное в виде переключения формата вывода для последующих действий…

Пока пользуюсь обычным GUI-калькулятором, bc -l и python3 но это всё не очень удобно…

 ,

vbr
()

Как перелезть через великую китайскую стену?

Форум — Talks

Забросила меня судьба в Китай. Имею проблемы с интернетом. Спасаюсь роумингом, но он дорогой. Местный интернет дешёвый но там многое заблокировано. Собственно вопрос - есть ли проверенные способы работать с комфортом? Пробовал ProtonVPN, AstrillVPN - шлак, ничего не работает, все их хваленые защиты просто не коннектятся, Wireguard коннектит, но через несколько минут перестаёт работать. ssh для проксирования пробовал использовать (до своих серверов), тоже неюзабельно, буквально несколько минут и всё. В общем так работать нельзя.

В курсе про всякие модные XTLS-Reality и прочие прикольные штуки, но вопрос - работает ли оно реально, есть ли у кого личный опыт? У меня есть VPS-ка, купить другую не проблема, но не хочу тратить время на то, что не сработает, и так кучу времени уже на эту порнографию потратил.

 ,

vbr
()

Как USB устройство может отличить компьютер от зарядки?

Форум — Development

Мне это нужно для того, чтобы определять - сколько амперов тянуть из порта. Из компьютера я хочу тянуть не очень много, а из зарядки - по максимуму (для заряда аккумулятора).

Интернет подсказывает, что у зарядки D+ и D- замкнуты. Но проблема в том, что в моём чипе я не нашёл такой возможности определить это состояние.

Пока планирую отслеживать USB RESET в течение некоторого времени после появления напряжения. Если его не произошло, значит подключена зарядка.

Но проблема в том, что если подключить устройство к компьютеру в спящем режиме, то USB RESET там тоже не приходит.

Есть какая-то ещё возможность это дело отследить?

И полу-связанный вопрос - что вообще будет, если из USB порта уснувшего компьютера тянуть, скажем, ампер тока? Я так полагаю, либо порт на это рассчитан и ничего не будет, или порт на это не рассчитан, будет проседать напряжение и будет срабатывать в цикле событие отключения USB?

 

vbr
()

Как в USB отправить информацию из девайса?

Форум — Development

Я пишу прошивку для девайса, который через USB коммуницирует с компьютером. В девайсе возникает событие, которое нужно передать в запущенную на компьютере программу. Я вроде в USB разобрался, но всё равно ничего лучше поллинга 10 раз в секунду не придумал. Просто посылаю setup request из программы на девайс, а девайс отвечает ответом или stall-ом. Но как-то это туповато, такое ощущение, что я что-то фундаментальное не понимаю. Или так и надо?

 

vbr
()

Что ставить после гнома в арче?

Форум — Desktop

Я арчем никогда особо не пользовался. В федоре и прочем всё идет в комплексе. А тут — базу поставил, гном накатил, gdm включил, вроде все запускается, вайфай подключился, спикер говорит.

Что-то важное еще надо поставить? Ну кроме того, что мне, непосредственно, нужно. В той же Федоре пакетов несколько сотен, а тут вроде поменьше. Боюсь упустить что-то важное, системное.

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

 , ,

vbr
()

Поясните про secure boot

Форум — Security

От чего он защищает? Конкретные примеры атак хочу понять. Если я могу загрузить live cd убунты, который подписан ключами MS. Но при этом ключи MS удалять нельзя тк это кирпичит девайс.

 

vbr
()

HTTP/2 замедляет сайт на порядок

Форум — Admin

Всё внутри kubernetes, но в целом он тут, кажется, не очень важен, я грешу на nginx. В качестве ингресса - ingress-nginx.

Общая архитектура: на входе стоит ingress-nginx, за ним несколько сервисов. Статика в отдельном контейнере с nginx, также есть несколько сервисов.

Сейчас ingress-nginx настроен с отключенным HTTP/2. Загрузка выглядит так. Сгруппированные ресурсы начинают загружаться одновременно.

/researches   2.4 kB   24 ms

  /static/js/main.dea63410.chunk.js    124 kB    108 ms
  /static/js/4.596e458a.chunk.js      1700 kB   1070 ms

    /api/dictionaries/recommendationsWithServiceNames   3.8 kB   40 ms
    /api/dictionaries/structuredConclusionResults       1.6 kB   36 ms
    /api/dictionaries/structuredDescriptions            2.4 kB   47 ms

      /static/js/10.8d651677.chunk.js   15.6 kB   59 ms
...

Как видно, в этом примере основное время уходит на /static/js/4.596e458a.chunk.js, остальное грузится условно-моментально. Дальше грузятся другие ресурсы, но пока остановимся тут, для демонстрации проблемы этого достаточно.

Я включаю http-2 в ingress-nginx, больше ничего не делаю. Насколько я понимаю, это добавляет директиву http2 on во все локации сгенерированного nginx.conf.

И теперь смотрю загрузку:

/researches   2.2 kB   34 ms

  /static/js/main.dea63410.chunk.js    124 kB   778 ms
  /static/js/4.596e458a.chunk.js      1700 kB   732 ms

    /api/dictionaries/recommendationsWithServiceNames   3.6 kB   832 ms
    /api/dictionaries/structuredConclusionResults       1.4 kB   832 ms
    /api/dictionaries/structuredDescriptions            2.2 kB   832 ms

      /static/js/10.8d651677.chunk.js   15.5 kB   975 ms

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

Второе, что заметно - файл /static/js/main.dea63410.chunk.js грузится очень долго. В целом это не проблема, т.к. грузится параллельно со /static/js/4.596e458a.chunk.js но всё же отличие большое.

И самая фатальная проблема - мелкие эндпоинты и мелкие статические файлики начинают грузиться очень долго.

Суммарно с HTTP/1.1 страница появляется примерно через 2-3 секунды, с HTTP/2 через 10-15 секунд.

Собственно всё время теряется непонятно где - в мелких файликах, которые реально из проксируемого сервиса отдаются абсолютно моментально.

Все вышеперечисленные измерения проведены на практически неиспользуемом сайте, кеширование отключено, замеры произведены многократно и тд и тп, воспроизводится в 100% случаев.

Я это явление увидел примерно год назад, разбираться не стал, просто отключил HTTP/2. Сейчас всё же хочу разобраться, т.к. версия с тем, что в какой-то версии nginx был какой-то баг, уже не принимается, с той поры обновлялся не раз и постоянно пробую включать HTTP/2 и постоянно наблюдаю эту ситуацию.

Размер сгенерированного файла nginx.conf больше 3000 строк, полагаю, никто его читать не будет, если интересуют конкретные директивы - спрашивайте, посмотреть недолго.

Если я из пода с ingress-nginx-ом дёргаю curl-ом запрашиваемые URL-ы у проксируемых сервисов, всё отрабатывает абсолютно моментально. В тех местах тормозить просто нечему.

Честно говоря я пока не понимаю, в чём может быть проблема. Я бы понял, если бы разница была в десятки процентов даже, но когда время загрузки файла вырастает с 40 ms до 840 ms, это мне непонятно.

Никаких особых настроек у ingress-nginx я не делал, практически все настройки «по умолчанию», те, что не по умолчанию - я пробовал менять.

  allow-snippet-annotations: "false"
  enable-brotli: "false"
  proxy-buffering: "off"
  proxy-real-ip-cidr: 10.160.32.0/20
  use-gzip: "false"
  use-http2: "true"
  use-proxy-protocol: "true"

Вот конкретно все настройки, это я пробую без сжатия и буферизации, обычно оно включено. Без них время загрузки вообще по несколько секунд на каждый ресурс. Какое-то безумие.

Сайт за HTTPS, терминируется в самом ingress-nginx, поэтому грешить на что-либо до него я тоже не могу, перед ним, конечно, стоит балансировщик нагрузки, но для него это просто бинарный непрозрачный поток.

 ,

vbr
()

Java, философия использования null-ов и Optional-ов

Форум — Development

Насколько я понял замысел создателей Java - для хранения данных нужно использовать nullable поля. В параметрах публичных функций нужно принимать not-null значения, null нельзя (в приватных можно). Если хочешь принять null, то тебе надо сделать перегрузку для этой функции без соотв. параметра или спроектировать API по-другому. В возвращаемых значениях публичных функций надо использовать Optional (вместо возврата null). В локальных переменных - я точно не понял, но полагаю, что в общем случае nullable, но если из функции данные получил в виде Optional, то можно так и оставить.

В целом это всё вызвано желанием убрать ненужное создание объектов. Optional это полновесный объект, и на ровном месте его создавать не нужно. Также доступ к значению получается через промежуточную ссылку, это тоже не очень хорошо. С локальными переменными и полями можно и без Optional разобраться, оно как бы всё рядом. С параметрами методов - тоже можно разобраться путем создания доп перегрузок. И только с возвращаемыми значениями так разобраться не получится, поэтому тут Optional это необходимое зло.

В Idea есть предупреждения на Optional в параметрах метода и в поле, так что это я как бы не сам придумал. Ну и в статьях про это писали.

Всё это выливается в подобный код:

class Person {
  private final String name;
  private final Integer age;
  
  private Person(String name, Integer age) {
    this.name = requireNonNull(name);
    this.age = age;
  }

  String name() { return name; }

  Optional<Integer> age() { return Optional.ofNullable(age); }

  class Builder {
    private String name;
    private Integer age;

    void name(String name) { this.name = requireNonNull(name); }

    void age(Integer age) { this.age = requireNonNull(age); }

    Person build() { return new Person(name, age); }
  }

}

Тут соблюдены все вышеперечисленные «каноны». Если хочешь создать персону без возраста, ты обязан не вызывать метод age в билдере.

С таким подходом получается, что создать копию персоны можно только так:

var personCopyBuilder = new Person.Builder();
personCopyBuilder.name(person.name());
person.age().ifPresent(age -> personCopyBuilder.age(age));
var personCopy = personCopyBuilder.build();

Если взять язык с nullable системой типов вроде Kotlin, то там как-то всё получается проще и естественней…

В частности мне не нравится вот эта сложная передача null, которая в том числе не даёт chain-ить методы билдера.

Как вы думаете - что тут можно улучшить? Или это хороший код и всё ок?

Скажем, один из вариантов это убрать проверку в Builder.age(Integer) на null, и тогда можно будет писать

var personCopy = new Person.Builder()
    .name(person.name())
    .age(person.age().orElse(null))
    .build()

и по сути тут вроде ничего страшного и нет, кроме нарушения правила не принимать nonnull значения в параметрах.

 , , ,

vbr
()

Нужно ли в Java отслеживать зависимости при компиляции?

Форум — Development

Если я пишу Makefile для C, мне надо отслеживать файлы, от которых зависит каждый файл и перекомпилировать транзитивные зависимости. В gcc для генерации таких файлов с зависимостями целые флаги придумали.

Вопрос: если я пишу Makefile для Java, в каких случаях тупой подход с игнорированием зависимостей будет давать сбои?

Пока вижу только один кейс. Пример кода:

A.java:
class A {
  static void f(Object o) {}
}

B.java:
class B {{
  A.f("");
}}

Далее в класс A добавляем static void f(String s) {}. Пока не перекомпилируем B, он будет продолжать вызывать f(Object), после перекомпиляции начнёт вызывать f(String). Но это прямо скажем надуманный пример.

Есть ли более приближенные к реальности примеры, когда изменение в одном файле вызывает необходимость перекомпилировать другой файл?

 

vbr
()

Как получить видимость в производительность БД?

Форум — Admin

Сегодня с утра лёг сайт. Самое противное - что не понятно, почему. Обновлений не было, всё примерно как обычно. Сайт на жаве. В логах таймауты коннекта к базе. То бишь все коннекты к базе были чем-то заняты.

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

Пытаюсь понять, что в этой ситуации надо делать.

Понятно, что есть тупой вариант - поставить на сервере max_connections 1000000 (или сколько там постгрес переварит), поставить в пул тоже какое-нибудь дикое число коннектов и пускай начальник деньги платит за CPU и RAM.

Я хочу всё же попытаться по уму сделать. Для начала нужно вообще понять суть причины. У меня постгрес managed, к самому серверу доступа нет, только через SQL и в консоли немного статистики есть. В частности по статистике видна корреляция - был огромный всплеск в графике locks.

Пока у меня такой план:

Написать программу, которая мониторит pg_stat_activity. Исходя из этой таблицы выписать запросы, которые долго выполняются. Пока не разобрался - возможно ли это, но на первый взгляд вроде полей там много, наверное - возможно. Кстати может уже есть такая программа?

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

Тут одна из проблем в том, что в запросе вместо конкретных параметров стоят placeholder-ы ($1 и тд). Без конкретных параметров воспроизвести запрос непонятно как. Как-то можно вытащить набор конкретных параметров в pg_stat_activity?

С этим вроде разобрался параметром preferQueryMode=simple в JDBC URL…

Альтернативно можно пойти со стороны приложения. Программисты не знают, как это сделать, я думал написать свой JDBC драйвер, который будет логгировать долгие запросы уже со всеми параметрами, ему-то всё приходит. Но это долгая история, я таким когда-то занимался, не самая простая задача. В принципе есть log4jdbc, вроде даже он ожил, раньше вроде мёртвый был, возможно он подойдёт. Но хотелось бы более универсальный подход, т.к. приложений много и не все на Java. И вообще лезть в них неохота лишний раз.

 , , ,

vbr
()

TIL: у блютуза безопасность нулевая

Форум — Talks

Я, конечно, всегда это предполагал, т.к. везде надо вводить в качестве пина 0000 или 1234 или подобную чушь.

Тут понадобилось блютуз устройство сделать, начал разбираться и оказывается любой статический пин ломается перебором за 2 попытки на бит. То бишь можно сказать - моментально. А также извлекается простым прослушиванием эфира. А блютуз, надо сказать, вопреки некоторым ожиданиям, пробивает несколько стен на пару десятков метров.

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

Что при этом делать тем, у кого девайс не предполагает экрана, стандартописатели скромно умалчивают.

 ,

vbr
()

Как использовать less с бесконечным источником?

Форум — General

Есть некая программа, которая выдаёт потенциально бесконечный текст. Ну к примеру любой просмотрщик логов, скажем docker logs -f

Использовать его просто в таком виде - неудобно. Удобно через less, который даёт мотать, искать и тд. Но я не понимаю, как правильно это делать так, чтобы не ломать предыдущую программу в пайпе.

К примеру я пишу docker logs -f jovial_kori | less

Открывается less с начала файла. Мне нужно перемотать в текущий конец. Если нажать G то ничего не получится, он будет ждать EOF. Если начать F то он перемотает в конец файла и начнёт отслеживать новые данные. Ладно, хорошо. Теперь я хочу временно прекратить отслеживать новые данные и жму Ctrl+C, чтобы выйти из режима F. Пока что всё хорошо. Но на самом деле нет - предыдущая программа в пайпе уже умерла. И хотя я могу смотреть то, что она успела написать до сих пор, новые данные я уже не получу.

Т.е. наверное вопрос можно сформулировать так: как выйти из режима F не «убивая» предыдущую программу в пайпе? Или же как перейти к концу текущего «файла» не используя F?

 

vbr
()

Какие идеальные условия для заряда батареи в ноутбуке, работающем от сети?

Форум — Linux-hardware

У меня ноутбук, в котором есть внутренняя батарея. Практически 100% времени этот ноутбук работает от сети. Тем не менее хочется максимально сохранить жизнь батареи. Это абсолютный приоритет.

В ноутбуке есть возможность настроить два значения - минимальный заряд и максимальный заряд. К примеру сейчас это 45% и 55%. Когда батарея разряжается до 45%, она начинает заряжаться до 55%, после этого заряд останавливается и она опять начинает разряжаться. Разряжается она по ощущениям около недели.

Хочется понять, какие идеальные значения нужно выбрать для такого юз-кейса?

У меня был макбук, там была функция, она кажется держала батарею на 80%, но это не настраивалось и, как я понял, там приоритет был в том, что если мне всё же батарея понадобится - чтобы она если и не на 100% была, то всё же давала достойное время жизни. Сейчас мне это не надо.

 ,

vbr
()

Как правильно отключать USB диск?

Форум — Linux-hardware

RHEL 9, Gnome, Samsung SSD T7 (SSD с USB интерфейсом).

Если отключаю через eject /dev/sda (как всегда делал), то в dmesg появляется кучка ошибок вида

[26929.854633] sd 0:0:0:0: [sda] Media removed, stopped polling
[26929.855329] sd 0:0:0:0: [sda] tag#16 device offline or changed
[26929.855331] blk_print_req_error: 4 callbacks suppressed
[26929.855332] I/O error, dev sda, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
[26929.855334] buffer_io_error: 3 callbacks suppressed
[26929.855335] Buffer I/O error on dev sda, logical block 0, async page read
[26929.855344] sd 0:0:0:0: [sda] tag#17 device offline or changed
[26929.855345] I/O error, dev sda, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
[26929.855346] Buffer I/O error on dev sda, logical block 0, async page read
[26929.855350] sd 0:0:0:0: [sda] tag#18 device offline or changed
[26929.855351] I/O error, dev sda, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
[26929.855352] Buffer I/O error on dev sda, logical block 0, async page read
[26929.855356] sd 0:0:0:0: [sda] tag#19 device offline or changed
[26929.855356] I/O error, dev sda, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
[26929.855357] Buffer I/O error on dev sda, logical block 0, async page read
[26929.855360] sd 0:0:0:0: [sda] tag#16 device offline or changed
[26929.855361] I/O error, dev sda, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
[26929.855361] Buffer I/O error on dev sda, logical block 0, async page read
[26929.855365] sd 0:0:0:0: [sda] tag#17 device offline or changed
[26929.855365] I/O error, dev sda, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
[26929.855366] Buffer I/O error on dev sda, logical block 0, async page read
[26929.855367]  sda: unable to read partition table
[26929.856799] sd 0:0:0:0: [sda] Media removed, stopped polling
[26929.857293] sd 0:0:0:0: [sda] tag#25 device offline or changed
[26929.857294] I/O error, dev sda, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
[26929.857296] Buffer I/O error on dev sda, logical block 0, async page read
[26929.857305] sd 0:0:0:0: [sda] tag#26 device offline or changed
[26929.857306] I/O error, dev sda, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
[26929.857307] Buffer I/O error on dev sda, logical block 0, async page read
[26929.857311] sd 0:0:0:0: [sda] tag#27 device offline or changed
[26929.857312] I/O error, dev sda, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
[26929.857313] Buffer I/O error on dev sda, logical block 0, async page read
[26929.857317] sd 0:0:0:0: [sda] tag#24 device offline or changed
[26929.857317] I/O error, dev sda, sector 0 op 0x0:(READ) flags 0x0 phys_seg 1 prio class 2
[26929.857318] Buffer I/O error on dev sda, logical block 0, async page read
[26929.857322] sd 0:0:0:0: [sda] tag#25 device offline or changed
[26929.857326] sd 0:0:0:0: [sda] tag#26 device offline or changed
[26929.857327]  sda: unable to read partition table
[26929.861414] sd 0:0:0:0: [sda] tag#3 device offline or changed
[26929.861426] sd 0:0:0:0: [sda] tag#0 device offline or changed

Это кажется не очень хорошо.

Если отключаю через кнопочку в гномском наутилусе, то тоже не всё идеально:

[26972.550912] sd 0:0:0:0: [sda] Synchronizing SCSI cache
[26972.672905] sd 0:0:0:0: [sda] Synchronize Cache(10) failed: Result: hostbyte=DID_ERROR driverbyte=DRIVER_OK
[26972.690445] usb 2-1.3: USB disconnect, device number 5

Тех страшных ошибок вроде нет, но чего-то там всё равно фейлится.

Как отключать так, чтобы всё было хорошо? А то у меня на этом диске периодически exfat ругается на плохое размонтирование, и я грешу на неправильное отключение. Пока вроде ничего не терялось, но мало ли…

Перемещено hobbit из general

 , ,

vbr
()

Приколы thinkpad-а

Форум — Talks

Тут баловался с разными линуксами и обнаружил, что с Type-C порта флешка грузится только если на ней подписанный secure boot сертификатами образ, к примеру RHEL. Арч не грузится. Подключаешь через переходник ровно ту же флешку к Type A и всё ок. В биосе, естественно, всё настроено как надо, не первый год замужем. Полчаса мудохался, пытаясь понять, что не так. Честно говоря так и не понял, как такое может быть, но факт вот такой. В интернете нигде не нагуглил.

 

vbr
()

Ноутбук не просыпается при перетыкании клавиатуры

Форум — Linux-hardware

У меня Thinkpad T14S. Сон работает хорошо, но есть одна проблема. У меня кроме него есть ещё системный блок. Монитор подключен и к ноутбуку и к системному блоку. Клавиатура с мышью также через простенький девайс-переключатель подключена одновременно туда и туда. Нажатием кнопки переключается.

Когда я переключаюсь с ноутбука на компьютер, я переключаю монитор и клавиатуру. Ноутбук через некоторое время от бездействия засыпает. Я переключаюсь назад, но вот уже уснувший ноутбук включенную клавиатуру не видит, даже питания на неё, судя по всему, не подаёт и не просыпается. Надо чуть-чуть приподнимать крышку, тогда просыпается.

Можно ли тут что-то придумать, чтобы не нужно было трогать крышку? Макбук у меня просыпался даже от блютус-клавиатуры.

Если отключить сон, то будет другая проблема. Гном не хочет выключать монитор, а просто подаёт чёрный экран. Ночью этот чёрный экран светит на всю комнату подсветкой, ну и вообще кажется неправильным не выключать монитор 24 часа в сутки.

 ,

vbr
()

Как проверить поддержку big.little архитектуры в планировщике?

Форум — Linux-hardware

У меня ноутбук с 1355U. На нём 2 быстрых ядра и 8 медленных.

Насколько я нагуглил, поддержка Alder Lake (первая архитектура с разными ядрами) появилась в ядре 5.13. Но с тех пор в разных патчах её дорабатывали.

В первую очередь меня беспокоит именно поддержка со стороны планировщика. Чтобы он понимал (честно говоря даже не представляю, как), какие процессы надо на быстрые ядра распределять, а какие - на медленные. Полагаю, что это очень сильно будет влиять на опыт использования компьютера.

Я сейчас выбираю между RHEL и Fedora. В Fedora ядро достаточно новое и лучше уже не будет, это понятно. Но она мне не очень нравится по некоторым другим причинам (слишком быстро обновляется, слишком современный софт). RHEL меня устраивает всем, кроме именно этого нюанса.

Мой ноутбук вроде сертифицирован для RHEL, но это ведь значит лишь то, что там всё как-то работает. В последнем RHEL ядро 5.14, но понятно, что эта цифра сама по себе ни о чём не говорит, т.к. они бэкпортируют некоторые фичи из новых версий. Но вот какие именно фичи они бэкпортируют - я не нашёл.

Поэтому меня интересует практический вопрос - как вообще можно проверить работу планировщика наглядно и сравнить её между двумя дистрибутивами. Чтобы я загрузился с одного, проверил, загрузился с другого, проверил, и увидел отличия (или их отсутствие).

Пока в голову приходит только несколько раз позапускать какой-то тест, грузящий CPU, вроде openssl speed. И убедиться, что пока их запущено не более двух штук, то они выдают максимально возможную скорость (т.е. пока доступны быстрые ядра, планировщик не будет использовать медленные).

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

 

vbr
()

Поругайте Lenovo P14s Gen 4 AMD

Форум — Linux-hardware

Specifications.

Ryzen 7 PRO 7840U, Radeon 780M, Up to 64GB LPDDR5x, 6400MHz.

Существенный минус вижу только один - память припаяна. Но это переживу.

Из плюсов:

  1. Цена, относительно небольшая для модели из сегмента рабочих станций. Apple, Dell стоят в 2-2.5 раза дороже.

  2. Сертифицирован RHEL. Значит всё должно более-менее нормально работать.

  3. Положительный отзыв на phoronix.

Меня беспокоит только, насколько Qualcomm WiFi поддерживается. Я привык, что WiFi должен быть от Intel. Но вроде у людей работает.

Основной юз-кейс - лежать закрытым и подключенным к монитору с клавиатурой и мышью. Программирование, иногда виртуалки. Поэтому на батарею и видеокарту в целом плевать, лишь бы как-то работали. Иногда будут долгие компиляции, поэтому 8 ядер это приятно, хотя всё равно планирую выкрутить энергопотребление на минимум, не люблю, когда оно греется и шумит.

Опыта использования Lenovo Thinkpad у меня нет. Может не просто так они дешевле стоят?

 

vbr
()

Как испустить радиоволну 50 КГц?

Форум — Talks

В радиоволнах ничего не понимаю, но хочу попробовать сделать девайс, который будет транслировать сигнал точного времени. У меня есть часы, которые в теории умеют этот сигнал улавливать и калиброваться по нему (а самого сигнала нет, не повезло мне жить там, где он есть). Протокол я нашёл, там всё примитивно - надо просто испускать радиоволну определённый период времени, грубо говоря раз в секунду в течение 0.9 секунды или 0.8 секунды (могу в деталях путаться, но в целом как-то так) и кодировать таким образом биты. Частота фиксированная, то ли 50 то ли 60 КГц.

Я так понимаю, электрический сигнал нужной частоты сгенерировать не проблема, можно взять любой микроконтроллер и использовать PWM.

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

Какая-то ощутимая мощность мне не нужна, я могу часы прям возле этой антенны положить.

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

Также вопрос - как можно эти радиоволны уловить и проверить, что они идут вообще? Часы штука не очень подходящая для отладки, там или работает, или нет. У меня есть осциллограф, может как-то с ним это провернуть можно?

 ,

vbr
()

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