LINUX.ORG.RU

Сообщения reprimand

 

Как лучше сделать низкоточные таймеры?

Пишу софт на C.

Нужно выполнять ряд действий за равные промежутки времени (высокая точно НЕ нужна). Как правильно узнать что текущий промежуток уже закончился?

Варианты:

1.

action();

clock_gettime(CLOCK_MONOTONIC, &point)

if (compare(point, end)) break;

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

2. вводить тред в котором внутри будет:
thread2() {
    sleep(100);
    global_var = true;
}

затем после каждого action(); делать
if (global_var) break;


3. ДЭБИЛЬНЫЙ, но работающий вариант с сигналами
void handler(int signo) {
    signal(SIGALRM, handler);
}

...

{
	struct itimerval tval = {.it_value.tv_sec = 1};
	setitimer(ITIMER_REAL, &tval, NULL);
}

Мне крайне странно, что после каждого срабатывания хендлера, он сбрасывается, и надо каждый раз делать signal(SIGALRM, handler); Что за бред?



Какие еще есть варианты?

 ,

reprimand ()

Wifi6 (802.11ax) с USB подключением нет в природе? Или помогите найти адаптер для USB->M.2/MiniPCI-e

Приветствую!

Ищу Wifi6 модуль. Не вижу на рынке, которые подключаются по usb

Зато вижу в продаже много дешевых модулей с подключением по pci-e/m.d

Например: https://www.aliexpress.com/item/4000563277082.html

И тысячи схожих!

Но как их подключить к компьютеру? Оба M.2 слота заняты NVME SSD...

В общем, в любом случае ищу способ подключить это дело через USB. Пытаюсь найти USB->PCI-e/M.2, но нахожу устройства, которые сами включаются в PCI-e/M.2, и отдают USB, а мне нужно наоборот...

Или таких адаптеров не бывает?

UPD: Спасибо всем отписавшимся, тема решена!

Результаты:

1. Wifi6 с USB подключением лишь в планах, правда, их конская цена смущает: https://3dnews.ru/1029847/dlink-predstavila-perviy-v-mire-adapter-wifi-6-s-in...
2. Нормальных райзеров USB->PCI-e/M.2 нет, есть только специализированные, которые позволяют подключить лишь некоторый тип устройств (LTE модем либо SSD накопитель)
3. Проще решить проблему с занятыми PCI-e слотами чем городить адские костыли

-----------
FYI: https://www.ixbt.com/data/realtek-rtl9210b-orico-tcm2m-c3-ext-ssd-review.html

 ,

reprimand ()

Как отправить более приоритетные данные в дескриптор?

Дано:

1. tcp сокет. Один.
2. Большой поток данных, явно выше чем возможности сети, из-за чего сетевой буффер постоянно забивается (т.е. другими словами, poll() по этому дескриптору очень часто не возвращает POLLOUT в revents)

Задача:

Отправить кусочек данных В ПЕРВУЮ ОЧЕРЕДЬ, минуя стандартную очередь в ядре.

MSG_OOB не работает:

1. Только 1 байт будет приоритетным
2. Принимающая сторона которая получает данные используя read() не получает этот байт
3. Принимающая сторона которая использует recv() должна ОТДЕЛЬНО этот байт вытягивать с помощью этого же флага
4. Принимающая сторона может быть различным софтом, который иногда не поллит POLLPRI

Что делать?

 ,

reprimand ()

Pulseaudio самостоятельно меняет sample rate при появлении клиента с другим sample rate

SUBJ

Звучит это очень странно. Включаешь музыку на ютубе, запускаешь какой-нибудь OBS у которого в настройках установлен sample rate 44100Hz, музыка становится на тон ниже. Т.е. звучит более низкочастотно.

Исправляется на ходу только через pulseaudio -k

Комбинации с добавлением avoid-resampling с разными значениями (false и true) не помогли

В какую сторону копать?

Аудиокарта:

M-audio Air 192 4

 ,

reprimand ()

Нормальных мышек нет?

