| [ CnUnix ] in KIDS 글 쓴 이(By): vinawara (우산장수) 날 짜 (Date): 2002년 10월 15일 화요일 오전 10시 32분 43초 제 목(Title): Re: [q] IPC performance (socket)? 저도 doors로 끼어들까 하다가 locking쪽으로 이야기가 흘러가기에 그냥 보고만 있었습지요. doors라는건 local process간의 function call이 가능한 매커니즘정도로 이해하면 되겠군요. ( LPC 정도면 될려나 ) named-stream(named-pipe 비슷한)에 function을 맵핑시켜서 다른 프로세스가 call할 수 있도록 하는것이지요. 성능은 꽤 믿을만한 수준으로 알고있습니다. Linux port쪽에서 실험한 데이터로는 unix-domain socket, pipe등과 비교해서 제일높은 성능을 나타내었다더군요. 당연히, solaris의 application들도 door를 꽤 많이 이용하는것 같구요. 제가 있는 팀의 어떤분이 signal/sharedmem방식에서 signal loss가 발생해 문제가 있던것을 door를 써서 해결 사례(?)도 있습니다. ( 스티븐아저씨의 UNP 2ND Ed.의 Vol.2 IPC에서도 한챕터를 할애에 설명이 되어있습니다. 보다 자세한 설명은 여길., 혹은 man door_create 라고 하셔도 :) ref. Door Linux port : http://www.rampant.org/doors Kernel 2.2까지만 포팅이 되었고 그 이후로는 프로젝트가 중단되었습니다. 대충의 예제는 아래와 같습니다. Server Side ---8<--- #include <stdio.h> #include <door.h> #define TEST_COOKIE ((void *)0xa4a4b5b5) #define TESTDOOR ".testdoor" void server_proc(void *cookie, char *argp, size_t arg_size, door_desc_t *dp, size_t n_desc) { door_cred_t cred; printf("hi dude\n"); : door_return((char *)"Hey man", strlen("Hey man"), NULL, 0); } main() { int door, fd; if ((fd = creat(TESTDOOR, 0600))<0) { perror("creat"); exit(1); } close(fd); if ((door = door_create(server_proc, (void *)TEST_COOKIE, 0))<0) { perror("door_create"); exit(1); } fdetach(TESTDOOR); if (fattach(door, TESTDOOR)<0) { perror("fattach"); exit(1); } printf("OK START Service\n"); for(;;) pause(); } client side ---8<--- #include <fcntl.h> #include <stdio.h> #include <door.h> #define TEST_COOKIE ((void *)0xa4a4b5b5) #define TESTDOOR ".testdoor" main() { door_arg_t args; door_info_t info; int fd; char res[255]; if ((fd = open(TESTDOOR, O_RDONLY))<0) { perror("open"); exit(1); } if (door_info(fd, &info)<0 ) { perror("door_info"); exit(1); } printf("fd = %d\n", fd); args.data_ptr = (char *) "HuHu Hi"; args.data_size = sizeof("HuHu Hi"); args.desc_ptr = NULL; args.desc_num = 0; args.rbuf = res; args.rsize = sizeof(res); if (door_call(fd, &args)<0) { perror("door_call"); } printf("args.rbuf = %s\n", args.rbuf); =. 사랑을 전하기엔 언어란 부자유한 것이지. Keaton |