It looks like MacOS had CPU PM options removed from pmset in the last few 
years, so I’m not sure it’s possible to disable in recent versions. On 
Ubuntu I was able to get cpufrequtils to work a few months ago: 
https://askubuntu.com/questions/523640/how-i-can-disable-cpu-frequency-scaling-and-set-the-system-to-performance

Have you tried setting process priority with nice? 
https://superuser.com/questions/42817/is-there-any-way-to-set-the-priority-of-a-process-in-mac-os-x

Matt

On Friday, January 19, 2018 at 1:14:25 AM UTC-6, sotte...@gmail.com wrote:
>
> a. request client and server running on the same computer. 
> b. Unfortunately, I have not find the method how to disable OS power 
> management. I re-running this case on linux server,  result shows that 
> there is almost no time out. I suspect the P's block is affected by the 
> external operating environment, and the M was not scheduled in time.
>
> 在 2018年1月19日星期五 UTC+8上午1:25:43,matthe...@gmail.com写道:
>>
>> Is your test request source running on the same computer? Have you 
>> disabled OS power management features?
>>
>> Matt
>>
>> On Thursday, January 18, 2018 at 10:23:43 AM UTC-6, sotte...@gmail.com 
>> wrote:
>>>
>>> I developed an RPC Service with high requirements for real-time 
>>> performance. There was an unexpected delay at a small probability, and I do 
>>> not know how this happened. I suspect this is go schedule related, of 
>>> course, this may also be caused by a code bug. 
>>>
>>> Anyone can solve this problem, it will be a great help to me!
>>>
>>> Following is my test process. trace.out in the attachment.
>>>
>>>
>>> GO-Version:OS X go1.9.2  go1.10beta2   compile package 
>>> ::go1.10beta2.darwin-amd64.tar.gz
>>> Net : localhost To localhost
>>> QPS : 11K
>>>
>>> RT statistics 
>>>
>>> *TestTime*
>>>
>>> *Test Count*
>>>
>>> *0-1ms*
>>>
>>> *1-2ms*
>>>
>>> *2-5ms*
>>>
>>> *5-10ms*
>>>
>>> *10-20ms*
>>>
>>> *20+ms*
>>>
>>> *2018-01-16*
>>>
>>> 58409
>>>
>>> 99.97432%
>>>
>>> 0.022256844%
>>>
>>> 0.00342413%
>>>
>>> 0
>>>
>>> 0
>>>
>>> 0
>>>
>>> 51707
>>>
>>> 99.99226%
>>>
>>> 77358964%
>>>
>>> 0
>>>
>>> 0
>>>
>>> 0
>>>
>>> 0
>>>
>>> 54650
>>>
>>> 99.93413 %
>>>
>>>
>>> 0.027447393%
>>>
>>> 0.021957913%
>>>
>>> 0.0036596523%
>>>
>>> 0.0054894784%
>>>
>>> 0.0073193046%
>>>
>>>
>>> By analyzing trace.out, in addition to the GC, I found two places that 
>>> lead to very long blocks
>>>
>>>    - Net IO operator 
>>>    - Channel operator 
>>>    
>>>
>>> <https://lh3.googleusercontent.com/-f3CwZlmkYo8/WmBYqfozeeI/AAAAAAAAAAo/fTdh0qtEmNYSHJqLwU-RJvLFhJiOcdmRACLcBGAs/s1600/9135C3F2-C6DA-4199-A27D-0660497B553B.png>
>>>
>>>
>>> <https://lh3.googleusercontent.com/-qoqFDYLVtZg/WmBYm8unb3I/AAAAAAAAAAk/-V_-ck6IqVgtuMOT6uKvC3mm_oilw1bgQCLcBGAs/s1600/9135C3F2-C6DA-4199-A27D-0660497B553B.png>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> ReadLoop Code :
>>>
>>> for {               head := c.dataBuf[0:WafBaseHeaderLen]           _, err 
>>> := io.ReadFull(c.TcpConn, head)          if err != nil {                 
>>> log.Println("WafConn Err :", err.Error())                       return nil, 
>>> err         }               dataLen, err := c.GetLength(head)               
>>>
>>> //omit some exception handler                       _, err = 
>>> io.ReadFull(c.TcpConn, c.dataBuf[WafBaseHeaderLen: 
>>> WafBaseHeaderLen+dataLen])          if err != nil {                 
>>> log.Println("WafConn Err :", err.Error())                       return nil, 
>>> err         }               msg = &conncodec.WafMessage{            }       
>>>         err = msg.Decode(c.dataBuf[:WafBaseHeaderLen + dataLen])            
>>>     return msg, err }
>>>
>>>
>>>
>>>  channel init 
>>>
>>> waf_resp := make(chan WafProxyResp, 1)
>>>
>>> waiting channel read event code: 
>>>
>>>     select {        case result := <-waf_resp:                      *//do 
>>> something*        case <-timer.C:  //10 ms timeout                
>>> this.request_cache.DisposeRequest(request_id)           
>>> monitor.QPSStatAddWafRecvTimeout(1)                             return 
>>> GenWafResp(WAF_SUCCESS, "receive time out")      }
>>>
>>>
>>> Send Channel Code :
>>>
>>>     select {                case resp_chan <- resp:                 
>>> //只使用一次,写入完成后关闭;                        close(resp_chan)                
>>> default:                        log.Print("Default fail !!!!! request id : 
>>> ", request_id)               }
>>>
>>>
>>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to