рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ZFS - рднрд╛рдЧ 1: vdev

Vdev, рдпрд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдбрд┐рд╡рд╛рдЗрд╕, рд╡рд╣ рдореВрд▓ рдЗрдХрд╛рдИ рд╣реИ рдЬрд┐рд╕ рдкрд░ ZFS (zpool) рдбреЗрдЯрд╛ рдРрд░реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред ZFS рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдХрдо рд╕реЗ рдХрдо рдПрдХ vdev рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдЬреЛ рдмреНрд▓реЙрдХ рд╕реНрддрд░ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рддрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдкрд╣реБрдБрдЪ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЖрдорддреМрд░ рдкрд░, рдкреВрд░реЗ рдбрд┐рд╕реНрдХ рдпрд╛ iScsi / FC LUN (рд░реЙ-рдбрд┐рд╕реНрдХ vdev) рдХрд╛ рдЙрдкрдпреЛрдЧ рдРрд╕реЗ рдмреНрд▓реЙрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдбрд┐рд╕реНрдХ рд╡рд┐рднрд╛рдЬрди рдпрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрдкреВрд░реНрдг рдбрд┐рд╕реНрдХ рдмреЗрд╣рддрд░ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЬреЗрдбрдПрдлрдПрд╕ рдЙрдирдХреЗ рд▓рд┐рдП рдСрдирдмреЛрд░реНрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд▓реЗрдЦрди рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЗрд╕ рд╕рдордп рддрд╛рд░реНрдХрд┐рдХ vdev рдФрд░ рдкрддреНрддреА vdev рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ - рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╖рдп рд╣реИ рдХрд┐ рдХреИрд╕реЗ RAIDzN рдФрд░ zfs рджрд░реНрдкрдг рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
src.illumos.org/source/xref/illumos-gate/usr/src/uts/common/fs/zfs/vdev_disk.c#314
if (vd->vdev_wholedisk == 1) { int wce = 1; /* * If we own the whole disk, try to enable disk write caching. * We ignore errors because it's OK if we can't do it. */ (void) ldi_ioctl(dvd->vd_lh, DKIOCSETWCE, (intptr_t)&wce, FKIOCTL, kcred, NULL); } 

рд╡рд░реНрдЪреБрдЕрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╣рд░ рдХрд┐рд╕реА рдХреЛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рдирд╣реАрдВ рджреЗрдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ - рд▓реЗрдЦ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдпрд╣ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдХреИрд╕реЗ ZFS рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рд▓рд┐рдЦрддрд╛ рд╣реИред

рдкреНрд░рддреНрдпреЗрдХ vdev рдХреЛ рддрд╛рд░реНрдХрд┐рдХ рд╡рд┐рднрд╛рдЬрди (metaslab) рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ ZFS рдкреВрд▓ рдореЗрдВ рдПрдХ рдбрд┐рд╕реНрдХ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рднрд╛рдЬрди рдХреА рд╕рдВрдЦреНрдпрд╛ vdev рдХреЗ рдЖрдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ - рд▓рдЧрднрдЧ 200 рд╡рд┐рднрд╛рдЬрди, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ <128, рдФрд░> 256 рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
src.illumos.org/source/xref/illumos-gate/usr/src/uts/common/fs/zfs/vdev.c#1552
 void vdev_metaslab_set_size(vdev_t *vd) { /* * Aim for roughly 200 metaslabs per vdev. */ vd->vdev_ms_shift = highbit(vd->vdev_asize / 200); vd->vdev_ms_shift = MAX(vd->vdev_ms_shift, SPA_MAXBLOCKSHIFT); } 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддреНрдпреЗрдХ рдореЗрдЯрд╛рд╕реНрд▓реИрдм рдХреЗ рдЕрдВрджрд░ рдПрдХ рддрдерд╛рдХрдерд┐рдд рдЬрдЧрд╣ рдХрд╛ рдирдХреНрд╢рд╛ рд╣реЛрддрд╛ рд╣реИ - рд╕реНрдкреЗрд╕ рдореИрдкред рдпрд╣, рдЬреЗрдбрдПрдлрдПрд╕ рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рддрд░рд╣, рдПрд╡реАрдПрд▓ рдкреЗрдбрд╝ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдореЗрдЯрд╛рд╕рд▓реИрдм рдХреЗ рдЕрдВрджрд░ рдмреНрд▓реЙрдХ рдФрд░ рдЗрд╕рдХреЗ рд╕реНрдерд╛рди рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛, рдЖрдкрдХреЛ рдХрдмреНрдЬреЗ рдФрд░ рдореБрдХреНрдд рд╕реНрдерд╛рди рдХреЗ рдмреНрд▓реЙрдХ рдХреЗ рд╕рд╛рде рдкреНрд░рднрд╛рд╡реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдпрд╣рд╛рдВ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдХреИрд╕реЗ ZFS рдЗрд╕ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЗрдЦрддрд╛ рд╣реИ
 zdb -mmm -   20   metaslab'a  vdev'a   : 