Приветствую!

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

Просто начинает немного раздражать когда это происходит с высшим ценовым сегментом.

К примеру. Razer Lancehead Tournament Mercury Edition. $80. Для мышки - нехилая цена. Проходит год - перестаёт нормально работать лефтклик. С вероятностью 25% не нажимается, при удержании часто «отпускает». Отдал в сервис с надеждой что починят... а там... предложили тупо вернуть мне деньги. Зашел в комментарии к товару - у людей такие же проблемы.

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

Заходишь в отзывы, а там просто беда: то тефлон отваливается, то резиновые накладки отслаиваются, то весь корпус люфтит и пластик из говна, то софт глючит... И это у мышек почти за $150!

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

Я просто хочу чтобы:

1. Там был нормальный сенсор чтобы можно было не только работать но и поиграть (то есть да, мышь нужна игровая)
2. Оно не ломалось от чиха
3. Были решены старые-древние как мир проблемы с клавишами и колёсиком
4. Желательно беспроводная, ибо 2021 год, уже можно было бы это осилить

Цена не имеет значения. Желательно не Razer, ибо, как оказалось - говно.

Я бы хотел купить Hydrogen, но поставки в мире обещают лишь к вторуму кварталу 2021, т.е. с СНГ это будет хрен знает когда.

Я знаю о https://sensor.fyi/ но там нет ни слова о беспроводных

К Logitech и A4tech ранее относился скептически, мол, делают ширпотреб. Сейчас вроде слышал что делают годноту. Это правда? Истории успеха есть?

 ,

reprimand ()

Посоветуйте менеджер процессов для linux/freebsd

Приветствую!

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

Системный менеджер решительно не подходит, это должна быть отдельная программа.

Хотелки:

1. Логирование на каждый аномальный случай
2. Удобное управление процессами. CLI тоже подходит, лишь бы можно было спокойно зайти, посмотреть список этих процессов и остановить по нужному сигналу.
3. Не очень сложная конфигурация. Скачал, в конфиге указал бинарники которые запускать, работаешь
4. Возможность не просто логировать, а, например, выполнять скрипт на определенные случае. Допустимо отсутствие этой фичи но относительно несложный код на C чтобы я мог сам это поправить/допилить.

 ,

reprimand ()

Помогите найти статью о исследовании речи человека если он слышит эту же речь

Привет!

Иногда так случается, что человек не понимает проблемы пока сам её не испытает. Сытый голодного не понимает.

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

Бывают такие конфигурации оборудования когда эта компенсация не работает ВООБЩЕ на определённых людях. Объяснения чтобы они это как-то исправили (использовали наушники/гарнитуру либо активацию по кнопке) не приводят к результату.

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

1. люди говорили в микрофон речь
2. слышали через наушники себя же с некоторой задержкой

При этом задержка динамически регулировалась с целью найти наиболее оптимальное значение, чтобы человеку было максимально некомфортно говорить.

Можете помочь найти?

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

 

reprimand ()

Как отладить случайные зависания системы и внезаптные segmentation fault разного ПО?

Имеем:

1) AMD Ryzen 9 3900X
2) X570 AORUS ELITE
3) Nvidia RTX 2070S
4) Система Linux Mint 17.2 с ядром 3.19.0-39, всё работает стабильно, но сама система давно устарела, обновлений нет, новый софт зачастую работать отказывается.
5) Система Linux Mint 19.3. Иногда работает стабильно и всё отлично. Иногда случайные программы падают с сегфолтом без видимой причины. Периодически (очень редко) просто зависает система. Стоковое ядро (вроде 5.0), равно как и и более свежие ядра, в том числе из пакета 5.6.3 дают аналогичную картину.

Вопросы:

