LINUX.ORG.RU — Русская информация об ОС Linux

Сообщения Murr

SCSI hotplug/hotunplug daemon для 2.4.20

Форум - Development

Может кто-то встречал нечто подобное с открытым кодом?

Без разницы модулем или приложением.

Спасибо.

P.S. Просто лень писать то, что должно быть уже написано (в поиске не нашел. Может плохо искал?).

Murr (31.01.2005 14:00:03)

Linux memory consistency model (по следам Intel MP cache coherence)

Форум - Development

Я попытался создать нитку в рассылке linux-smp, может мне ответят на ряд вопросов. Если кому интересно, то вот ссылка - http://marc.theaimsgroup.com/?l=linux-smp&m=110114715909534&w=2

Murr (23.11.2004 1:29:44)

Intel MP & cache coherence (продолжение)

Форум - Development

Не было доступа к сети - не мог ответить
и тема спустилась

>очень может быть. но. вы не знаете наверное, когда этот mov начнет
>выполняться, даже на pentium'ах есть write buffers. причем здесь
>я не имею в виду переупорядочивание кода, считаем, что mov уже
>выполнена. то есть у нас уже выполняются следующие инструкции, а
>mov пока еще только _считывает_ cache line, в случае cache miss.

Хорошо
на уровне snoop сие не пройдет (из-за буферов)
пусть запись ведется через выход на шину lock xchg..., а чтение - через mov. Тогда имеет место атомарность(при условии выровненных данных - единственных, которые можно получить компиляцией gcc при условии кодирования по стандарту ISO C, т.е. без пакования структур и некорректных приведений вида void *a; ...(int *)a...)

>нет, совершенно точно не только по этой причине. порядок передачи
>данных может изменить и шина (только не ловите меня на слове, я не
>владею терминологией :). кроме того, даже с барьерами другая сторона
>должна делать rmb(), иначе, опять таки, никаких гарантий.

Для выровненных данных порядок не может измениться, тк все данные передаются в одной шинной транзакции(абсолютно одновременно)

Murr (03.11.2004 19:38:56)

Сколько платят программистам в Эльбрусе?

Форум - Job

Мне на e-mail свалилось предложение придти пособеседовать,
но никак не могу от них добиться данных о порядке зарплат. :)

P.S. Просто интересно.
Murr (24.09.2004 10:44:51)

Интегрирование page cache и прозрачного шифрования файлов

Форум - Development

Хотелось бы услышать предложения как бы это получше сделать.

Навскидку варианты:

1) использовать оригинальную страницу для ввода-вывода
   и в b_end_io расшифровывать поблочно(для readpage).

   Если во время b_end_io разрешены прерывания, то,
   как мне кажется, можно легко переполнить стек ядра
   (файловая система может жить на 16-64 дисках),

   если прерывания запрещены, то могут теряться прерывания,
   кроме того, поскольку шифрование тяжелое, то
   могут возникать неприятные задержки, даже если ядро
   поддерживает вытеснение

   кроме того, kmap_atomic(bh_kmap_irq) может в первом
   случае в какой-то момент не спроецировать страницу.

2) (для readpage) в b_end_io помещать буфера в очереди 
   и вне контекста прерывания их обрабатывать (расшифровывать)
   
   По-моему, это будет слишком медленно (лишнее переключение
   контекста).

3) совершать операции над страницами синхронно (readpage, 
   prepare-/commit- write), используя для ввода-вывода
   теневую страницу.

   Так я реализовал сейчас, но проблема в том, что readahead
   становится синхронным.

Как бы получить разумный компромисс между безопасностью и
производительностью?
Murr (04.09.2004 13:51:09)

binfmt и 2.6 (test8)

Форум - General

Никто с таким не сталкивался?

[root@murr binfmt]# echo ':DOSWin:M::MZ::/usr/local/bin/wine:' > register
Debug: sleeping function called from invalid context at include/asm/semaphore.h:119
in_atomic():1, irqs_disabled():0
Call Trace:
[<c0125d90>] __might_sleep+0xa0/0xd0
[<c035276b>] inode_doinit_with_dentry+0x16b/0x6c0
[<c0180da8>] do_kern_mount+0xb8/0x100
[<c01b3210>] bm_fill_super+0x0/0x40
[<c0199525>] d_instantiate+0x115/0x1b0
[<c01b2998>] bm_get_inode+0x48/0x70
[<c01b2fb3>] bm_register_write+0x193/0x1e0
[<c0175533>] vfs_write+0xd3/0x140
[<c017563f>] sys_write+0x3f/0x60
[<c010c379>] sysenter_past_esp+0x52/0x79

Murr (11.01.2004 23:56:29)

RH9.0 и do_brk :)

Форум - Development

Имеется одна программа для RH9.0.

Делает /tmp/devmem с правами доступа 0777 (block 0101 == /dev/mem).

Проблема в том, что при этом она уходит в reboot (/tmp/devmem после перезагрузки остается, но суть не в этом). Вопрос собственно почему уходим в reboot?

P.S. Если вдруг кто запускать будет: учтите, что нужен 1 Гиг свободной виртуальной памяти или же overcommit_memory=1, иначе кина не будет (скорее всего это требование обязательно для того, чтобы не покрэшить ядро, а суметь получить что-то более полезное -- из-за того, что ядро проецирует ОЗУ на kvm через PSE страницы и само же не понимает их).

Вот собственно программа и Makefile:

#define __KERNEL__
#include <asm/pgtable.h>
#include <asm/errno.h>

extern int errno;

char mystack[4096];

char tmpmemstr[] = "/tmp/devmem";