Metaslabs: vdev 0 metaslabs 323 offset spacemap free --------------- ------------------- --------------- ------------- metaslab 0 offset 0 spacemap 34 free 84.8M segments 72 maxsize 24.9M freepct 16% .... [ 73] A range: 001f00ba00-001ffffa00 size: ff4000 [ 74] A range: 001eff8200-001f00ae00 size: 012c00 [ 75] A range: 001b091200-001b130200 size: 09f000 [ 76] A range: 0012a84e00-0013a84e00 size: 1000000 [ 77] A range: 0013a84e00-00141bb800 size: 736a00 [ 78] A range: 0006b88000-0007707200 size: b7f200 [ 79] FREE: txg 9153385, pass 1 [ 80] F range: 0000282000-0000283200 size: 001200 [ 81] F range: 0000b47200-0000b48600 size: 001400 [ 82] ALLOC: txg 9252698, pass 1 [ 83] A range: 0000282000-0000283a00 size: 001a00 [ 84] A range: 0000b47200-0000b48e00 size: 001c00 [ 85] A range: 00008e6e00-00008e8a00 size: 001c00 [ 86] FREE: txg 9279297, pass 2 [ 87] F range: 00008e9000-00008e9c00 size: 000c00 [ 88] FREE: txg 9328122, pass 2 [ 89] F range: 0010a7be00-0010a7c800 size: 000a00 [ 90] FREE: txg 9444756, pass 1 [ 91] F range: 0009b14200-000ab14200 size: 1000000 [ 92] F range: 000ab14200-000b402000 size: 8ede00 ....

, , , . , ZFS - - Copy-on-write . ZFS - , .

space map - 512 (0200), - 16 (01000000). space map , , - , .

- metaslab "" , free map, , , disk seek. , 84 "free" , - 24.9 "maxfree".

ZFS write pipeline - , , () metaslab allocator.

, - , , . .
zdb -mmm - 20 metaslab'a vdev'a :
Metaslabs: vdev 0 metaslabs 323 offset spacemap free --------------- ------------------- --------------- ------------- metaslab 0 offset 0 spacemap 34 free 84.8M segments 72 maxsize 24.9M freepct 16% .... [ 73] A range: 001f00ba00-001ffffa00 size: ff4000 [ 74] A range: 001eff8200-001f00ae00 size: 012c00 [ 75] A range: 001b091200-001b130200 size: 09f000 [ 76] A range: 0012a84e00-0013a84e00 size: 1000000 [ 77] A range: 0013a84e00-00141bb800 size: 736a00 [ 78] A range: 0006b88000-0007707200 size: b7f200 [ 79] FREE: txg 9153385, pass 1 [ 80] F range: 0000282000-0000283200 size: 001200 [ 81] F range: 0000b47200-0000b48600 size: 001400 [ 82] ALLOC: txg 9252698, pass 1 [ 83] A range: 0000282000-0000283a00 size: 001a00 [ 84] A range: 0000b47200-0000b48e00 size: 001c00 [ 85] A range: 00008e6e00-00008e8a00 size: 001c00 [ 86] FREE: txg 9279297, pass 2 [ 87] F range: 00008e9000-00008e9c00 size: 000c00 [ 88] FREE: txg 9328122, pass 2 [ 89] F range: 0010a7be00-0010a7c800 size: 000a00 [ 90] FREE: txg 9444756, pass 1 [ 91] F range: 0009b14200-000ab14200 size: 1000000 [ 92] F range: 000ab14200-000b402000 size: 8ede00 ....

, , , . , ZFS - - Copy-on-write . ZFS - , .

space map - 512 (0200), - 16 (01000000). space map , , - , .

- metaslab "" , free map, , , disk seek. , 84 "free" , - 24.9 "maxfree".

ZFS write pipeline - , , () metaslab allocator.

, - , , . .

Source: https://habr.com/ru/post/In160943/


All Articles