[Disksim-users] process fairness

YipKei Kwok yipkeikwok at gmail.com
Mon Apr 30 00:20:58 EDT 2007


Hi,

Currently, Disksim reports disk performance statistics such as access
time and transfer time in an aggregated manner, instead of in a
per-process basis.

I have modified Disksim so that per-process disk statistics could be
shown. However, the problem is that, even though the processes are
absolutely identical (except pid, of course), some processes generates
almost 3 times more requests than others, when internal synthesized
workload is used, while I believe that identical, or almost, number of
requests should be generated by each process.

Here is a brief description (w./ some details omitted) on how I implement it.

disksim_global.h
- create a new member in the structure ioreq_event

disksim_synthio.c: synthio_appendio()
- copy pid from process *procp to ioreq_event *new

disksim_diskctlr.c: disk_buffer_sector_done()
- extract pid from ioreq_event *curr
- then, pass the pid to disk_buffer_request_complete()
Note: the same for disk_got_remapped_sector()

disksim_ctlr.c: disk_buffer_request_complete()
- add the new parameter: int pid
- pass pid to disk_acctimestats()

disksim_disk.c: disk_acctimestats()
- add the new parameter: int pid

Here is the configuration of each process.
     disksim_synthgen { # generator 3
       Storage capacity per device  =  8224032,
       devices = [ org0 ],
       Blocking factor =  8,
       Probability of sequential access =  0.2,
       Probability of local access =  0.3,
       Probability of read access =  0.5,
       Probability of time-critical request =  0.1,
       Probability of time-limited request =  0.3,
       Time-limited think times  = [ normal, 30.0, 100.0  ],
       General inter-arrival times  = [ exponential, 0.0, 10.0  ],
       Sequential inter-arrival times  = [ exponential, 0.0, 10.0  ],
       Local inter-arrival times  = [ exponential, 0.0, 10.0  ],
       Local distances  = [ normal, 0.0, 40000.0  ],
       Sizes  = [ exponential, 0.0, 8.0  ]
     } # end of generator 3

System topology: RAID 0 with 4 disks.

Number of simulated processes: 4

Here are the results (results are repeatable):
1. "Number of I/O requests to generate = 20
process1: 3 requests, process 2: 5requests, process 3: 8requests,
process 4: 1 requests

2. "Number of I/O requests to generate = 30
process1: 6 reqs, process 2: 11 reqs, process 3: 16 reqs, process 4: 1 reqs

3. "Number of I/O requests to generate = 40
process1: 9 reqs, process 2: 22 reqs, process 3: 31 reqs, process 4: 3 reqs

4. "Number of I/O requests to generate = 1000
process1: 132 reqs, process 2: 237 reqs, process 3: 399 reqs, process
4: 112 reqs

5. "Number of I/O requests to generate = 100000
process1: 13544 reqs, process 2: 22985 reqs, process 3: 38455 reqs,
process 4: 11420 reqs

My questions are:
1. Am I doing it in a right way? Or, is there any better way?
2. Does anyone encounter the same problem?
3. How can I fix it? Any suggestion?

Thanks!

-Yipkei

-- 
Web site:
http://360.yahoo.com/yipkeikwok
http://www.mcs.csueastbay.edu/~ykwok/
email addresses:
yipkeikwok at gmail dot com
ykwok2 at utep dot edu
ICQ UIN:    2309842
Google Talk ID:    yipkeikwok at gmail dot com
Yahoo! Messenger ID:    yipkeikwok
MSN Messenger ID:    yipkeikwok at hotmail dot com



More information about the Disksim-users mailing list