소켓에서 read()나 write() 들어오고 나가는 것을 처리하기 위해서 큐를 많이 쓰시는 것으로 알고 있습니다. 특히 원형큐를 많이 쓰실텐데 이런 경우 생기는 두가지 오버헤드를 줄이는 방법에 대해서 고민해 봤지만 뾰족한 묘수가 떠오르지 않아 질문 올립니다.
1. Queue 의 복사
큐에 있는 데이터를 처리(읽기 또는 쓰기) 위해 이 데이터를 적당한 구조체로 복사하는 오버헤드가 있습니다. 이를 복사하지 않고 처리 할 수 있는 방법이 있을까요? 특히 소켓 통신과 자료 처리를 하는 쓰레드가 따로 돌아가고 있는 경우에 말입니다. (즉, 큐에 경쟁적인 lock이 들어가는 경우)
이 task에서 udp port 1000을 bind해서 사용하고 있습니다.
이 task는 ip 10.1.1.2에서 수행되고 있다고 합시다.
remote host (10.1.1.1)에서 source port 2000, dest port 1000으로 packet이 들어왔습니다.
당연히, recvfrom()해서 받았지요. 보통 여기서 bind()한 socket으로 다시 sendto()해서
reply를 보내지 않습니까? -- 여기서 사용된 socket descriptor를 sd_org 라고 합시다.
현재 진행중인 프로젝트에서 최적화라고 해야 할까요..
사용하는 플랫폼이 ARM7을 core로 가지고 있다 보니, 메모리가 무척 부족합니다.
더군다나 os가 돌고 있고, 어플리케이션을 작성해야 하는 상황입니다.
사실 문제의 해결책은 찾았는데, 부족한 스택 영역에 조금이라도 부담을 덜 주고 싶어 질문 드립니다.
# apt-get upgrade
Reading package lists... Done
Building dependency tree... Done
You might want to run `apt-get -f install' to correct these.
The following packages have unmet dependencies:
libc6-dev: Depends: libc6 (= 2.3.2.ds1-20ubuntu15) but 2.3.2.ds1-20ubuntu14 is installed
locales: Depends: glibc-2.3.2.ds1-20ubuntu15
E: Unmet dependencies. Try using -f.