#
328086 |
|
17-Jan-2018 |
markj |
MFC r327768: Clarify the use of the gmirror flag mask constants.
|
#
327493 |
|
02-Jan-2018 |
markj |
MFC r326983: Avoid using bioq_* in gmirror.
|
#
327070 |
|
21-Dec-2017 |
markj |
MFC r326409: Update gmirror metadata less frequently when synchronizing.
|
#
326696 |
|
08-Dec-2017 |
markj |
MFC r302794, r306744, r307691, r307692, r316174, r316681, r316859, r316866, r316867, r316869: Various gmirror fixes and cleanups.
|
#
326530 |
|
04-Dec-2017 |
markj |
MFC r326132: Allow kern.geom.mirror.debug to be negative.
|
#
324588 |
|
13-Oct-2017 |
avg |
MFC r323612: gmirror: treat ENXIO as disk disconnect, not media error
|
#
318752 |
|
23-May-2017 |
mav |
MFC r309321: Add `gmirror create` subcommand, alike to gstripe, gconcat, etc.
It is quite specific mode of operation without storing on-disk metadata. It can be useful in some cases in combination with some external control tools handling mirror creation and disks hot-plug.
Sponsored by: iXsystems, Inc.
|
#
309205 |
|
26-Nov-2016 |
mav |
MFC r308608: Use providergone method to cover race between destroy and g_access().
|
#
307665 |
|
20-Oct-2016 |
mav |
MFC r306762: Fix possible geom destruction before final provider close.
Introduce internal counter to track opens. Using provider's counters is not very successfull after calling g_wither_provider().
|
#
302408 |
|
07-Jul-2016 |
gjb |
Copy head@r302406 to stable/11 as part of the 11.0-RELEASE cycle. Prune svn:mergeinfo from the new branch, as nothing has been merged here.
Additional commits post-branch will follow.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation |
#
259929 |
|
27-Dec-2013 |
ae |
Add an ability to stop gmirror and clear its metadata in one command. This fixes the problem, when gmirror starts again just after stop.
The problem occurs when gmirror's component has geom label with equal size. E.g. gpt and gptid have the same size as partition, diskid has the same size as entire disk. When gmirror's geom has been destroyed, glabel creates its providers and this initiate retaste.
Now "gmirror destroy" command is available. It destroys geom and also erases gmirror's metadata.
MFC after: 2 weeks
|
#
256880 |
|
22-Oct-2013 |
mav |
Merge GEOM direct dispatch changes from the projects/camlock branch.
When safety requirements are met, it allows to avoid passing I/O requests to GEOM g_up/g_down thread, executing them directly in the caller context. That allows to avoid CPU bottlenecks in g_up/g_down threads, plus avoid several context switches per I/O.
The defined now safety requirements are: - caller should not hold any locks and should be reenterable; - callee should not depend on GEOM dual-threaded concurency semantics; - on the way down, if request is unmapped while callee doesn't support it, the context should be sleepable; - kernel thread stack usage should be below 50%.
To keep compatibility with GEOM classes not meeting above requirements new provider and consumer flags added: - G_CF_DIRECT_SEND -- consumer code meets caller requirements (request); - G_CF_DIRECT_RECEIVE -- consumer code meets callee requirements (done); - G_PF_DIRECT_SEND -- provider code meets caller requirements (done); - G_PF_DIRECT_RECEIVE -- provider code meets callee requirements (request). Capable GEOM class can set them, allowing direct dispatch in cases where it is safe. If any of requirements are not met, request is queued to g_up or g_down thread same as before.
Such GEOM classes were reviewed and updated to support direct dispatch: CONCAT, DEV, DISK, GATE, MD, MIRROR, MULTIPATH, NOP, PART, RAID, STRIPE, VFS, ZERO, ZFS::VDEV, ZFS::ZVOL, all classes based on g_slice KPI (LABEL, MAP, FLASHMAP, etc).
To declare direct completion capability disk(9) KPI got new flag equivalent to G_PF_DIRECT_SEND -- DISKFLAG_DIRECT_COMPLETION. da(4) and ada(4) disk drivers got it set now thanks to earlier CAM locking work.
This change more then twice increases peak block storage performance on systems with manu CPUs, together with earlier CAM locking changes reaching more then 1 million IOPS (512 byte raw reads from 16 SATA SSDs on 4 HBAs to 256 user-level threads).
Sponsored by: iXsystems, Inc. MFC after: 2 months
|
#
237930 |
|
01-Jul-2012 |
glebius |
Make geom_mirror more friendly to SSDs. To properly support TRIM, we need to pass BIO_DELETE requests down to providers that support it. Also, we need to announce our support for BIO_DELETE to upper consumer. This requires:
- In g_mirror_start() return true for "GEOM::candelete" request. - In g_mirror_init_disk() probe below provider for "GEOM::candelete" attribute, and mark disk with a flag if it does support BIO_DELETE. - In g_mirror_register_request() distribute BIO_DELETE requests only to those disks, that do support it.
Note that we announce "GEOM::candelete" as true unconditionally of whether we have TRIM-capable media down below or not. This is made intentionally, because upper consumer (usually UFS) requests the attribite only once at mount time. And if user ever migrates his mirror from HDDs to SSDs, then he/she would get TRIM working without remounting filesystem.
Reviewed by: pjd
|
#
235599 |
|
18-May-2012 |
ae |
Introduce new device flag G_MIRROR_DEVICE_FLAG_TASTING. It should protect geom from destroying while it is tasting.
PR: kern/154860 Reviewed by: pjd MFC after: 1 week
|
#
200086 |
|
03-Dec-2009 |
mav |
Change 'load' balancing mode algorithm: - Instead of measuring last request execution time for each drive and choosing one with smallest time, use averaged number of requests, running on each drive. This information is more accurate and timely. It allows to distribute load between drives in more even and predictable way. - For each drive track offset of the last submitted request. If new request offset matches previous one or close for some drive, prefer that drive. It allows to significantly speedup simultaneous sequential reads.
PR: kern/113885 Reviewed by: sobomax
|
#
163888 |
|
01-Nov-2006 |
pjd |
Now, that we have gjournal in the tree add possibility to configure gmirror and graid3 in a way that it is not resynchronized after a power failure or system crash. It is safe when gjournal is running on top of gmirror/graid3.
|
#
157630 |
|
10-Apr-2006 |
pjd |
Introduce and use delayed-destruction functionality from a pre-sync hook, which means that devices will be destroyed on last close.
This fixes destruction order problems when, eg. RAID3 array is build on top of RAID1 arrays.
Requested, reviewed and tested by: ru MFC after: 2 weeks
|
#
156878 |
|
19-Mar-2006 |
pjd |
Update copyright for 2006.
|
#
156610 |
|
12-Mar-2006 |
pjd |
- Speed up synchronization process by using configurable number of I/O requests in parallel. + Add kern.geom.mirror.sync_requests tunable which defines how many parallel I/O requests should be used. + Retire kern.geom.mirror.reqs_per_sync and kern.geom.mirror.syncs_per_sec sysctls. - Fix race between regular and synchronization requests. - Reimplement mirror's data synchronization - do not use the topology lock for this purpose, as it may case deadlocks. - Stop synchronization from pre-sync hook. - Fix some other minor issues.
MFC after: 3 days
|
#
155545 |
|
11-Feb-2006 |
pjd |
- Add kern.geom.mirror.disconnect_on_failure sysctl/tunnable (default to 1 to preserve currect behaviour). When set to 0, components are not disconnected - gmirror will try to still use them (only first error will be logged). This is helpful when we have two broken components, but in different places, so actually all data is available. Such buggy component will be visible in 'gmirror list' output with flag BROKEN. - Never disconnect the last valid component. If we detect errors there we will just pass them up. This wasn't reasonable to deny access to the whole provider because of one broken sector.
Prodded by: ru MFC after: 3 days
|
#
155539 |
|
11-Feb-2006 |
pjd |
Mark array as CLEAN when there are no write requests in kern.geom.mirror.idletime seconds. Write, not any requests. Mark array as clean immediatelly on last write close.
Prodded by: ru MFC after: 3 days
|
#
155174 |
|
01-Feb-2006 |
pjd |
Remove trailing spaces.
|
#
145305 |
|
19-Apr-2005 |
pjd |
Remove the hack which allowed to use gmirror for root file system, use root_mount KPI instead.
|
#
142727 |
|
27-Feb-2005 |
pjd |
- Add md_provsize field to metadata, which will help with shared-last-sector problem. After this change, even if there is more than one provider with the same last sector, the proper one will be chosen based on its size. It still doesn't fix the 'c' partition problem (when da0s1 can be confused with da0s1c) and situation when 'a' partition starts at offset 0 (then da0s1a can be confused with da0s1 and da0s1c). One can use '-h' option there, when creating device or avoid sharing last sector. Actually, when providers share the same last sector and their size is equal, they provide exactly the same data, so the name (da0s1, da0s1a, da0s1c) isn't important at all. - Provide backward compatibility. - Update copyright's year.
MFC after: 1 week
|
#
141994 |
|
16-Feb-2005 |
pjd |
Update copyright in files changed this year.
|
#
139670 |
|
04-Jan-2005 |
pjd |
Spoiling is now not possible, because we keep consumers open for writing all the time. Remove unused code then.
MFC after: 4 days
|
#
139650 |
|
03-Jan-2005 |
pjd |
Fix 'rebuild' command (we ignore retaste event now, so don't relay on it).
|
#
139213 |
|
22-Dec-2004 |
pjd |
- Add genid field to the metadata which will allow to improve reliability a bit. After this change, when component is disconnected because of an I/O error, it will not be connected and synchronized automatically, it will be logged as broken and skipped. Autosynchronization can occur, when component is disconnected (on orphan event) and connected again - there were no I/O error, so there is no need to not connected the component, but when there were writes while it wasn't connected, it will be synchronized. This fix cases, when component is disconnected because of I/O error and can be connected again and again. - Bump version number. - Add version change history. - Implement backward compatibility mechanism. After this change when metadata in old version is detected, it is automatically upgraded to the new (current) version.
|
#
137248 |
|
05-Nov-2004 |
pjd |
MFp4: - Fix for good (I hope) force-stopping mirrors and some filure cases (e.g. the last good component dies when synchronization is in progress). Don't use ->nstart/->nend consumer's fields, as this could be racy, because those fields are used in g_down/g_up, use ->index consumer's field instead for tracking number of not finished requests.
Reported by: marcel
- After 5 seconds of idle time (this should be configurable) mark all dirty providers as clean, so when mirror is not used in 5 seconds and there will be power failure, no synchronization on boot is needed.
Idea from: sorry, I can't find who suggested this
- When there are no ACTIVE components and no NEW components destroy whole mirror, not only provider.
- Fix one debug to show information about I/O request, before we change its command.
|
#
135872 |
|
28-Sep-2004 |
pjd |
Just use MAXPHYS as maximum I/O request size, instead of using my own #define for this purpose. No functional change.
|
#
135834 |
|
26-Sep-2004 |
pjd |
Forgot to commit addition of ds_resync field.
|
#
133530 |
|
11-Aug-2004 |
pjd |
MFp4: Simplify code a bit: - Remove kern.geom.mirror.sync_block_size sysctl. It is quite obvious that we want to use the biggest size possible. - Do not use UMA zone for sync data allocations. There could be only one synchronization request per synchronized disk at a time, so allocate memory for one request on whole synchronization process related to one disk.
Tested by synchronizing one component (out of three) and by synchronizing two components (out of three) in parallel.
|
#
133528 |
|
11-Aug-2004 |
pjd |
Actually, HARDCODED flag isn't stored in metadata, so don't bother dumping it.
|
#
133527 |
|
11-Aug-2004 |
pjd |
- Fix typo. - Dump HARDCODED flag.
|
#
133373 |
|
09-Aug-2004 |
pjd |
- Introduce option for hardcoding providers' names into metadata. It allows to fix problems when last provider's sector is shared between few providers. - Bump version number for CONCAT and STRIPE and add code for backward compatibility. - Do not bump version number of MIRROR, as it wasn't officially introduced yet. Even if someone started to play with it, there is no big deal, because wrong MD5 sum of metadata will deny those providers. - Update manual pages. - Add version history to g_(stripe|concat).h files.
|
#
133142 |
|
04-Aug-2004 |
pjd |
- Add two fields to bio structure: 'bio_cflags' which can be used by consumer and 'bio_pflags' which can be used by provider. - Remove BIO_FLAG1 and BIO_FLAG2 flags. From now on new fields should be used for internal flags. - Update g_bio(9) manual page. - Update some comments. - Update GEOM_MIRROR, which was the only one using BIO_FLAGs.
Idea from: phk Reviewed by: phk
|
#
133115 |
|
04-Aug-2004 |
pjd |
- Add "prefer" balance algorithm. When used, only disk with the biggest priority will be used for reading. - Bump version number.
|
#
132923 |
|
31-Jul-2004 |
pjd |
Remove unused field.
|
#
132904 |
|
30-Jul-2004 |
pjd |
Add GEOM_MIRROR class which provide RAID1 functionality and has many useful features. The gmirror(8) utility should be used for control of this class. There is no manual page yet, but I'm working on it with keramida@.
Many useful tests provided by: simon (thank you!) Some ideas from: scottl, simon, phk
|