1) Как отладить эту проблему? Обращался в саппорт амд - послали лесом со словами «Please be informed that AMD Ryzen™ 9 3900X officially have drivers for Windows 10 - 64-Bit Edition».
2) Может ли быть проблема в дистрибутиве? Не думаю что ситуацию будет другой. Даже если я накачу ubuntu mate, и следом напишу в багтрекер убунты, всё равно с меня потребуют провести некоторые исследования ибо никто неведомой хренью заниматься не будет и не хочет
3) Может ли быть дело в том, что система «Linux Mint 17.2» установлена на обычном SSD, который подключается через SATA, а «Linux Mint 19.3» установлен на nvme ssd?

Доп информация:

1) https://github.com/suaefar/ryzen-test не показал результатов, система не падает
2) Разгоном CPU и памяти не занимаюсь, все настройки в bios стоят штатные, версия bios самая последняя, СО достаточно эффективная и температурный режим всегда в норме
3) Пакет с микрокодом установлен
4) Судя по табличке https://wiki.gentoo.org/wiki/Ryzen всякие костыли и опции с отключением cstates не нужны в более новых Ryzen-ах. Это так или стоит попробовать?
5) dmesg: https://paste.ubuntu.com/p/Bqh9RtQ5tt/

 , , ,

reprimand ()

IOMMU уже работает на последних ядрах?

Обнаружил большое кол-во информации что AMD-vi забагован, в том числе в относительно свежих ядрах если использовать nvme, и trim в частности

Ссылка: https://bugzilla.kernel.org/show_bug.cgi?id=202665

Сценарий использования типичный:

1) материнка под AMDшный сокет (а именно X570 AORUS ELITE)
2) NVMe SSD M.2

Всегда брал ssd с sata подключением ибо проверено временем, и тут вдруг друзья такие:

ДАВАЙ ЭТО Ж МОДНЯВО-МОЛОДЕЖНО-БЫСТРО-КЛАССНО! НЕ ЗРЯ Ж МАТЕРИНКУ КУПИЛ ТАКУЮ!!

Ну я и повёлся...

Теперь вот думаю стоит ли ВООБЩЕ это (накопитель) использовать или вернуть в магаз пока не прошло 14 дней.

P.S. С виртуалками не работаю, виртуализацию вообще даже не включал в биосе.

 , , , ,

reprimand ()

Помогите найти самую дешевую материнскую плату с поддержкой ECC

Зачем?

Нужен сервак для хранения данных. Вычисления и прочие трудоёмкие активности не планируются, и потому мощный процессор и большие объемы памяти ни к чему.

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

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

Если кто-то может кинуть какие-то документы или статьи на тему как софтварно можно решить проблему отсутствия ECC на борту - очень буду благодарен.

 , ,

reprimand ()

Весеннее обострение?

Я тут заметил jollheef начал махать банхаммером.

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

Чем тебе помешал dk-? Он-то не кащенко, он такой же человек как и мы все, ну напостил какую-то чушь. Ну помахай удалятором, зачем рубить с плеча?

 

reprimand ()

Накидайте примеров хорошего дизайна

Подойдет что угодно: сайт, мобильное приложение, десктопный софт, приборная панель устройства, и т.д.

Для меня лично это удобность (не нужно делать много кликов мышкой по разным меню либо крутить туда-сюда колесиком чтобы переместиться по огромному landing page) и дизайн от которого не вытекают глаза.

Но если вам сайтик понравился за что-то конкретное, например, только лишь за дизайн - кидайте ссылку и напишите.

Например:

https://slack.com/, https://medium.com/ - у обоих сайтов простой и понятный дизайн без излишеств. Но напрягает разбрасывание контента по разным сторонам и необходимость крутить колесо вниз из-за лендинг-гигантизма.

Искал по ЛОР-у, но интересных тредов про дизайн не так уж и много, к сожалению:
1) Современные интерфейсы программ
2) Дизайн числовых полей ввода
3) «Погоняем» современный дизайн мессенджеров

Зачем мне всё это нужно?

На ЛОР-е часто ругают дизайн ПО и сайтов либо за ущербность либо за ретроградный «привет из 90-х!».
Покажите что вам НРАВИТИСЯ и скажите почему. И когда мне в ближайшем будущем придется иметь дело с дизайном чтобы я не погряз в пучине:

