단방향 데몬 통신을 위해 Unix 도메인 데이터그램 소켓을 사용하고 있습니다. 특정 최고 계산에서는 write()
읽기 프로세스에서 단일 데이터그램을 계산하는 데 더 많은 시간이 필요하기 때문에 소켓에 쓰는 프로세스가 차단될 수 있습니다 . 쓰기 프로세스는 정기적으로 데이터를 생성하므로 문제를 해결하는 가장 깔끔한 방법은 소켓의 버퍼링 용량을 늘리는 것입니다. 소켓은 다음 시스템 단위 파일을 기반으로 생성됩니다.
[Unit]
Description= Some Internal Socket
[Socket]
ListenDatagram=/run/foo/foo.sk
#ReceiveBuffer=10M
#SendBuffer=10M
#PipeSize=10M
#MessageQueueMaxMessages=1024
#MessageQueueMessageSize=1024
나는 systemd.socket에 대한 사람을 살펴보고 유망해 보이는 몇 가지 옵션(주석 처리)을 발견했습니다. 나는 이들의 다양한 조합을 시도했지만 불행히도 아무것도 작동하지 않습니다. 디스크의 유닛 파일을 변경한 후에는 항상 시스템(운영 체제)을 재부팅하여 적용된 변경 사항이 적용되는지 확인합니다. 매번 블록 앞에 동일한 수의 데이터그램을 쓸 수 있습니다. 아마도 데이터그램 길이가 몇 바이트씩 달라질 수 있기 때문일 것입니다. 예를 들어 때로는 508개의 데이터그램을 쓸 수도 있고 때로는 483개의 데이터그램을 쓸 수도 있습니다.
올바른 접근 방식이 무엇인지 아는 사람이 있습니까?