Squid hiperformance
From NuclearCat's homepage
Reached
- 2000 req/s with globax onboard, COSS enabled
CFQ
CFQ Tunables
* back_seek_max (in KB) -- Primarily, CFQ tries to fulfill requests in one direction only, but it also provides support for handling requests in the other direction. This parameter specifies how much it can seek backward to fulfill requests rather than handling forward requests, but it comes with a penalty (defined by back_seek_penalty). The default value is 16384 (16MB). * back_seek_penalty (in numbers) -- This defines how much penalty is given to backward requests. For example, given two requests of the same distance, if one goes forward and the other goes backward, then after multiplying the back_seek_penalty to the backward distance, it becomes greater than the forward distance. Therefore, the forward request is serviced. The default value here is 2, which means the backward request will be served only if the backward request's distance is less than half of the forward request's distance. * fifo_expire_sync (in milliseconds) -- This parameter defines the expiration time of synchronous requests. The queued request is sent to the block driver's queue after pending longer than this expiry time. The default value is 124. * fifo_expire_async (in milliseconds) -- This is quite similar to the fifo_expire_sync value, except it defines the expiration time for asynchronous requests. The default value is 248. * quantum (in terms of requests) -- This tells scheduler the maximum number of requests to dispatch to the device queue. The default is 4. * slice_sync (in milliseconds) -- This parameter defines the amount of time the scheduler will spend on sending synchronous requests to the device request queue. The default is 100. * slice_async (in milliseconds) -- This is the same as slice_sync but for synchronous request handling. Its default value is 40. Asynchronous I/O is usually given less slice because it doesn't block the process. * slice_async_rq (in number of requests) -- It defines how many asynchronous requests are dispatched to the device whenever slice_async expires. However, the actual number of requests dispatched is calculated according to priority using this value as the base request number. Thus, requests dispatched will be at least the number specified here. The default value is 2. * slice_idle (in milliseconds) -- CFQ provides support of idle I/O priority. If a process has idle priority, then it will get disk time when other processes are not asking for disk. This value defines the time for dispatching requests with idle priority. The default value is 8 ms.
Must be equal NCQ/TCQ depth? echo 128 >/sys/block/sdd/queue/iosched/quantum echo 1024>/sys/block/sdd/queue/iosched/fifo_expire_async echo 1024>/sys/block/sdd/queue/iosched/fifo_expire_sync echo 32>/sys/block/sdd/queue/iosched/slice_async echo 32>/sys/block/sdd/queue/iosched/slice_sync
other
Recommended
- Tickless kernel
- deadline or anticipatory scheduler. CFQ have 20-30% worse performance, and on the edge of disk performance you will face "dead" times, when squid will not respond.
- ulimit -n 10240 and higher
- increase to net.ipv4.tcp_max_syn_backlog = 10240
- zero_buffers off
- if ext3 - change commit to much higher value. xfs - change logbufs (logbsize)
