summaryrefslogtreecommitdiffstats
path: root/sys/geom/geom_io.c
Commit message (Collapse)AuthorAgeFilesLines
* Add KTR_GEOM, which allows tracing of basic GEOM I/O events occuringrwatson2004-10-211-0/+26
| | | | | | in the g_up and g_down threads. Each time a bio is propelled up and down the stack, an event is generating showing the provider, offset, and length, as well as thread wakeup and work status information.
* Trace information about a buffer while we still control it.ups2004-10-111-2/+3
| | | | | Reviewed by: phk Approved by: sam (mentor)
* Don't set the BIO_ONQUEUE debugging flag until we actually put the biophk2004-10-061-1/+1
| | | | onto a queue. This made the ENOMEM handling an instant panic.
* Protect the start/end counts on consumers and providers with the up/downphk2004-09-281-28/+40
| | | | | | | mutexes. Make it possible to also protect the disk statistics (at a minor cost in performance) by setting bit 2 of kern.geom.collectstats.
* - Set maximum request size to MAXPHYS (128kB), instead of DFLPHYS (64kB).pjd2004-09-281-4/+6
| | | | | | - Set minimum request size to sectorsize, instead of 512 bytes. Approved by: phk (some time ago)
* Add more KASSERTS and checks.phk2004-08-301-0/+21
|
* Introduce g_alloc_bio() as a waiting variant of g_new_bio().phk2004-08-271-3/+12
| | | | | | | Use in places where we can sleep and where we previously failed to check for a NULL pointer. MT5 candidate.
* When sending request once again because of ENOMEM, reset bio_childrenpjd2004-08-111-0/+2
| | | | | | | | | | and bio_inbed fields to 0. Without this change we can end up with I/O leakage in some rare situations. I tested this change by putting failure probability mechanism simlar to this used in NOP class into g_clone_bio(9) function, so it was able to return NULL with the given probability. Discussed with: phk
* The g_up and g_down threads use a local 'mymutex' mutex to allow WITNESSrwatson2004-06-261-0/+16
| | | | | | | | to warn about attempts to sleep in the I/O path. This change pushes the definition and use of 'mymutex' behind #ifdef WITNESS to avoid the cost in non-debugging cases. This results in a clear .22% performance win for 512 byte and 1k I/O tests on my SMP test box. Not much, but every bit counts.
* Make the sysctl kern.geom.collectstats more granular.phk2004-06-091-8/+8
| | | | | | | | | Bit 0 controls statistics collection on GEOM providers. Bit 1 controls statistics collection on GEOM consumers. Default value is 1. Prodded by: scottl
* Calculate bio_completed properly or die!pjd2004-04-041-0/+3
| | | | Approved by: phk
* Added g_print_bio() function to print informations about given bio.pjd2004-02-111-0/+34
| | | | Approved by: phk, scottl (mentor)
* Bring back the geom_bioqueues, they _are_ a good idea.phk2004-01-281-0/+27
| | | | ATA will uses these RSN.
* Correct usage of mtx_init() API. This is not a functional change sincetruckman2003-12-071-2/+2
| | | | | | the code happened to work because MTX_DEF and NULL are both defined as 0. Reviewed by: phk
* Forgotten commit: If a provider has zero sectorsize, it is anphk2003-10-221-6/+3
| | | | | | indication of lack of media. Tripped up: peter
* Remove KASSERT check for negative bio_offsets, add "normal" EIOphk2003-10-191-1/+3
| | | | error return for same.
* Allow our bio tools to be used for local bio-chopping by not mandatingphk2003-10-061-2/+7
| | | | | a bio_from value. bio_to is still mandated (mostly for debuggign) and shall be copied from the parent bio.
* Add more KASSERTS().phk2003-09-261-0/+6
|
* Reorder a couple of KASSERTS to give more sensible messages.phk2003-09-111-2/+2
| | | | Found by: GEOM 101 class of '03
* In case we encounter a zero sectorsize provider in g_io_check(), failphk2003-08-131-0/+6
| | | | the request with a printf rather than a divide by zero error.
* Sleep on "-" in our normal state to simplify debugging.phk2003-06-181-2/+2
|
* Use __FBSDID().obrien2003-06-111-2/+2
| | | | Approved by: phk
* Hide the "ENOMEM" notice messages behind bootverbose. They are stillphk2003-05-071-1/+2
| | | | | | a valuable debugging tool for certain kinds of problems. Approved by: re/scottl
* Use an uma-zone for allocation bio requests.phk2003-05-021-13/+10
|
* Back out all the stuff that didn't belong in the last commit.phk2003-05-021-7/+1
|
* Use g_slice_spoiled() rather than g_std_spoiled().phk2003-05-021-1/+7
| | | | Remember to free the buffer we got from g_read_data().
* Time has run from the "run GEOM in userland" harness, and the new regressionphk2003-04-131-9/+0
| | | | | | | test is built to test GEOM as running in the kernel. This commit is basically "unifdef -D_KERNEL" to remove the mainly #include related code to support the userland-harness.
* Retire the experimental bio_taskqueue(), it was not quite as usable asphk2003-04-121-27/+0
| | | | | hoped. It can be revived from here, should other drivers be able to use it.
* Remove all references to BIO_SETATTR. We will not be using it.phk2003-04-031-21/+0
|
* Fix a bug in the ENOMEM pacing code which probably made it panic systemsphk2003-03-291-4/+4
| | | | after a lot of ENOMEM errors.
* Retire the GEOM private statistics code and use devstat instead.phk2003-03-181-61/+7
|
* Including <sys/stdint.h> is (almost?) universally only to be able to usephk2003-03-181-1/+0
| | | | | %j in printfs, so put a newsted include in <sys/systm.h> where the printf prototype lives and save everybody else the trouble.
* Don't abuse the statistics counters for detecting if we have outstandingphk2003-03-091-6/+10
| | | | | I/O requests, instead use the new dedicated fields in the consumer and provider to track this.
* Back out M_* changes, per decision of the TRB.imp2003-02-191-1/+1
| | | | Approved by: trb
* Implement a bio-taskqueue to reduce number of context switches inphk2003-02-111-11/+56
| | | | | | | | | | | | | | | | | | | | disk I/O processing. The intent is that the disk driver in its hardware interrupt routine will simply schedule the bio on the task queue with a routine to finish off whatever needs done. The g_up thread will then schedule this routine, the likely outcome of which is a biodone() which queues the bio on g_up's regular queue where it will be picked up and processed. Compared to the using the regular taskqueue, this saves one contextswitch. Change our scheduling of the g_up and g_down queues to be water-tight, at the cost of breaking the userland regression test-shims. Input and ideas from: scottl
* Don't short-circuit zero-length requests of they are BIO_[SG]ETATTR.phk2003-02-111-10/+18
|
* Turn the "updating" flag (back) into two sequence number fields atphk2003-02-111-4/+4
| | | | | either ends of the structure so we have a way to determine if a snapshot is consistent.
* Update the statistics collection code to track busy time instead ofphk2003-02-091-39/+41
| | | | | | | | | | idle time. Statistics now default to "on" and can be turned off with sysctl kern.geom.collectstats=0 Performance impact of statistics collection is on the order of 800 nsec per consumer/provider set on a 700MHz Athlon.
* Move the g_stat struct to its own .h file, we will export it to other code.phk2003-02-081-22/+23
| | | | | | | | | | | | | | | | | | Insted of embedding a struct g_stat in consumers and providers, merely include a pointer. Remove a couple of <sys/time.h> includes now unneeded. Add a special allocator for struct g_stat. This allocator will allocate entire pages and hand out g_stat functions from there. The "id" field indicates free/used status. Add "/dev/geom.stats" device driver whic exports the pages from the allocator to userland with mmap(2) in read-only mode. This mmap(2) interface should be considered a non-public interface and the functions in libgeom (not yet committed) should be used to access the statistics data.
* Commit the correct copy of the g_stat structure.phk2003-02-071-23/+80
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add debug.sizeof.g_stat sysctl. Set the id field of the g_stat when we create consumers and providers. Remove biocount from consumer, we will use the counters in the g_stat structure instead. Replace one field which will need to be atomically manipulated with two fields which will not (stat.nop and stat.nend). Change add companion field to bio_children: bio_inbed for the exact same reason. Don't output the biocount in the confdot output. Fix KASSERT in g_io_request(). Add sysctl kern.geom.collectstats defaulting to off. Collect the following raw statistics conditioned on this sysctl: for each consumer and provider { total number of operations started. total number of operations completed. time last operation completed. sum of idle-time. for each of BIO_READ, BIO_WRITE and BIO_DELETE { number of operations completed. number of bytes completed. number of ENOMEM errors. number of other errors. sum of transaction time. } } API for getting hold of these statistics data not included yet.
* Rename bio_linkage to the more obvious bio_parent.phk2003-02-071-1/+1
| | | | Add bio_t0 timestamp, and include <sys/time.h> where needed
* Put the checks we perform on a bio before calling ::start in theirphk2003-02-061-69/+59
| | | | | own function, handle all validation and truncation at the time we process the bio instead of when it gets scheduled.
* Remove M_TRYWAIT/M_WAITOK/M_WAIT. Callers should use 0.alfred2003-01-211-1/+1
| | | | Merge M_NOWAIT/M_DONTWAIT into a single flag M_NOWAIT.
* white-space changesphk2002-12-261-2/+4
|
* Balk at unaligned requests.phk2002-12-181-0/+10
| | | | MFC candidate.
* malloc(9) with M_NOWAIT seems to return NULL a lot more than I would havephk2002-11-021-0/+14
| | | | | | | | | | | | | | | | | expected under -current. This is a problem for GEOM because the up/down threads cannot sleep waiting for memory to become free. The reason they cannot sleep is that paging things out to disk may be the only way we can clear up some RAM. Nice catch-22 there. Implement a rudimentary ENOMEM recovery strategy: If an I/O request fails with an error code of ENOMEM, schedule it for a retry, and tell the down-thread to sleep hz/10 to get other parts of the system a chance to free up some memory, in particular the up-path in GEOM. All caches should probably start to monitor malloc(9) failures using the new malloc_last_fail() function, and release when it indicates congestion. Sponsored by: DARPA & NAI Labs.
* Don't track bio allocation in debug output.phk2002-10-201-5/+7
| | | | Sponsored by: DARPA & NAI Labs.
* Add more KASSERTS.phk2002-10-141-1/+7
| | | | Sponsored by: DARPA & NAI Labs.
* Add support g_clone_bio() and g_std_done() to spawn multiple childrenphk2002-10-091-0/+1
| | | | | | of a bio and correctly gather status when done. Sponsored by: DARPA & NAI Labs.
* For now, don't wait for drives to stop returning EBUSY. There is toophk2002-10-081-35/+26
| | | | | | much broken harware around it seems. Sponsored by: DARPA & NAI Labs.
OpenPOWER on IntegriCloud