제로카피는 커널에서 유저스페이스로 넘어올때 혹은 그 반대를 얘기하는거지
커널 내의 서브루틴끼리, 유저스페이스 내의 서브루틴끼리 카피하는건 전혀 상관없음
복사 자체는 그다지 비싸지 않음
중요한건 그게 컨텍스트 스위칭 비용을 발생시킨다는거임
복사를 위해선 시스템콜을 호출해야하니까
제로카피는 보통 mmap기반임
프로세스 A <-> 커널 <-> 메시지 버스 <-> 커널 <-> 프로세스 B
이 구조가 아니라
프로세스 A <-(mmap)-> 메시지 버스 <-(카피없이 mmap 주소만 전달)-> 프로세스 B
이 구조를 만들어서 시스템 콜 호출로 인한 무조건적인 컨텍스트 스위칭이 일어나지 않게 하는게 중요한거
추가 버퍼를 쓰냐 마냐는 어떤 처리가 필요하냐 아니면 어떤 API가 제공되냐에 따라 다른거지 프로토콜의 특성이라고는 볼수 없음
맞는듯.
근데 복사 자체 비용은 비쌈. 왜냐하면 L1,L2,L3 캐시 자체에서 병목을 일으킬 수 있는 비용이라 단기적으로 비싸지 않지만, 실제로는 그에따른 병목 줄이는 설계가 기반이니까 다 맞는거 같은데 복사 비용이 싸다는건 좀 동의하기 어렵네. 저 아래 제로 카피에 대해서는 좀 내가 잘 모르기때문에 106.241말에 반박이든 뭐든 하기 어렵지만 복사 비용은 비쌈
기준이 다른거겠지. 애초에 커널에서도 복사는 많이 일어남. 그런데 두가지 이유로 일반적으로 복사가 더 권장됨 1. 디버그하기 용이하고 코딩하기 편함 2. 어지간한 작은 데이터(기본적으로 512B) 수준에서는 포인터로 지랄하는것보다 복사가 쌈
@글쓴 프갤러(59.14) 뭐 나는 커널 수준에서 실제 해본 게 없기때문에 네 말이 맞겠지 다만, 일반적으로 책에서보면, 카프카, 레디스 도입이유가 네트워크 스레드 문제로 인해서 복사 병목때문이라고해서 실제로 제로 카피 한다고 알고있는데. 커널쪽은 잘 몰라서. 네 말이 맞을듯
카프카 레디스 복사병목 완화때문에 쓴다는 말은 오히려 처음들어보네 ㅇㅇ 그건 RDB와 비교한게 아닐까? RDB는 기본적으로 쓰고 읽고 하는게 한 세트기 때문에 트랜잭션의 비용이 크니까, 카프카나 레디스를 이용하면 대부분의 작업이 인메모리로 처리되어 더 빨라진다 뭐 이런 맥락일거같은데
@글쓴 프갤러(59.14) 나도 예전에 읽었던것이라 가물가물함. 다만, 실제로 제로카피 영역까지는 내가 주로 커널쪽 활동을 안하기때문에 모르는데 너 말이 맞겠지. 애초에 106.241말에 뭐라하기에는 내가 모르는 지식이라.;
제로카피는 재밌는 내용이 많음 ㅇㅇ 참고로 요즘 차량전장, IoT 쪽에선 iceoryx라는걸 많이 씀. 제로카피 메시지버스에 관심 있으면 한번 슥 보셈
@글쓴 프갤러(59.14) 그래, 좋은 글 고맙다. 잘 모르는 부분이라 IoT쪽은 PLC쪽 코딩 해본 경험이 다라서, 좋은 키워드 고맙다. 차량 전장은 아마 BMW 그쪽 코딩인거 같은데 한번 공부해볼게