Анализ процесса
Привет всем! Подскажите утилиту которой можно подключиться к процессу и увидеть, какая функция активно используется. Я ее использовал раньше, но сейчас не могу вспомнить название.
Привет всем! Подскажите утилиту которой можно подключиться к процессу и увидеть, какая функция активно используется. Я ее использовал раньше, но сейчас не могу вспомнить название.
Многие системные вызовы могут возвращать ошибку и устанавливать errno == EINTR, при этом рекомендуется повторить системный вызов. Для чего это требуется? Это как то можно использовать в своей программе? Почему ядро не может само обработать эту ситуацию и перезапустить вызов?
Ну, есть такая «проблема 10K» - потоков/процессов столько не насоздаёшь, да и нерационально иметь потоков больше числа ядер, а select() тоже не поюзаешь, ибо каждый раз гонять между ядром и приложением 10К-кусок данных - не круто. И тут приходит epoll и все радуются. Или там kqueue или чё-то такое.
А вот как это представлено в boost::asio?
Приветствую.
Есть С-код: https://github.com/derickr/pecl-dbus/blob/master/dbus.c
Если вкратце, этот код - биндинг полутора функций для работы с d-bus.
И этот код течет аки решето.
Видимо в какой-то функции, которая дергает функцию, дергающую функцию, разработчик забыл почистить какой-нибудь массив, а у меня не хватает С-шных познаний это найти.
Вопрос: есть ли какой-нибудь изящный способ вывести все переменные объекта или иным способом отдебажить где жор?
Благодарю.
Например, есть код.
class A {
private:
const X& x;
public:
A(const X& x) : x(x) {};
getX() { return x; }
}
int main() {
X x1;
A a(x1);
std::cout<<a.getX()<<"\n";
}
Верно ли я понимаю что в таком случае созданная в main()
переменная x1
типа X
не будет копироваться, а поле класса x
будет инициализировано ссылкой на оригинальный x1
?
Камрады, всем доборый день!
Решил тряхнуть стариной, написать кое-что полезное для себя и таких же упоротых личностей. Заодно вспомнить Си (который без «крестов»). Естественно, хочется сделать «красиво, модно, молодёжно» и удобно. Вопрос - как проекты на Си принято начинать в 2024? Ну там пакетные менеджеры (а они вообще есть?), линтеры и прочее счастье. Какой стандарт сейчас считается «правильным» для использования и какую литературку/доку по нему почитать? Буду благодарен, если покидаетесь статьями или книгами.
Если вы не слышали, я создаю гибридное ядро ОС, которое будет полностью свободным и лёгким. Как мне реализовать системные вызовы?
Столкнулся с проблемой что в одной из виртуальных машин посыпались ошибки дисковых операций типа:
[ +0.000006] EXT4-fs error (device dm-6): kmmpd:179: comm kmmpd-dm-6: Error wri ting to MMP block
[ +0.000006] blk_update_request: I/O error, dev nvme0n1, sector 57003600 op 0x1 :(WRITE) flags 0x8800 phys_seg 1 prio class 2
[ +0.000006] EXT4-fs warning (device dm-6): ext4_end_bio:342: I/O error 10 writ
первая мысль умер винт…но dmesg хоста ничего не говорил об ошибках в своих сообщениях. Похоже проблема моя описана тут: https://bugzilla.proxmox.com/show_bug.cgi?id=3738 , но решения из этого топика не решили проблему. Сейчас при попытке создать VM получаю ошибки:
WARNING: Thin pool Gigabyte_nvme/Gigabyte_nvme needs check has read-only metadata.
WARNING: Thin pool Gigabyte_nvme/Gigabyte_nvme has unexpected transaction id 18, expecting 19.
no lock found trying to remove 'create' lock
error before or during data restore, some or all disks were not completely restored. VM 100 state is NOT cleaned up.
WARNING: Thin pool Gigabyte_nvme/Gigabyte_nvme needs check has read-only metadata. Сам же этот том находится в режиме только чтение:
--- Logical volume ---
LV Name Gigabyte_nvme
VG Name Gigabyte_nvme
LV UUID Rg53rQ-MrG1-o1UF-c7UJ-VwOd-lcU1-mecQ40
LV Write Access read/write (activated read only)
LV Creation host, time pve, 2023-03-09 11:22:50 +0300
LV Pool metadata Gigabyte_nvme_tmeta
LV Pool data Gigabyte_nvme_tdata
LV Status available
# open 0
LV Size 493.39 GiB
Allocated pool data 9.56%
Allocated metadata 0.82%
Current LE 126308
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 512
Block device 253:5
утилита проверки выдает такое:
thin_check /dev/Gigabyte_nvme/Gigabyte_nvme_meta0
examining superblock
TRANSACTION_ID=18
METADATA_FREE_BLOCKS=1250303
examining devices tree
examining mapping tree
thin device 2 is missing mappings [1699316, 1699444]
bad checksum in btree node (block 9276)
Куда дальше копать то? может вообще по неправильному пути иду?
Это текстовая версия моей статьи про разработку графического приложения на чистом ассемблере под линукс.
( читать дальше... )
Эта статья является продолжением предыдущей публикации, в которой описывается разработка сетевой библиотеки на C++20. В данном продолжении акцент сделан на более детальном описании разработки алгоритма Raft и его интеграции с сетевой библиотекой.
( читать дальше... )
С годами работы в области распределённых систем, я понял, что мой опыт не будет полным без реализации алгоритма Raft. Это осознание побудило меня к действию: я решил создать свою реализацию, используя асинхронные возможности C++20.
( читать дальше... )
Предположим есть такой код (добавил нумерацию строк для наглядности)
1: use strict;
2:
3: my %a = (
4: a => 12,
5: b => '',
6: x => { z => 22 },
7: l => 'sd'
8: );
9:
10: my %c = (
11: f => 'test',
12: b => $a{b}{c},
13: g => $a{a},
14: d => $a{x}{z},
15: );
он выдает такую ошибку: Can't use string ("") as a HASH ref while "strict refs" in use at /tmp/t.pl line 15.
Из него совершенно неочевидно где именно произошла ошибка. Если структура %c
будет ещё сложнее и длиннее, то поиск ошибки вообще превратится в боль. Можно ли как-то сделать, чтобы perl явно показал, что проблема в данном случае в $a{b}{c}
?
Здравствуйте, форумчане. Похоже, запустил систему без одного диска (кабель выпал). Подключил его обратно, и теперь массив не стартует. Запустил его сам: mdadm --assemble --readonly --force --name --scan
. Теперь он отображается в /proc/mdstat
как неполный:
6442186752 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/3] [_UUU]
На всех трёх ЖД, которые рабочие, запускал mdadm --examine УСТРОЙСТВО
, и на последней строчке массив так же отображается как неполный: Array State : .AAA ('A' == active, '.' == missing, 'R' == replacing)
. А вот у виновника эта строчка гласит, что массив полный: Array State : AAAA ('A' == active, '.' == missing, 'R' == replacing)
.
Как так, это глюк какой-то? Чтобы его вернуть назад, его нужно удалить из массива и снова добавить? Стоит ли сначала проверить контрольные суммы, или это бесполезно? Сами данные вроде целые, файловая система проходит проверку и монтируется.
есть пакет в Debian из репозитория libssh2-1 создающий в /usr/lib/x86_64-linux-gnu/
соответственно
libssh2.a
libssh2.so
libssh2.so.1
libssh2.so.1.0.1
он кривой, скачал с исходника последнуюю версию, сделал конфиг и мейк, без мейк инсталл, как прилинковать эту библиотеку при компиляции, т.к. то что делаю ниже все равно почему то тянет старую версию, приходится просто подменять файл libssh2.so.1.0.1 в /usr/lib/x86_64-linux-gnu/
g++ -o AddWork AddWork.cpp -L./ibpp/core -lfbclient -libpp -DIBPP_LINUX -L./libssh2-1.8.2/src -lssh2-1.8.2-ssl-dbg