ืืืืืจ ืื, ื ืืื ืืื ืืื ืืืื ืกืื ืฉื ืชืช-ืืขืจืืช ื-I/O ืืืฉืคืขืชื ืขื ืืืืฆืืขืื.
ืืคื ื ืฉืืืขืืื ื ืชืงืืชื ืืฉืืื ืืืืข NVMe ืืฉืจืช ืืื ืืืื ืืืชืจ ื-SATA ืืฉืจืช ืืืจ. ืืกืชืืืชื ืขื ืืืืคืืื ืื ืฉื ืืฉืจืชืื ืืืื ืชื ืฉืื ืฉืืืช ืืจืืง: NVMe ืืื ืืงืืข ืืืฉืชืืฉ, ื-SSD ืืื ืืงืืข ืืฉืจืชืื.
ืืจืืจ ืฉืื ื ืืื ืืืฉืืืช ืืื ืืืฆืจืื ืืืืืจืื ืฉืื ืื ืืกืืืืืช ืฉืื ืืช, ืืื ืื ืื ืชืฉืืื ืืื ืืช ืืืฆื. ื ืืื ืืช ืืืกืืืืช, ื ืขืจืื ื ืืกืืืื ืื ืืชื ืชืฉืืื ืืฉืืื ืฉื ืฉืืื.
ืืื fsync ืืืืื ืืฉืชืืฉืื ืื
ืืื ืืืืืฅ ืืช ืืขืืืื ืขื ืืื ื ืื, ืื ืชืื ืื ืืืืืกื ืื, ืืืืืจ ืืืืืกื ืื ืืืืืจืื ืืคืืคื ืขื ืฉืชืชืงืืื ืืืืื ืืช ื ืืื ืืฉืืืจ ืืช ืชืืื ืืืืืจ ืืืื ื. ืงืจืืืจืืื ื ืืืืืื ืืช ื ืงืืขืื ืขื ืคื ืืขืจืืช ืืืคืขืื ืืืืคืืื ื ืืืื ื. ืืืงืจื ืฉื ืืคืกืงืช ืืฉืื, ืื ืื ืชืื ืื ืืืืืจ ืืืืื.
ืืฉื ื ืืกืคืจ ืืฉืืืืช ืฉืืื ืฆืจืื ืืืืืช ืืืื ืฉืืฉืื ืืืื ืืงืืืฅ ื ืืชืืื ืืืื ื, ืืืื ื ืืืื ืื ืืืืืจ ืืื ืืื. ื ืืชื ืืงืื ืืืืื ืื ืืืืฆืขืืช ืงืจืืืช ืืขืจืืช fsync ืชืืืืช POSIX. ืงืจืืืช fsync ืืืืฆืช ืืชืืื ืืืืืืจ ืืืื ื.
ืืืื ื ืืืื ืืช ืืืฉืคืขื ืฉื ืืืฆืฆืื ืขื ืืืืื ืืืืืืชืืช ืืฆืืจื ืฉื ืชืืื ืืช C ืงืฆืจื.
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
int main(void) {
/* ะัะบััะฒะฐะตะผ ัะฐะนะป answer.txt ะฝะฐ ะทะฐะฟะธัั, ะตัะปะธ ะตะณะพ ะฝะตั -- ัะพะทะดะฐัะผ */
int fd = open("answer.txt", O_WRONLY | O_CREAT);
/* ะะฐะฟะธััะฒะฐะตะผ ะฟะตัะฒัะน ะฝะฐะฑะพั ะดะฐะฝะฝัั
*/
write(fd, "Answer to the Ultimate Question of Life, The Universe, and Everything: ", 71);
/* ะะตะปะฐะตะผ ะฒะธะด, ััะพ ะฟัะพะฒะพะดะธะผ ะฒััะธัะปะตะฝะธั ะฒ ัะตัะตะฝะธะต 10 ัะตะบัะฝะด */
sleep(10);
/* ะะฐะฟะธััะฒะฐะตะผ ัะตะทัะปััะฐั ะฒััะธัะปะตะฝะธะน */
write(fd, "42n", 3);
return 0;
}
ืืขืจืืช ืืกืืืจืืช ืืืื ืืช ืจืฆืฃ ืืคืขืืืืช ืืชืืื ืืช. ืืืงืกื "ืืชืฉืืื ืืฉืืื ืืขืืงืจืืช ืฉื ืืืืื, ืืืงืื ืืื ืื" ืืืืืง ืขื ืืื ืืขืจืืช ืืืคืขืื, ืืื ืชืคืขืื ืืืืฉ ืืช ืืฉืจืช ืขื ืืื ืืืืฆื ืขื ืืคืชืืจ ื-Reset ืืืืื "ืืืฉืืืื", ืืงืืืฅ ืืืื ืจืืง. ืืืืืื ืฉืื ื, ืืืืื ืืงืกื ืืื ื ืืขืื, ืืืื ืืื ืฆืืจื ื-fsync. ืืืืจื ืืืืข ืืื ื ืฉืืชืคืื ืืืืคืืืืืืช ืืื.
ืืกืื ื ืชืื ืื ืื ืชืืื ืืช ืืืจืืืืช ืฉืขืืืืืช ืขื ืงืืฆืื ืจืืื ืื ืืื ืืช, ืืืื ืื ืจืืฆืื ืืืืืช ืืืืืื ืฉืื ืชืื ืื ืฉืื ืืืชืืื ืืืืืกื ื ืืืื ื, ืฉืื ืขืงืืืืช ืื ืชืื ืื ืืชืื ืืกื ืื ืชืื ืื ืชืืืื ืืื. ืืืืจื ืืืืืข ืืืืขืืื ืืชืขื ืืช ืื ืืขืกืงืืืช ืฉืืืฉืืื ืืืืืืช ืืืื ืื ืืืคืกืงืช ืืฉืื ืืื ืจืืข. ืืชื ืืืืช ืื ืืืืืืช ืืืชื ืืืฉืชืืฉ ื-fsync ืื ืืืื ืืืืืืืช ืืืืืืช.
ืื ืืฉืคืืข ืขื ืืฉืืืืฉ ืืชืืืฃ ื-fsync
ืขื ืงืื/ืคืื ืจืืื, ืืขืจืืช ืืืคืขืื ืื ืกื ืืืืขื ืืช ืชืงืฉืืจืช ืืืืกืงืื, ืฉืื ืืื ื ืื ืืืฆืื ืืื ืื ืืืืืืื ืืืืชืจ ืืืืจืจืืืืช ืืืืืจืื. ืืื, ืืขืจืืช ืืืคืขืื ืื ืกื ืืืชืื ืืื ืฉืืืชืจ ื ืชืื ืื ืืืืฉื ืืืช ืืืื ื.
ืืืื ื ืืืื ืืช ืืืฉืคืขื ืฉื ืฉืืืืฉ ื-fsync ืขื ืืืืื ืกืคืฆืืคืืช. ืืฉ ืื ื ืืช ืืื ื ื ื-SSD ืืืืื ืื ืืืงืื:
- Intelยฎ DC SSD S4500 480 GB, ืืืืืจ ืืืืฆืขืืช SATA 3.2, 6 Gb/s;
- Samsung 970 EVO Plus 500GB, ืืืืืจ ืืืืฆืขืืช PCIe 3.0 x4, ~31 Gbps.
ืืืืืงืืช ืืชืืฆืขืืช ืขื Intelยฎ Xeonยฎ W-2255 ืขื ืืืืื ืื 20.04. ืืื ืืืืืง ืืืกืงืื, ื ืขืฉื ืฉืืืืฉ ื-sysbench 1.0.18. ืืืืกืงืื ืืฉ ืืืืฆื ืืืช ืืืขืืฆืืช ื-ext4. ืืืื ื ืืืืืงื ืืื ืืืฆืืจ ืงืืฆืื ืฉื 100 GB:
sysbench --test=fileio --file-total-size=100G prepare
ืืืืงืืช ืจืืฆื:
# ะะตะท fsync
sysbench --num-threads=16 --test=fileio --file-test-mode=rndrw --file-fsync-freq=0 run
# ะก fsync ะฟะพัะปะต ะบะฐะถะดะพะน ะทะฐะฟะธัะธ
sysbench --num-threads=16 --test=fileio --file-test-mode=rndrw --file-fsync-freq=1 run
ืชืืฆืืืช ืืืืืงื ืืืฆืืืช ืืืืื.
ืืืื
Intelยฎ S4500
Samsung 970 EVO+
ืงืจืืื ืืื fsync, MiB/s
5734.89
9028.86
ืืชืื ืืื fsync, MiB/s
3823.26
6019.24
ืงืจืืื ืขื fsync, MiB/s
37.76
3.27
ืืงืืื ืขื fsync, MiB/s
25.17
2.18
ืงื ืืจืืืช ืฉ-NVMe ืืงืืข ืืืงืื ืืืืื ืืืืืืื ืืืฉืจ ืืขืจืืช ืืืคืขืื ืขืฆืื ืืืืืื ืืืฆื ืืขืืื ืขื ืืืกืงืื, ืืืคืกืืื ืืืฉืจ ื ืขืฉื ืฉืืืืฉ ื-fsync. ืื ืืขืื ืฉืชื ืฉืืืืช:
- ืืืืข ืืืืจืืช ืืงืจืืื ืขืืื ืขื ืจืืื ืืคืก ืืคืืื ืฉื ืืงืืฉืืจ ืืืืืงื ืืื fsync?
- ืืืืข ืืงืืข ืฉืจืช SSD ืืื ืืืชืจ ืืืืคืื ืืืกืคืจ ืจื ืฉื ืืงืฉืืช fsync?
ืืชืฉืืื ืืฉืืื ืืจืืฉืื ื ืคืฉืืื: sysbench ืืืืฆืจืช ืงืืฆืื ืืืืืื ืืคืก. ืืคืืื, ืืืืืงื ืืืฆืขื ืืขื 100 ืืืื-ืืืื ืฉื ืืคืกืื. ืืืืืื ืฉืื ืชืื ืื ืืืื ืืืืืื ืืฆืคืืืื, ื ืื ืกืืช ืืคืขืืื ืืืคืืืืืืฆืืืช ืฉืื ืืช ืฉื ืืขืจืืช ืืืคืขืื, ืืื ืืืืฆืืช ืืฉืืขืืชืืช ืืช ืืืืฆืืข.
ืื ืืชื ืืืื ืกืคืง ืืื ืืชืืฆืืืช ืฉื sysbench, ืื ืืชื ืืืื ืืืฉืชืืฉ ื-fio.
# ะะตะท fsync
fio --name=test1 --blocksize=16k --rw=randrw --iodepth=16 --runtime=60 --rwmixread=60 --fsync=0 --filename=/dev/sdb
# ะก fsync ะฟะพัะปะต ะบะฐะถะดะพะน ะทะฐะฟะธัะธ
fio --name=test1 --blocksize=16k --rw=randrw --iodepth=16 --runtime=60 --rwmixread=60 --fsync=1 --filename=/dev/sdb
ืืืื
Intelยฎ S4500
Samsung 970 EVO+
ืงืจืืื ืืื fsync, MiB/s
45.5
178
ืืชืื ืืื fsync, MiB/s
30.4
119
ืงืจืืื ืขื fsync, MiB/s
32.6
20.9
ืืงืืื ืขื fsync, MiB/s
21.7
13.9
ืืืืื ืืืจืืื ืืืืฆืืขืื ื-NVMe ืืขืช ืฉืืืืฉ ื-fsync ื ืจืืืช ืืืืจืืจ. ืืชื ืืืื ืืขืืืจ ืืฉืืื ืืฉื ืืื.
ืืืคืืืืืืฆืื ืื ืืืืฃ
ืงืืื ืืืจื ื ืฉืื ืชืื ืื ืืืืืกื ืื ืืืืืจ, ืืื ืื ืฆืืื ื ืืืืื ืืื, ืื ืื ืื ืืื ืืฉืื. ืื ืืขืช ืื ื ืขืืืง ืืืืจืืืืช ืฉื ืืขืจืืืช ืืคืขืื ืื ืคืจื ืฉื ื ืกืืืื ืืืืืื ืฉื ืืืืจืื:
- ืชืื ืืช;
- ืืึผืืจึธื.
ืืืืจ ืืชืืื ื ืืชืืืืก ืืืืืจืื ืฉื ืืฆืืื ืืืขืจืืช ืืืคืขืื, ืืืืืจ ืืืืืจื ืืชืืืืก ืืืืืจืื ืื ืืืฃ ืฉื ืืงืจ ืืืืกืง. ืงืจืืืช ืืืขืจืืช fsync ืฉืืืืช ืคืงืืื ืืืื ื ืืืชืื ื ืชืื ืื ืืืืืืจ ืฉืื ืืืืกืื ืืจืืฉื, ืื ืืื ืื ืืจื ืืฉืืื ืืืืฆืืข ืื ืืื ืฉื ืืคืงืืื.
ืืืืืื ืฉื-SSD ืืชืคืงื ืืื ืืืชืจ, ื ืืชื ืืื ืื ืฉืชื ืื ืืืช:
- ืืืืกืง ืืืืขื ืืขืืืก ืฉื ืชืืื ืืช ืืืื;
- ืืืืกืง "ืืืืฃ" ืืืชืขืื ืืืคืงืืื.
ื ืืชื ืืืืืื ืืืชื ืืืืช ืื ืืฉืจื ืฉื ืืืื ื ืื ืืชื ืืืฆืข ืืืืงื ืขื ืืคืกืงืช ืืฉืื. ืืชื ืืืื ืืืืืง ืืช ืื ืขื ืกืงืจืืคื.
ืกืงืจืืคื ืื ืืืจืฉ ืฉื ื ืืืื ืืช ืคืืืืืช - "ืฉืจืช" ื"ืืงืื". ืืืงืื ืืืชื ืืืืช ืงืื ื ืฉื ื ืชืื ืื ืืืื ื ืื ืืืง, ืงืืจื ื-fsync ืืฉืืื ืืฉืจืช ืืืืข ืขื ืื ืฉื ืืชื.
# ะะฐะฟััะบะฐะตััั ะฝะฐ ัะตัะฒะตัะต
./diskchecker.pl -l [port]
# ะะฐะฟััะบะฐะตััั ะฝะฐ ะบะปะธะตะฝัะต
./diskchecker.pl -s <server[:port]> create <file> <size_in_MB>
ืืืืจ ืืคืขืืช ืืกืงืจืืคื, ืืฉ ืฆืืจื ืืืื ืืช ืืื ืจืืื ืฉื "ืืืงืื" ืืื ืืืืืืจ ืืฉืื ืืืฉื ืืกืคืจ ืืงืืช. ืืฉืื ืื ืชืง ืืช ืื ืืืง ืืืฉืื, ืืื ืจืง ืืืฆืข ืืืืื ืงืฉื. ืืืืจ ืืื ืื, ื ืืชื ืืืืจ ืืืืขืื ืืช ืืฉืจืช ืืืขืจืืช ืืืคืขืื. ืืืืจ ืืชืืื ืืขืจืืช ืืืคืขืื, ืขืืื ืืืชืืื ืืืืฉ diskchecker.pl, ืืื ืขื ืืืืื ืืืืช.
./diskchecker.pl -s <server[:port]> verify <file>
ืืกืืฃ ืืืืืงื ืชืจืื ืืช ืืกืคืจ ืืฉืืืืืช. ืื ืื 0, ืื ืืืืกืง ืขืืจ ืืช ืืืืื. ืืื ืื ืืืืื ืฉืืืื ืฉื ื ืกืืืืช ืฉืืฆืืื ืขืืืจ ืืืืกืง, ื ืืชื ืืืืืจ ืขื ืื ืืกืื ืืกืคืจ ืคืขืืื.
S4500 ืฉืื ื ืื ืืจืื ืฉืืืืืช ืืืืื ืืฉืื, ืื ืฉืืืืจ ืฉืืื ืืืื ืืขืืืกืื ืขื ืืจืื ืงืจืืืืช fsync.
ืืกืงื ื
ืืขืช ืืืืจืช ืืืกืงืื ืื ืชืฆืืจืืช ืืืื ืืช ืฉืืืืช, ืขืืื ืืืืืจ ืืช ืืคืจืืื ืฉื ืืืฉืืืืช ืฉืืฉ ืืคืชืืจ. ืืืื ืจืืฉืื ื ืจืื ืืจืืจ ืฉ-NVMe, ืืืืืจ SSD ืขื ืืืฉืง PCIe, ืืืืจ ืืืชืจ ื-SATA SSD "ืงืืืกื". ืขื ืืืช, ืืคื ืฉืืื ื ืืืื, ืืชื ืืื ืกืคืฆืืคืืื ืืขื ืืฉืืืืช ืืกืืืืืช ืื ืื ืืืื ืืืืืช ืืืงืจื.
ืืืฆื ืืืืงืื ืจืืืื ืฉืจืช ืืืฉืจ ืฉืืืจืื ืืกืคืง IaaS?
ืืืืื ืืื ืืชืืืืืช.
ืืงืืจ: www.habr.com