1) гигантских лендингов
2) UltraHD картинок на всю ширину экрана
3) видосов на всю ширину экрана в фоне
4) моднявых элементов управления без кнопки подтверждения
5) бесполезных анимаций, которые лишь занимают ваше время
6) ну и другой мерзости которая вас раздражает (укажите ниже) при посещении сайтиков или при использовании софта

Мне вот, например, тошно когда заходишь на сайт интернет-магазин а в углу экрана вылазит из кнопки чата окно чата и «якобы» тебе пишет какой-то консультант с попыткой помочь. А сейчас к анимации развёртывания окна чата прилепили ЗВУК. АААА БЕСИТ СМЕРТЬ СМЕРТЬ ЧЕРЕП КРЕСТ

 , ,

reprimand ()

Сейчас существует хоть один нормальный НЕпроприетарный браузер под Android?

Настраиваю отцу планшет на андроиде. Хочу поставить вменяемый браузер вместо стандартного chrome.

Попробовал несколько вариантов:

1) Chromium (устанавливается через различные проги типа getChromium)
2) Firefox (с офсайта)
3) Icecat (скачивается как с офсайта так и с f-droid-а)

А теперь проблемки:

1) Хромиум почему-то можно скачать исключительно последней версии. Которая отличается откровенно гнусным ненастраиваемым интерфейсом и всякой дрянью на стартовой странице типа «персонализированный контент» и «включите гугл плей сервисы хотя и так всё работает».
2) Вкладки во всех браузерах (ласт хромиум, icecat, firefox) выглядят точь в точь как на десктопе - полоска с кнопкой-крестиком. С моими пальцами попасть в крестик нереально (на самом деле реально, просто из-за размера планшет думает что я нажал либо на саму вкладку либо еще куда-то), а человеку с более толстыми пальцами - и подавно.
3) Что в firefox что в icecat нельзя зайти в настройки дополнений. Такое чувство, что их просто выпилили. Вот ты поставил дополнение - и что-то с ним сделать невозможно. Да и кажется, как будто половина из них тупо не работает. Половина самих настроек браузера тупо отсутствует, сделать домашнюю страницу на новую вкладку или хотя-бы добавить кнопку «домашняя страница» я не осилил. Что за говнище?

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

У меня на моём личном телефоне стоит Chromium 51. Там предельно простой интерфейс - строка с адресом и кнопка, которая открывает список вкладок на весь экран. Но я так и не нашел способа установить конкретную версию хромиума под андроид.

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

P.S. Пробовал Dolphin браузер. Говно еще то.
P.P.S. У меня дико горит от ущербности современного софта. Чем дальше тем хуже.

 ,

reprimand ()

GDB плюётся на MIPS бинарник с «not in executable format»

Привет всем! Сразу хочу сказать что я не ищу готового решения - мне достаточно будет совета насчёт «куда копать».

Собственно, есть embedded девайс, есть root доступ вместе с пачкой утилит на борту (gdb, strace, busybox).
Скачал тулчейн, нашел инструкцию как билдить бинарники под сей девайс с помощью тулчейна. Итоговые бинарники по оценкам утилит objdump и file НИЧЕМ (кроме stripped) не отличаются от тех бинарников, что уже есть на борту:

$ file bin_from_device
bin_from_device: ELF 32-bit LSB  executable, MIPS, MIPS32 rel2 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.12, stripped
$ file hello
hello: ELF 32-bit LSB  executable, MIPS, MIPS32 rel2 version 1, dynamically linked (uses shared libs), for GNU/Linux 2.6.12, not stripped

аналогично с objdump:
$ mips-linux-gnu-objdump -f bin_from_device 

bin_from_device:     file format elf32-tradlittlemips
architecture: mips:isa32r2, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x00401900

$ mips-linux-gnu-objdump -f hello

hello:     file format elf32-tradlittlemips
architecture: mips:isa32r2, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x00400490


