Fw: [問題] Linux Socket Performance

看板LinuxDev作者 (carylorrk)時間6年前 (2018/05/09 09:24), 6年前編輯推噓0(003)
留言3則, 2人參與, 6年前最新討論串2/2 (看更多)
※ [本文轉錄自 C_and_CPP 看板 #1QyTR0gb ] 作者: carylorrk (carylorrk) 看板: C_and_CPP 標題: [問題] Linux Socket Performance 時間: Wed May 9 00:56:28 2018 開發平台(Platform): (Ex: Win10, Linux, ...) Ubuntu 16.04 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) gcc-5.5 問題(Question): 先承認這是作業文 小弟對網路程式不熟悉 第一次使用 Linux TCP socket 實作簡單的 RPC 但是不知道是哪裡的問題 performance 大概只有原本使用 gRPC 的一半 可能只是很蠢的操作方式錯誤 又或者是哪裡 implement 太慢 還請各位鞭小力一點 整個系統的架構是 每臺電腦之間都會互相溝通 主要程式部分是 multithread 可能會同步呼叫通訊部分的函式 並且每次傳送數百 bytes 到 mega bytes 不等的內容 次數頻繁,可能是一秒就好幾次呼叫 通訊部分架構 我一開始就把每臺之間的 socket 創好 用一個 bind & listen & accept 的 thread 加上 connet 到所有比自己後面的機器取得 sockets 並建立兩個 thread 分別負責傳送和接收(init.h) 傳送的 thread 是一個 task queue 有人需要傳送時先把資料加到 queue 裡 這個 thread 就負責一直從 queue 裡拿資料 然後利用 send 把資料傳到對應 socket 去 (sender.cc) 接收的 thread 則是利用 epoll 來等待所有 sockets 的訊息進來 讀進來之後會根據 command 創一個 thread call 相對應的 handler function (receiver.cc) 目前測量應該不是 serialize 方面的問題 也有試過在 receiver 創 thread 的部分使用 thread pool 但是暫時還沒有找到效能的問題點 不知道有沒有先進能給點意見?感謝~ 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) https://gist.github.com/CaryLorrk/12726181cd3ebd79a1c6ccdedeb8c29f 不是完整的程式碼 不過網路部分都有出來了 我知道架構很醜,傷眼了 XD -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 122.116.234.91 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1525798592.A.AA5.html ※ 轉錄者: carylorrk (122.116.234.91), 05/09/2018 09:24:20

05/09 15:22, 6年前 , 1F
可以用gperf 來分析哪的地方在吃效能
05/09 15:22, 1F

05/09 15:24, 6年前 , 2F
對不起,打錯字,gprof 才是對的
05/09 15:24, 2F
其實主要是想問問看在這種架構下一般的做法是什麼 我目前有寫一個比較小的測試範本,用 perf 去量 發現有可能是當每秒 call send_message(enqueue) 次數增加時造成的問題 但是目前還看不出個所以然,先補上程式碼,再努力看看 XD https://github.com/CaryLorrk/tcp_socket.git

05/09 21:15, 6年前 , 3F
cond_var叫起做完事後沒有unlock?
05/09 21:15, 3F
出了 scope 之後就自己會 unlock 了~ ※ 編輯: carylorrk (122.116.234.91), 05/09/2018 22:43:50
文章代碼(AID): #1Qyat6t9 (LinuxDev)
文章代碼(AID): #1Qyat6t9 (LinuxDev)