LINUX.ORG.RU

[kernel] скорость fops.open

 


0

2

я могу и тупить, но в ядре 2.4 эта опрация выполняется раз в 10 быстрее нежели чем в 2.6/3.x разница между .open в двух драйверах точко в том, что в 2.4 все устройства были статичеки прописаны в массиве? а в 2.6 использую linked list, но физическое устройство есть только одно, поэтому не более одной итерации цикла при открытии, но тем не менее >32с против 4-х %(

долго боялся спрашивать (тут я точно туплю), но с чем это может быть связано?

★★★★★

Последнее исправление: metawishmaster (всего исправлений: 1)

в ядре 2.4 эта опрация выполняется раз в 10 быстрее нежели чем в 2.6/3.x

Как и что ты мерял?

разница между .open в двух драйверах точко в том, что в 2.4 все устройства были статичеки прописаны в массиве?

После того, как управление попадает в ->open, уже не важно, где хранятся дескрипторы устройств.

tailgunner ★★★★★
()
Ответ на: комментарий от metawishmaster

из юзер-спейса открывал устройство 40000 раз

Попробуй замерять именно скорость выполнения yourdevice_open. Пока что в твоем измерении участвует куча оверхеда помимо цикла поиска устройства.

tailgunner ★★★★★
()
Ответ на: комментарий от metawishmaster

Кхм. Ну кто же меряет время в jiffies? Попробуй get_cycles или do_gettimeofday.

0 тиков - это вообще возможно?

Ну ты же видишь %) Тик - это, условно говоря, 1мс. Всё, что меньше - это 0 тиков.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner
[ 5029.958851] mkopci: device 0 opened in regular mode in 1749464 ticks
[ 5030.134844] mkopci: device 0 opened in regular mode in 1740688 ticks
[ 5032.140253] mkopci: device 0 opened in regular mode in 1987260 ticks
[ 5038.161251] mkopci: device 0 opened in regular mode in 1822844 ticks
[ 5040.166938] mkopci: device 0 opened in regular mode in 1722476 ticks
...

как-то его колбасит %)

metawishmaster ★★★★★
() автор топика
Ответ на: комментарий от metawishmaster

200000тактов на 2ГГц процессоре - это 100мкс, нет так много (хотя зависит от того, что делается в ->open). Нужно сравнить с результатами 2.4

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

у меня стареньки P4 на 3ГГц, разогнан до 3.3...

как-раз вкомпиливал get_cycles в 2.4-й модуль

mkopci: device 0 opened in regular mode in 1024 ticks
mkopci: device 0 closed
mkopci: device 0 opened in regular mode in 1012 ticks
mkopci: device 0 closed
mkopci: device 0 opened in regular mode in 1012 ticks
mkopci: device 0 closed
mkopci: device 0 opened in regular mode in 1024 ticks
mkopci: device 0 closed
mkopci: device 0 opened in regular mode in 1012 ticks
mkopci: device 0 closed
mkopci: device 0 opened in regular mode in 1024 ticks
mkopci: device 0 closed
mkopci: device 0 opened in regular mode in 1112 ticks
mkopci: device 0 closed
mkopci: device 0 opened in regular mode in 1012 ticks
mkopci: device 0 closed
mkopci: device 0 opened in regular mode in 1036 ticks
mkopci: device 0 closed

ну т.е., понятен только масштаб регресса %)

metawishmaster ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

если найду... там, просто, три оператора %)

static int mkopci_open(struct inode *inode, struct file *filp)
{
    cycles_t cycls0 = get_cycles();

    mkopci_device_t* dev = NULL, *d = NULL;
    int backdoor = 0;

    list_for_each_entry(d, &devices, list) {
        if (d->core.n_dev == iminor(inode)) {
            printk("iteration\n");
            dev = d;
            break;
        }   
    }   

    if (dev == NULL)
        return -ENODEV;

    if(!(filp->f_flags & O_NONBLOCK)) {
        down_write(&dev->rwsem);
        if(dev->core.process) {
            up_write(&dev->rwsem);
            return -EBUSY;
        }   
        dev->core.process = current->pid;
        up_write(&dev->rwsem);
    } else
        backdoor = 1;

    filp->private_data = dev;
    printk(KERN_INFO "mkopci: device %d opened in %s mode in %ld ticks\n", dev->core.n_dev, backdoor ? "backdoor" : "regular", (unsigned long int)(get_cycles() - cycls0));

    return 0;
}
м.б. и не в этом драйвере... но на дебиановском родном 2.6.32 таки же тормоза, и есть смутные подозрения, что юзерспейсные проги так сильно тормозить ядро не могут load average после теста: 0.00, 0.13, 0.11

metawishmaster ★★★★★
() автор топика
Ответ на: комментарий от metawishmaster

В 2.6 устройство обычно сохраняется в inode, и не нужны ни цикл, ни список... интересно, сколько итераций дает этот цикл.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

В 2.6 устройство обычно сохраняется в inode

Это даёт какие-то преимущества по сравнению с 2.2/4? Или в 3.х тоже сменили?

darkshvein ☆☆
()
Ответ на: комментарий от darkshvein

Это даёт какие-то преимущества по сравнению с 2.2/4

Я же написал.

Или в 3.х тоже сменили?

С 3.x не работал.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

думается не так много, но стук в порбаный бебен шамана дает подсказку, что fbdev из ядра неплохо было бы убрать на время... разбросы во времени вообще дикие:

Mar  9 18:52:53 metawer kernel: [  979.592654] mkopci: device 0 opened in regular mode in 15538724 ticks
Mar  9 18:52:53 metawer kernel: [  979.622376] mkopci: device 0 closed
Mar  9 18:52:53 metawer kernel: [  979.631922] mkopci: device 0 opened in regular mode in 15558512 ticks
Mar  9 18:53:45 metawer kernel: [ 1012.121978] mkopci: device 0 closed
Mar  9 18:53:45 metawer kernel: [ 1012.122035] mkopci: device 0 opened in regular mode in 22264 ticks
Mar  9 18:53:45 metawer kernel: [ 1012.122731] mkopci: device 0 closed
Mar  9 18:53:45 metawer kernel: [ 1012.122768] mkopci: device 0 opened in regular mode in 10052 ticks
Mar  9 18:53:45 metawer kernel: [ 1012.123504] mkopci: device 0 closed

metawishmaster ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

вот я тоже так подумал :)

ща проверб на безфреймбуферно ядре и отпишусь :)

metawishmaster ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

долбанный фреймбуффер!!!

[  308.330503] mkopci: device 0 opened in regular mode in 880 ticks
[  308.331158] mkopci: device 0 closed
[  308.331225] mkopci: device 0 opened in regular mode in 436 ticks
[  308.331816] mkopci: device 0 closed
[  308.331879] mkopci: device 0 opened in regular mode in 400 ticks
[  308.332591] mkopci: device 0 closed

=)

а еще хотел спросить, и в теме проскакивало про inode...

как к нему можно достучаться из .probe?.. или .probe считается порочным путем?

metawishmaster ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.