Всё якобы должно работать. НО! Я заливаю hello на дейвайс, и при запуска получаю segmentation fault. При попытке схавать hello с помощью бортового gdb, он плюётся вот так:
$ ./gdb.867x hello
GNU gdb 6.7.1
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "mipsel-linux"...
"hello": not in executable format: File format not recognized

Такой хрени я еще не видал, о_О. Собственно, куда копать? Никак не ожидал плевка со стороны gdb.

Доп. информация:

1) Если скомпилить -static, то получаю Illegal instruction вместо segmentation fault. Лол?
2) Компилю бинари вот таким образом: $ mips-linux-gnu-gcc -EL -march=74kf2_1 -mdspr2 hello.c -o hello
3) Чипсет: Sigma Designs 8672
4) Проц: MIPS 74Kf (согласно документации на девайс)
5) cat /proc/cpuinfo
6) пробовал компилить с различными опциями -march, включая 74kc, итог один и тот же

 , ,

reprimand ()

Кто-то сейчас работает с callback-driven аудио?

Приветик!

Я тут поковырялся в ALSA, и пришёл к печальному выводу, что ихнее API тот еще кал, а как его использовать знает ограниченное кол-во лиц, на слова которых где-то в дебрях ссылаются многие гуглимые источники.
И/или порог вхождения там слишком высок, что понять всё волшебство и красоту мне не по силам.

Короче, решил взять какое-то кроссплатформенное API. Остановился на portaudio. Там сразу рекомендуют для non-glitchy playback/capture использовать callback. Неплохо. Пусть будет callback. Тем более, судя по современным тенденциям, это более удобный и безглючный способ передавать данные в/из DSP (DAC/ADC).

У меня пара вопросов:

1) В какой момент времени выполняется callback? Документация гласит, что «как только аудио API понадобились новые данные». Когда этот момент наступает? Когда все данные (читай - сэмплы) уже проиграны, и брать новые неоткуда? Но ведь в таком случае времени на «предоставление» этих данных и/или генерацию новых в callback-функции крайне мало, и каждая миллисекунда грозит «разрыву» в проигрывавнии.

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

2) Что случается, если времени будет недостаточно? Например, из-за объемности выполняемого кода (сложности алгоримта?), недостаточному кол-ву процессорного времени (CPU жрут другие процессы, после вызова callback-а тело функции не выполняется, а время отдаётся другим процессам), отсутствию/недостаче данных для выдачи (read() из файла не вернул достаточно байт или вообще не вернул управление и/или аналогичная ситуация с сокетами)? Можно ли просто «дропнуть» недостающую часть пустотой?

3) callback вызывается в отдельном треде?

Буду рад если поделитесь опытом. Буду неистово и искренне рад комментариям waker, i-rinat.

З.Ы. pulseaudio API не предлагать - отличие от portaudio там нет кроссплатформенности

 , , ,

reprimand ()

AYKVMSBB 0.0000000000001

Я тут посмотрел на относительно недавнее веселье... И решил принять участие. Итак...

Наконец-то состоялся долгожданный первый релиз (c) утилиты AYKVMSBB. Скачать можно тут.

Что означает название можно посмотреть в README.md на страничке github. Программа позволяет быстро узнать курс валюты.

Ну и от слов к делу. Примеры работы программы:

$ ./aykvmsbb           # без аргументов выводится курс валюты по умолчанию для вашей страны (если она есть в бд)
USD: 26.070702
$ ./aykvmsbb EUR       # а вот так можно задать интересующую нас валюту
EUR: 29.253935
$ ./aykvmsbb 1122013   # а вот так можно узнать курс на первое декабря 2013 года
USD: 7.993
$ ./aykvmsbb 1103      # если нужна определённая дата текущего года - год можно опустить
USD: 26.908632
$ ./aykvmsbb 1         # аналогично если нужно 1-е число текущего месяца
USD: 26.310335
$ ./aykvmsbb 28        # А вот и киллер-фичи подъехали! Если сейчас (к примеру) 1-е число, но нужен курс за 28 число прошлого месяца - месяц можно не указывать
USD: 26.27667
$ ./aykvmsbb JPY 28    # Аргументы можно указывать в любом порядке
JPY: 0.235113
$ LC_MONETARY=uk_UA.UTF-8 ./aykvmsbb # меняем страну и смотрим курс НБУ
USD: 26.070702
$ LC_MONETARY=ru_RU.UTF-8 ./aykvmsbb # аналогично для Банка России
USD: 57.002