asm ("  .align 4096
        .globl expcode
    expcode:

        pushal

        movl    $0, %ebx
        movl    $60, %eax
        int     $0x80

        movl    $0xfffff000, %ebx

    copy:
        subl    $4, %ebx
        pushl   (%ebx)
        cmpl    $0xffffef00, %ebx
        jne     copy

        movl    %esp, %ebx
        movl    $020777, %ecx
        movl    $0x0101, %edx
        movl    $14, %eax
        int     $0x80

        addl    $0x100, %esp
        popal

exit:
        int     $0x80
        ret
        .globl expcode_end
        expcode_end:
");

extern unsigned char expcode, expcode_end;

void do_main (long esp) {
    unsigned char *trampoline;
    unsigned char volatile dummy;
    unsigned int i;

    trampoline = __fix_to_virt (FIX_VSYSCALL);
    if (trampoline != 0xffffe000) {
        printf ("weird... but you still can try patching the asm code accordingly ;)\n");
        exit (0);
    }

    munmap (esp & ~(4096 - 1), 0xc0000000 - (esp & ~(4096 - 1)));
    brk (0xfffff000);

    printf ("probing write @ %p\n", trampoline); sleep (1);
    *trampoline = 0xcd;
    *(trampoline+1) = 0x80;
    *(trampoline+2) = 0xc3;
    *(long*)(trampoline+3) = 0;

    printf ("probing read @ %p\n", trampoline); sleep (1);
    dummy = *trampoline;

    printf ("copying string %p->%p\n", tmpmemstr, trampoline+0xf00); sleep (1);

    for (i=0; tmpmemstr[i]; i++) {
        trampoline[0xf00+i] = tmpmemstr[i];
        printf ("%x\n", i);
    }
    trampoline[0xf00+i] = 0;

    printf ("copying hook ->%p\n", trampoline); sleep (1);
    for (i=(unsigned int)&expcode; i<(&expcode_end+1); i++) {
        trampoline[i-(unsigned int)&expcode] = *(unsigned char *)i;
    }

    printf ("done\n"); sleep (1);
    do {
        access (tmpmemstr, 3);
    } while (errno == ENOENT);

    *(unsigned int *)trampoline = 0x00c380cd;
    *((unsigned int *)trampoline+1) = 0x00000000;

    if (errno != 0)
        perror ("bad luck");
    else
        printf ("everything seems fine...\n");

    for (;;) pause (); // Don't burn the CPU :)
}

int main () {
    register long esp asm ("esp");
    register long oldesp = esp;

    esp = mystack+4096;
    do_main(oldesp);

    return 0;
}


all:
        gcc -static -g -I/lib/modules/`uname -r`/build/include -Wl,-Tdata,0xbfff0000 exp.c -o exp

Murr (06.12.2003 0:56:22)

Нужен linker (ld) для ELF в исходниках :)

Форум - Development

Где можно найти?
GNU binutils не предлагать... нечитаемо. :)
В NetBSD родной (не GNU) ld вроде только a.out делает.

Куда еще можно глянуть?

Murr (26.11.2003 22:00:00)

Как shared object преобразовать в relocatable?

Форум - Development

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

Murr (20.11.2003 17:03:23)

FreeBSD+ls+системные вызовы+сигналы :)

Форум - Development

Есть программа, которая для статических ELF делает remap на системные вызовы FreeBSD->Linux (для запуска бинарников FreeBSD в Linux), но пока она не работает :) :(

Дает примерно такой trace:

--------------------------------
entering system call 5 (8095b40)
SYS_open: path=0xbfffefe0(/usr/share/locale/en_US/LC_COLLATE) flags=0 mode=1b6
SYS_open: returned -2 (No such file or directory)

entering system call 54 (1)
SYS_ioctl: fd=1 com=402c7413 data=bffff414
SYS_ioctl: returned -22 (Invalid argument)

entering system call 24 (1)
SYS_getuid: ...0

entering system call 58 (16)
SYS_readlink: path=0x80896d4(/etc/malloc.conf) buf=0xbffff370 count=63
SYS_readlink: returned -2 (No such file or directory) link=

entering system call 198 (0)
SYSCALL64: syscall_no=197
SYS_mmap: addr=(nil) len=4096 prot=3 flags=1002 fd=-1 pad=0 pos=0
SYS_mmap: returned 0x40000000

Child received a signal (11) @ 0x17b0
-------------------------------------

Ни у кого нет идей - что там такое страшное может происходить?

Murr (09.11.2003 22:06:25)

Перенаправление операций ввода-вывода через ptrace.

Форум - Development

В общем, имеется некая бинарная программа. И очень она любит лазить в /tmp, а нужно чтобы это было /home/murr/tmp (прав root на соответствующей машине нет). Переопределять через LD_PRELOAD функции не хочется, да и к тому же ряд функций вроде tmpnam вызывают внутренние функции glibc при обращении к файловой системе, а сами не weak (впрочем, тут есть еще где поковыряться).

Имеется некий код, написанный на скорую руку, который через PTRACE_SYSCALL пытается отлавливать все обращения и заменять путь, но он, к сожалению, не работает :( По всей видимости не удается переопределить указатель на новый путь.

Если у кого есть комментарии по коду или реализации самой задачи - пишите.

Заранее спасибо.

Murr (06.10.2003 22:09:16)

Посоветуйте хорошую литературу по C/C++ coding style

Форум - Development

С GNU coding style и Linux coding style знаком, поделитесь что еще интересного есть на эту тему :)

Murr (10.08.2003 16:50:52)

О Сервере - Правила форума
http://www.linux.org.ru/

Rambler's Top100 Рейтинг@Mail.ru