почему splice () так плохо работает в моей системе? - PullRequest
1 голос
/ 02 апреля 2011

Я хочу проверить производительность системного вызова splice (). Я сравниваю это с традиционным чтением / записью.

/* wr.cpp 
 * it use read/write
 */
#include  <sys/types.h>
#include  <sys/stat.h>
#include  <fcntl.h>
#include  <unistd.h>

#define BUF_SIZE 4096

int main(int argc, char *argv[])
{
    char buf[BUF_SIZE];
    int in = open("1.rmvb",O_RDONLY);
    int out = open("1.cp.rmvb",O_WRONLY|O_CREAT,0766);

    ssize_t nread;
    while( (nread = read(in,buf,BUF_SIZE)) > 0 )
    {
        write(out,buf,nread);
    }

    return 0;
}

//

/* splice.cpp 
 * it use splice
 */
#ifndef _GNU_SOURCE
#define _GNU_SOURCE
#endif

#include  <sys/types.h>
#include  <sys/stat.h>
#include  <fcntl.h>
#include  <unistd.h>

#define BUF_SIZE 4096

int main(int argc, char *argv[])
{
    char buf[BUF_SIZE];
    int in = open("1.rmvb",O_RDONLY);
    int out = open("1.cp.rmvb",O_WRONLY|O_CREAT,0766);

    ssize_t nread;
    while( (nread = splice(in,NULL,p[1],NULL,BUF_SIZE,0)) > 0)
            splice(p[0],NULL,out,NULL,BUF_SIZE,0);


    return 0;
}

вот результат:

enter image description here

Похоже, что spilce () не улучшил производительность и не уменьшил время процессора. Зачем? У меня версия ядра 2.6.35-28, ubuntu 10.10.

1 Ответ

0 голосов
/ 02 апреля 2011

Вы уверены, что один из ваших дескрипторов на самом деле труба? Потому что man splice говорит:

... Он передает до байт данных из дескриптора файла fd_in в дескриптор файла fd_out, , где один из дескрипторов должен ссылаться на канал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...