Программа распространяется под лицензией GNU GPL v3.

Помимо прочего, по сравнению с утилитой DELIRIUM-а:

1) Утилита возвращает корректный код возврата в зависимости от успеха/неудачи.
2) По возможности в стандартный поток ошибок пишется ошибка.
3) Используется официальное API банков вместо парсинга веб страничек.
4) Независимо от данных, возвращаемых банком, числа с плавающей запятой всегда используют точку для разделителя дробной части.
4а) Числа с плавающей запятой при отображении не содержат лишних нулей в конце.
5) Не нужны никакие зависимости и библиотеки. Для компиляции необходим C99 совместимый компилятор, а для выполнения любая POSIX совместимая ОС.
6) Поддерживаются различные страны (пока что Россия и Украина), возвращается любая валюта, предоставляемая банком.

Фич-реквесты, багрепорты и (особенно!) пуллреквесты принимаются по адресу https://github.com/xdevelnet/AYKVMSBB

Хочу также отдать честь и совершить низкий поклон следующим регистрантам:

1) saahriktu
2) DELIRIUM

Ну и кастану nihirash - по приколу.

 , ,

reprimand ()

Форумы с кармой и прочей гадостью

Начитавшись ЛОР-овских нытиков в толксах и linux-org-ru может создаваться впечатление, что, мол, «тут всё так плохо» и «модераторы несправедливы».

Давеча пришлось по разными причинам иметь дело с одинм форумом + хабрахабром + одной площадкой, схожей по методу общения на dou.ua.

Во всех этих платформах была система «кармы» и «лайков-дизлайков». Пообщавшись немного и посоздавав несколько тем, я пришел к выводу, что:

1) ЛОР - прекрасный форум. Несмотря на обилие троллей и употребляющих вещества, получить ответ по делу вполне себе реально, а трешак оперативно удаляют модераторы.
2) Если ты не с толпой - тебя заминусят на самое дно, и не важно, что ты просто выражаешь своё мнение (пусть даже аргументированное и в очень вежливой форме)
3) Такие (заминусенные) посты обычно отображаются бледным шрифтом, благодаря чему у новых читателей заранее складывается предвзятое мнение.
4) Эти тупицы (лайкоботы) не в состоянии написать пост и вступить в дискуссию - им гораздо проще поставить "-" и уйти.

Названия форумов и сервисов называть не буду во избежание лютого срача.

Народ! Давайте жить дружно! (с)

Мне также интересен ваш опыт на таких форумах.

 

reprimand ()

Подскажие материалы о работе дискового реширования

Собственно, интересует как работает дисковый кеш на онтопике в деталях, а именно:

1) До какого предела можно заполнить дисковый кеш? Имеется ввиду сколько максимум свободной памяти он может занять?
2) Как часто или по каким критериям dirty pages синхронизируются с диском?
3) Происходит ли кеширование при операциях, не связанных с непосредственным вводом-выводом? Имеются ввиду не read()/write(), а open(), access(), stat().
4) Остаются ли данные в кеше после того, как выполнен write(), и данные УЖЕ записаны на физический диск?

Как известно, вызов write() на файловом дескрипторе, который открыт без опции O_SYNC приводит в первую очередь к копированию буффера в пространство ядра (в кеш) дабы вернуть управление софту так быстро как это возможно (тут мы не рассматриваем случаи когда происходит активная запись, кеш заполнен, и потому положительный эффект от такого механизма нивелируется). Вопрос в том, остаются ли данные в кеше после того, как они фактически сброшены на диск?

