#
5786be7c |
| 09-Aug-2006 |
Alan Cox <alc@FreeBSD.org> |
Introduce a field to struct vm_page for storing flags that are synchronized by the lock on the object containing the page.
Transition PG_WANTED and PG_SWAPINPROG to use the new field, eliminating th
Introduce a field to struct vm_page for storing flags that are synchronized by the lock on the object containing the page.
Transition PG_WANTED and PG_SWAPINPROG to use the new field, eliminating the need for holding the page queues lock when setting or clearing these flags. Rename PG_WANTED and PG_SWAPINPROG to VPO_WANTED and VPO_SWAPINPROG, respectively.
Eliminate the assertion that the page queues lock is held in vm_page_io_finish().
Eliminate the acquisition and release of the page queues lock around calls to vm_page_io_finish() in kern_sendfile() and vfs_unbusy_pages().
show more ...
|
#
ab83ac42 |
| 08-Aug-2006 |
Alan Cox <alc@FreeBSD.org> |
Reduce the scope of the page queues lock in vfs_busy_pages() now that vm_page_sleep_if_busy() no longer requires the caller to hold the page queues lock.
|
#
af51d7bf |
| 21-Jul-2006 |
Alan Cox <alc@FreeBSD.org> |
Eliminate OBJ_WRITEABLE. It hasn't been used in a long time.
|
Revision tags: release/5.5.0_cvs, release/5.5.0, release/6.1.0_cvs, release/6.1.0 |
|
#
4b24e421 |
| 04-Apr-2006 |
Jeff Roberson <jeff@FreeBSD.org> |
- Properly check against B_DELWRI and B_NEEDSGIANT. This check was incorrectly written and caused some !NEEDSGIANT buffers to be put in the NEEDSGIANT queue.
Sponsored by: Isilon Systems, Inc.
|
#
084d64ac |
| 31-Mar-2006 |
Jeff Roberson <jeff@FreeBSD.org> |
- Add the B_NEEDSGIANT flag which is only set if the vnode that owns a buf requires Giant. It is set in bgetvp and cleared in brelvp. - Create QUEUE_DIRTY_GIANT for dirty buffers that require gi
- Add the B_NEEDSGIANT flag which is only set if the vnode that owns a buf requires Giant. It is set in bgetvp and cleared in brelvp. - Create QUEUE_DIRTY_GIANT for dirty buffers that require giant. - In the buf daemon, only grab giant when processing QUEUE_DIRTY_GIANT and only if we think there are buffers in that queue.
Sponsored by: Isilon Systems, Inc.
show more ...
|
#
96c0381f |
| 22-Mar-2006 |
Pawel Jakub Dawidek <pjd@FreeBSD.org> |
Destroy "bip" bio in error case.
Found by: Coverity Prevent analysis tool Coverity ID: 795 MFC after: 3 days
|
#
c7822632 |
| 02-Feb-2006 |
Tor Egge <tegge@FreeBSD.org> |
For low memory situations, non-VMIO buffers didnt't release pages back to the system when brelse() was called with B_RELBUF set on the buffer. This could be a problem when the system was low on memo
For low memory situations, non-VMIO buffers didnt't release pages back to the system when brelse() was called with B_RELBUF set on the buffer. This could be a problem when the system was low on memory, had many buffers on QUEUE_EMPTYKVA and started to traverse directories. For each getnewbuf(), pages were allocated from the system, driving the free reserve downwards. For each brelse(), the system put the buffer on QUEUE_CLEAN, with B_INVAL set.
This commit changes the semantics of B_RELBUF to also free pages from non-VMIO buffers.
Reviewed by: alc
show more ...
|
#
bb53e2bf |
| 23-Jan-2006 |
Alan Cox <alc@FreeBSD.org> |
Remove an unnecessary call to pmap_remove_all(). The given page is not mapped because its contents are invalid.
Reviewed by: tegge
|
#
dffaf91a |
| 16-Jan-2006 |
Tor Egge <tegge@FreeBSD.org> |
Set flag in needsbuffer while still holding bqlock to avoid lost wakeup.
|
#
ef39c05b |
| 31-Dec-2005 |
Alexander Leidinger <netchild@FreeBSD.org> |
MI changes: - provide an interface (macros) to the page coloring part of the VM system, this allows to try different coloring algorithms without the need to touch every file [1] - make the pa
MI changes: - provide an interface (macros) to the page coloring part of the VM system, this allows to try different coloring algorithms without the need to touch every file [1] - make the page queue tuning values readable: sysctl vm.stats.pagequeue - autotuning of the page coloring values based upon the cache size instead of options in the kernel config (disabling of the page coloring as a kernel option is still possible)
MD changes: - detection of the cache size: only IA32 and AMD64 (untested) contains cache size detection code, every other arch just comes with a dummy function (this results in the use of default values like it was the case without the autotuning of the page coloring) - print some more info on Intel CPU's (like we do on AMD and Transmeta CPU's)
Note to AMD owners (IA32 and AMD64): please run "sysctl vm.stats.pagequeue" and report if the cache* values are zero (= bug in the cache detection code) or not.
Based upon work by: Chad David <davidc@acns.ab.ca> [1] Reviewed by: alc, arch (in 2004) Discussed with: alc, Chad David, arch (in 2004)
show more ...
|
#
6951bea6 |
| 07-Dec-2005 |
Craig Rodrigues <rodrigc@FreeBSD.org> |
Changes imported from XFS for FreeBSD project: - add fields to struct buf (needed by XFS) - 3 private fields: b_fsprivate1, b_fsprivate2, b_fsprivate3 - b_pin_count, count of pinned buffer
-
Changes imported from XFS for FreeBSD project: - add fields to struct buf (needed by XFS) - 3 private fields: b_fsprivate1, b_fsprivate2, b_fsprivate3 - b_pin_count, count of pinned buffer
- add new B_MANAGED flag - add breada() function to initiate asynchronous I/O on read-ahead blocks. - add bufdone_finish(), bpin(), bunpin_wait() functions
Patches provided by: kan Reviewed by: phk Silence on: arch@
show more ...
|
Revision tags: release/6.0.0_cvs, release/6.0.0 |
|
#
5bb84bc8 |
| 31-Oct-2005 |
Robert Watson <rwatson@FreeBSD.org> |
Normalize a significant number of kernel malloc type names:
- Prefer '_' to ' ', as it results in more easily parsed results in memory monitoring tools such as vmstat.
- Remove punctuation that i
Normalize a significant number of kernel malloc type names:
- Prefer '_' to ' ', as it results in more easily parsed results in memory monitoring tools such as vmstat.
- Remove punctuation that is incompatible with using memory type names as file names, such as '/' characters.
- Disambiguate some collisions by adding subsystem prefixes to some memory types.
- Generally prefer lower case to upper case.
- If the same type is defined in multiple architecture directories, attempt to use the same name in additional cases.
Not all instances were caught in this change, so more work is required to finish this conversion. Similar changes are required for UMA zone names.
show more ...
|
#
8272da31 |
| 10-Oct-2005 |
Tor Egge <tegge@FreeBSD.org> |
Release clean buffer with wrong size and no dependencies also for non-VMIO case.
|
#
bd3c2d86 |
| 30-Sep-2005 |
Don Lewis <truckman@FreeBSD.org> |
Un-staticize waitrunningbufspace() and call it before returning from ffs_copyonwrite() if any async writes were launched.
Restore the threads previous TDP_NORUNNINGBUF state before returning from ff
Un-staticize waitrunningbufspace() and call it before returning from ffs_copyonwrite() if any async writes were launched.
Restore the threads previous TDP_NORUNNINGBUF state before returning from ffs_copyonwrite().
show more ...
|
#
6c8b634f |
| 30-Sep-2005 |
Don Lewis <truckman@FreeBSD.org> |
Un-staticize runningbufwakeup() and staticize updateproc.
Add a new private thread flag to indicate that the thread should not sleep if runningbufspace is too large.
Set this flag on the bufdaemon
Un-staticize runningbufwakeup() and staticize updateproc.
Add a new private thread flag to indicate that the thread should not sleep if runningbufspace is too large.
Set this flag on the bufdaemon and syncer threads so that they skip the waitrunningbufspace() call in bufwrite() rather than than checking the proc pointer vs. the known proc pointers for these two threads. A way of preventing these threads from being starved for I/O but still placing limits on their outstanding I/O would be desirable.
Set this flag in ffs_copyonwrite() to prevent bufwrite() calls from blocking on the runningbufspace check while holding snaplk. This prevents snaplk from being held for an arbitrarily long period of time if runningbufspace is high and greatly reduces the contention for snaplk. The disadvantage is that ffs_copyonwrite() can start a large amount of I/O if there are a large number of snapshots, which could cause a deadlock in other parts of the code.
Call runningbufwakeup() in ffs_copyonwrite() to decrement runningbufspace before attempting to grab snaplk so that I/O requests waiting on snaplk are not counted in runningbufspace as being in-progress. Increment runningbufspace again before actually launching the original I/O request.
Prior to the above two changes, the system could deadlock if enough I/O requests were blocked by snaplk to prevent runningbufspace from falling below lorunningspace and one of the bawrite() calls in ffs_copyonwrite() blocked in waitrunningbufspace() while holding snaplk.
See <http://www.holm.cc/stress/log/cons143.html>
show more ...
|
#
d41c4674 |
| 29-Sep-2005 |
Peter Edwards <peadar@FreeBSD.org> |
Close a race in biodone(), whereby the bio_done field of the passed bio may have been freed and reassigned by the wakeup before being tested after releasing the bdonelock.
There's a non-zero chance
Close a race in biodone(), whereby the bio_done field of the passed bio may have been freed and reassigned by the wakeup before being tested after releasing the bdonelock.
There's a non-zero chance this is the cause of a few of the crashes knocking around with biodone() sitting in the stack backtrace.
Reviewed By: phk@
show more ...
|
#
9e2aaec1 |
| 03-Aug-2005 |
Jeff Roberson <jeff@FreeBSD.org> |
- Use lockmgr_printinfo rather than rolling our own. This introduces a slight problem by using printf instead of db_printf however 'show lockedvnods' does the same so I believe it is ok for no
- Use lockmgr_printinfo rather than rolling our own. This introduces a slight problem by using printf instead of db_printf however 'show lockedvnods' does the same so I believe it is ok for now.
show more ...
|
#
ec9c9e73 |
| 20-Jul-2005 |
Alan Cox <alc@FreeBSD.org> |
Eliminate inconsistency in the setting of the B_DONE flag. Specifically, make the b_iodone callback responsible for setting it if it is needed. Previously, it was set unconditionally by bufdone() wi
Eliminate inconsistency in the setting of the B_DONE flag. Specifically, make the b_iodone callback responsible for setting it if it is needed. Previously, it was set unconditionally by bufdone() without holding whichever lock is shared by the b_iodone callback and the corresponding top-half function. Consequently, in a race, the top-half function could conclude that operation was done before the b_iodone callback finished. See, for example, aio_physwakeup() and aio_fphysio().
Note: I don't believe that the other, more widely-used b_iodone callbacks are affected.
Discussed with: jeff Reviewed by: phk MFC after: 2 weeks
show more ...
|
#
7a06fe49 |
| 14-Jun-2005 |
Jeff Roberson <jeff@FreeBSD.org> |
- Add and enhance asserts related to the wrong bufobj panic.
Sponsored by: Isilon Systems, Inc. Approved by: re (blanket vfs)
|
#
748c92fb |
| 13-Jun-2005 |
Jeff Roberson <jeff@FreeBSD.org> |
- Split one KASSERT in bremfree() into two to aid in debugging.
Sponsored by: Isilon Systems, Inc.
|
#
cc3149b1 |
| 11-Jun-2005 |
Brian Feldman <green@FreeBSD.org> |
Fix a serious deadlock with the NFS client. Given a large enough atomic write request, it can fill the buffer cache with the entirety of that write in order to handle retries. However, it never dro
Fix a serious deadlock with the NFS client. Given a large enough atomic write request, it can fill the buffer cache with the entirety of that write in order to handle retries. However, it never drops the vnode lock, or else it wouldn't be atomic, so it ends up waiting indefinitely for more buf memory that cannot be gotten as it has it all, and it waits in an uncancellable state.
To fix this, hibufspace is exported and scaled to a reasonable fraction. This is used as the limit of how much of an atomic write request by the NFS client will be handled asynchronously. If the request is larger than this, it will be turned into a synchronous request which won't deadlock the system. It's possible this value is far off from what is required by some, so it shall be tunable as soon as mount_nfs(8) learns of the new field.
The slowdown between an asynchronous and a synchronous write on NFS appears to be on the order of 2x-4x.
General nod by: gad MFC after: 2 weeks More testing: wes PR: kern/79208
show more ...
|
#
a3d239bc |
| 09-Jun-2005 |
Jeff Roberson <jeff@FreeBSD.org> |
- My sub-par public school education has been exposed. s/sentinal/sentinel/
Noticed by: Emil Mikulic
|
#
9e879a5e |
| 08-Jun-2005 |
Jeff Roberson <jeff@FreeBSD.org> |
- Under heavy IO load the buf daemon can run for many hundereds of milliseconds due to what is essentially n^2 algorithmic complexity. This change makes the algorithm N*2 instead. This heavy
- Under heavy IO load the buf daemon can run for many hundereds of milliseconds due to what is essentially n^2 algorithmic complexity. This change makes the algorithm N*2 instead. This heavy processing manifested itself as skipping in audio and video playback due to the long scheduling latencies and contention on giant by pcm. - flushbufqueues() is now responsible for flushing multiple buffers rather than one at a time. This allows us to save our progress in the list by using a sentinal. We must do the numdirtywakeup() and waitrunningbufspace() here now rather than in buf_daemon(). - Also add a uio_yield() after we have processed the list once for bufs without deps and again for bufs with deps. This is to release Giant and allow any other giant locked code to proceed.
Tested by: Many users on current@ Revealed by: schedgraph traces sent by Emil Mikulic & Anthony Ginepro
show more ...
|
#
1f22a07a |
| 30-May-2005 |
Jeff Roberson <jeff@FreeBSD.org> |
- Add bufobj_wrefl() to add a write ref to a bufobj that is already locked.
|
Revision tags: release/5.4.0_cvs, release/5.4.0 |
|
#
4a723b36 |
| 30-Apr-2005 |
Jeff Roberson <jeff@FreeBSD.org> |
- Remove long dead splbio() calls and comments relating to the old synchronization mechanism.
|