C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[76045] Re:Re:Re:Re:Re:Re:[udp 통신]udp통신에서 응답속도를 빠르게 하는 방법 ?[자답]
[] 1891 읽음    2021-02-15 18:48
데이터 수신시에 IdUDPServer1UDPRead로 인터럽트가 발생하지 않습니다.
이벤트 함수 추가했고 데이터는 와이어샥으로 포트,아이피 정상 수신되는데... 인터럽트 별도 설정해줘야하나요?


금목암 님이 쓰신 글 :
: 거의 1달 가까이 기존 유럽제 시스템을 분석한 결론 입니다
: 아직 기대에 미치지 못하지만 ..
: 더 이상 개선에 시간을 쏱을수 없고 이 정도로 만족합니다
:
: udp echo server를 windows 에서 50Us 응답속도로 개선 했습니다
: 1. 한글 윈도우 보다 영문 윈도우os가 빠름(원리 모름)
: 2. 방화벽,백신을 삭제해야함
: 3. 안쓰는 네트워크 드라이버 서비스 모두 삭제
: 4. 기가비트 네트워크내 잡음내는 장비 모두 제거
: 5. 기가비트 네트워크 설정값 최적화 및 선로 switch 등 최적 성능 설정후
:   평균  전송속도 1.3기가 비트로 설정
: 6. 네트워크 쓰레드 처리
:    복잡하게 짜는것 보다 간단한게 더 빠름
: 7. 리눅스보다 윈도우가 3~30배 정도 빠름 (커널 드라이버 안쓰면)
:    리눅스는 모든 서비스 제거한 콘솔모드로 gcc만 깔고 테스트
:    물어보니 원래 리눅스 느리다고 함 전에는 빨랐다고 아는데
:    윈도우 컴파일러 처럼 최적화 안되고 빠른 기기는 커널을 조작해 특수 기능만
:    빠르고 대용량 전송시 유리하지 소규모 에는 특수한 방법을 써야 한다고함
:     github의 크로노스 udp echoserver 값 처럼 초고속 대용량 빠른 회수 처리
:     일반 모드에서는 불가능
:
: 8. 윈도우 메모리를 32기가 정도에 cpu도 8코어 정도로
:    8코어 이상에서는 크게 개선 안됨 1코어당 0.5%정도
:    코어수 적어도 메인 클럭이 높을수록 성능이 좋아짐
: 9. windows vs 2019  c++ 보다 c++builder가 10~20% 빨랐음 ㅗ
: 10. decompiler 로 유럽 장비 디컴파일러시 어셈블러 코드로 만들어 지고
:      c++로 보기에는 적합치 않음 엉망으로 나옴
:      컴파일시 실행은 되나 어떤 원리로 되나 알수 없음
:   
: ===========================================
: 금목암 님이 쓰신 글 :
: : 디바이스 드라이버 만들 실력은 안되어서 (이쪽은 잘 모름 )
: : 읽어보니 ndis 쪽 아주 복잡하고 중간에 설명이 나온 소스를 '못구함 
: :
: : 몇가지 꼼수를 써서 일단 100 uS 대로 맟추엇습니다
: : 원하는 바에는 못미치지만
: : 조금만 더 올리면 될것 같네요
: : 서비스도 죽이고 그래픽도 최적 성능에 이거저거 서비스 다 죽여보면서 테스트하고
: : mtu도 220으로 내리고 합니다(별 차이 안남 )
: :
: : 인텔 컴파일러 ,어셈블러나 api, 델파이로 짜면 c++builder 보다 빨라지나 ? 델파이가 느림
: : 인텔 컴파일러가 vc보다 30~50% 빠르다고 함
: : 리눅스도 윈도우와 비슷한 속도 입니다
: :
: : -------------------------------------------------
: : [해결방법]
: : 현재 WINDOWS10 환경에서는 CPU를 빠른것을 써야 됩니다
: : 사용하는 드라이버나 서비스 가능한 내리고 MTU도 작게 잡고
: : 네트워크는 1G나 10G로 사용함
: : C++BUILDER에서 CONSOLE로 WS2_32 소켙 라이브러리 붙여서
: : 100us로 응답하게 하는게 최선이고 더 빠른 cpu코어 써보니 시간이
: : 조금씩 줄어드네요:  한 16~32코어 정도 쓰면 그 정도 속도 나올듯 함
: : win7에서는 프레임워크 삭제하면 빨라짐
: :
: : fast udp 라고 요즘 asio 라이브러리 보고 있습니다
: : https://github.com/chronoxor/CppServer/blob/master/tests/test_udp.cpp
: : : -----------------------------------------------------------
: : : 금목암 님이 쓰신 글 :
: : : : 지금  indy 쓰레드로 0.15ms 로 처리하게 만들었습니다
: : : : 그리고 받자마자 바로 검사하고 회신주고 이 시간에 처리 됩니다 
: : : :
: : : : 다른 처리방법으로 fpga나 micom으로 짜면 되는데 가능하면
: : : : pc 상에서 처리하고 싶고 이미 pc 환경에서 처리하는 업체가 있습니다
: : : : 정확한 방법이나 언어는 모르는데 win7 에서 0.001ms로 응답 합니다
: : : :
: : : : ========================================
: : : : 왕초보와코드 님이 쓰신 글 :
: : : : : 윈도우 운영체제 자체가 불가능한 환경입니다.
: : : : :
: : : : : 1.쓰레드를 만들어 무한 반복하게 해도, 1회 실행한후 재실행 시간차가 16ms정도입니다
: : : : : 2.윈도우 운영체제 자체도 들어온 패킷을 확인하고 응용 프로그램에 전달하는 시간이 추가로 소요됩니다
: : : : :
: : : : : 따라서 불가능합니다
: : : : :
: : : : : 금목암 님이 쓰신 글 :
: : : : : : [udp 통신]udp통신에서 응답속도를 빠르게 하는 방법 ?
: : : : : :
: : : : : : 추운 날씨에 건강들 주의하세요
: : : : : :
: : : : : : 질문내용은 아래 사항이 가능한가 입니다
: : : : : :
: : : : : : udp 서버와 클라이언트 컴포넌트를 설정후
: : : : : :  192.168.10.100   에 5001번 포트로 들어온 38바이트 값을 검사한후
: : : : : : 이 패킷을 보내온 ip의 5001번 포트로 응답을 20바이트 보내주는데
: : : : : :
: : : : : :  처음에는 c#으로 작성해서 처리하면서 시간을 측정해보니 1~20ms정도
: : : : : :  나옵니다 보통은 1~4ms 이내 지만 간혹 시간이 길어지는데 이게 윈도우 문제라고
: : : : : :   하더군요  콘솔모드로 작성했습니다
: : : : : :   네트워크는 1Gbit 망입니다
: : : : : :
: : : : : :  그래서 c++builder indy 콤포넌트로 작성하니 처리후 응답시간이
: : : : : :  0.1ms~ 0.4ms로 약 10배 정도 빠르게 되었지만 (평균 160us)
: : : : : : 응답 데이터를 가끔 놓친다고 해서 ..
: : : : : :
: : : : : :  저쪽에서는 2us~ 20us로 50배 정도 더 빠르게 처리해 달라고 하더군요
: : : : : :  그래서 저쪽 장비를 연결하고 wireshark 로 캡처해보니
: : : : : :  정말 그런 속도로 응답 처리를 해서 이건 micom에서 처리한다고 하는데 ..
: : : : : : (평균 2~10 us로 응답 처리함)
: : : : : :
: : : : : :  pc에서 windows10  64비트 8기가 ram  i7   8th cpu  속도로 응답 처리하려면 어떻게 해야 할지
: : : : : :  모르겟네요 ?  일단 pc환경에서 가능한지 확인하고 답변해줘야 할것 같습니다
: : : : : : 네트워크는 1기가 full duplex설정 입니다
: : : : : : echo 서버처럼 빠른 회신을 주고자 합니다
: : : : : : =============
: : : : : : [응답 받자마자 회신]
: : : : : : void __fastcall TForm1::IdUDPServer1UDPRead(TIdUDPListenerThread *AThread, const TIdBytes AData,
: : : : : :           TIdSocketHandle *ABinding)  // 수신 부분  수신 이벤트 발생시 이곳으로 온다
: : : : : : {
: : : : : :      AnsiString Buffer2;
: : : : : :     Buffer2=IdUDPServer1->ReceiveString();  //버퍼에서 읽어들인다
: : : : : :       IdUDPClient1->Send("test");   // 상대편에 응답을 보낸다
: : : : : : }
: : : : : :
: : : : : :

+ -

관련 글 리스트
75687 [udp 통신]udp통신에서 응답속도를 빠르게 하는 방법 ? udp echo server 금목암 2637 2019/11/11
75690     Re:[udp 통신]udp통신에서 응답속도를 빠르게 하는 방법 ? 왕초보와코드 3061 2019/11/14
75693             Re:Re:Re:[udp 통신]udp통신에서 응답속도를 빠르게 하는 방법 ? 왕초보와코드 2556 2019/11/15
75698                 Re:Re:Re:Re:[udp 통신]udp통신에서 응답속도를 빠르게 하는 방법 ? 금목암 2645 2019/11/22
75733                     Re:Re:Re:Re:Re:[udp 통신]udp통신에서 응답속도를 빠르게 하는 방법 ?[자답] 금목암 3067 2019/12/23
76045                         Re:Re:Re:Re:Re:Re:[udp 통신]udp통신에서 응답속도를 빠르게 하는 방법 ?[자답] 1891 2021/02/15
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.