最近要測試打出 Multi thread session 去測試速度, 可是在 Linux 下, Iperf 大概最多只能建 180, 最多最多不超過 360 個 Session.
可是 ulimit 中的 Max user processes 也改了 /proc/sys/kernel/thread-max 最高上限都是 30000 條以上
結果還是有問題, 查遍了 Google 也沒有答案.
最後試出來的結果是, pthread_create 預設會使用很大的 stack size, 在 create thread 時, 調整 stack size 就可以達到目地.
不過我測試的結果是不太穩定, 只能說, 大概往這個方向找解答就對了.
因為接下來我暫時無法分出時間來解決這個問題, 所以先在這邊寫我測試的進度.
首先, 要修改 iperf 的 source code , 縮小 Pthread 的 Stack Size.
找到 iperf source 下的 compat/Thread.c function thread_start , 加上以下的 Code
pthread_attr_t pthread_attr;
pthread_attr_init(&pthread_attr);
pthread_attr_setstacksize(&pthread_attr,409600);
再將 pthread_create function 那一行改成
if ( pthread_create( &thread->mTID, &pthread_attr, thread_run_wrapper, thread ) != 0 ) {
接下來請修改系統參數
ulimit -n 8192 (可同時開 8192 個 File)
ulimit -s 65535 (將 Stack Size 開到 64MByte)
至於 thread max , 如果是 PC 應該都很高
我自己測試的結果是 1024-1500 左右應該都可以執行, 但是要超過 2000 條就不行了.
所以…… 還在找 Bug.
只是我最近沒空, 怕過一陣子忘了怎麼追這個問題的.
發佈留言