[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