5) Аналогичный вопрос, происходит ли кеширование при O_SYNC? А при O_DIRECT? А при O_SYNC | O_DIRECT ?
6) Как вытеснить имеющийся кеш без применения всяких там «echo 3 > /proc/sys/vm/drop_caches». Слышал истории о том, мол, что кеш в современных ОС сделан умно, и потому чтение раз в пару часов к маленькому файлу не приводит к тому, что этот файл попадает в кеш. Собственно, интересует как вытесняется кеш чтением и записью в теории и на практике.


Через гугл инфы достаточно получить не удалось, мб. я не так искал?

 , , ,

reprimand ()

Как скрыть поля структуры в интерфейсе?

ЯП: C99

Пытаюсь запилить shared library. Что имеется:

Файл lib.h (он же интерфейс):

typedef struct mystruct mystruct;

mystruct foo();

Файл lib.c (он же реализация):
#include "lib.h"

struct mystruct {
    float float_val;
    short short_val;
}

mystruct foo() {
    mystruct = {.float_val = 1.1};
    return mystruct;
}


Компилится нормально:
gcc -c lib.c -o lib.o -fPIC
gcc -shared -o lib.so lib.o


Проблема, естественно, состоит в том, что использовать хидер (он же интерфейс) практически невозможно, т.к. размера структуры мы не знаем, и, соответственно, юзер свою прогу с использованием либы скомпилить не сможет:
#include "lib.h"

int main() {
    // ...

    mystruct a = foo(); // вот тут плюнет "error: variable ‘a’ has initializer but incomplete type"
    // затем "invalid use of incomplete typedef ‘mystruct’"
    // а затем "storage size of ‘a’ isn’t known"

    // ...
    return 0;
}


Задача:
1) Юзер имеет только интерфейс. Использует только его и shared object.
2) Юзер не имеет доступа к полям структуры. Т.е. mystruct.float_val = 99.99; выполнить нельзя.

ЛОР, подскажи, пожалуйста.

Может внутрь хидера зашибенить какое-то говно типа
struct blablabla {
    char[sizeof(needed_structure)];
};
?

UPD: Решение - opaque pointer. Возвращать структуру а не указатель на неё - моветон. Если так и делать, то лучше открыть структуру вместо велосипедирования.

 ,

reprimand ()

Как юзать газовую печь?

Линукс тут при том, что она будет обогревать линуксоида в холодные осенние и зимние вечера...

Сразу говорю, что гугл не помог, хотя гуглил по-всякому.

Есть газовая печь. Представляет собой прямоугольный параллелепипед высотой от пола до середины стены. Верхняя часть печи уже чем нижняя. Выглядит примерно так (схематично):

   ____________
   |          |
   |          |
   |          |
   |          |
   |          |
   |          |
  _|          |_
 |              |
 |              |
 |              |
 |    ------    |
 |    |    |  1 |
 |    ------    |
 |              |
 |    ------    |
 |    ------    |
------------------


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

ЛОР, подскажи, всё ли я правильно делаю?

1) Открываю первый кран
2) Открываю верхнюю дверку
3) Зажигаю газетку
4) Открываю второй кран (он ближе к грелке) и подношу газетку к грелке из которой немного начал валить газ.
5) Немного приоткрываю нижнюю дверку (всего на пару градусов)
6) Оставляю верхнюю дверку открытой тоже всего на пару градусов

Огонь красного цвета. Помимо шума газа слышно гудение.
Если открываю верхнюю дверку градусов эдак на 30, огонь становится синим, гудение пропадает.

Собственно, как правильно топить печь?

Модераторам: я знаю что тут некоторые любят махать удалятором, несмотря на то, что я оффтоплю в толксах очень редко (на моём счету всего одна тема), а темы других индивидов преспокойненько висят неделями. Пожалуйста, дайте треду повисеть пока не найдется вразумительный ответ. Вопрос реально серьезный, а на какой профильный форум идти я даже не знаю.

 

reprimand ()

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