เป€เบ›เบฑเบ™เบซเบเบฑเบ‡ NVMe เบ‚เบญเบ‡เบ‚เป‰เบญเบเบˆเบถเปˆเบ‡เบŠเป‰เบฒเบเบงเปˆเบฒ SSD?

เป€เบ›เบฑเบ™เบซเบเบฑเบ‡ NVMe เบ‚เบญเบ‡เบ‚เป‰เบญเบเบˆเบถเปˆเบ‡เบŠเป‰เบฒเบเบงเปˆเบฒ SSD?
เปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบšเบดเปˆเบ‡เบšเบฒเบ‡เบชเปˆเบงเบ™เบ‚เบญเบ‡ nuances เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบเปˆเบญเบ I / O เปเบฅเบฐเบœเบปเบ™เบเบฐเบ—เบปเบšเบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”.

เบชเบญเบ‡เบชเบฒเบกเบญเบฒเบ—เบดเบ”เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰เบ‚เป‰เบญเบเป„เบ”เป‰เบ›เบฐเป€เบŠเบตเบ™เบเบฑเบšเบ„เปเบฒเบ–เบฒเบกเบ—เบตเปˆเบงเปˆเบฒ NVMe เบขเบนเปˆเปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบซเบ™เบถเปˆเบ‡เบŠเป‰เบฒเบเบงเปˆเบฒ SATA เปƒเบ™เป€เบ„เบทเปˆเบญเบ‡เบญเบทเปˆเบ™. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เป€เบšเบดเปˆเบ‡เบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปเบฅเบฐเบฎเบนเป‰เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบ„เปเบฒเบ–เบฒเบกเบ—เบตเปˆเบซเบเบธเป‰เบ‡เบเบฒเบ: NVMe เปเบกเปˆเบ™เบกเบฒเบˆเบฒเบเบžเบฒเบเบชเปˆเบงเบ™เบœเบนเป‰เปƒเบŠเป‰, เปเบฅเบฐ SSD เปเบกเปˆเบ™เบกเบฒเบˆเบฒเบเบžเบฒเบเบชเปˆเบงเบ™เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ.

เปเบ™เปˆเบ™เบญเบ™, เบกเบฑเบ™เบšเปเปˆเบเบธเบ”เบ•เบดเบ—เปเบฒเบ—เบตเปˆเบˆเบฐเบ›เบฝเบšเบ—เบฝเบšเบœเบฐเบฅเบดเบ”เบ•เบฐเบžเบฑเบ™เบˆเบฒเบเบžเบฒเบเบชเปˆเบงเบ™เบ•เปˆเบฒเบ‡เป†เปƒเบ™เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™, เปเบ•เปˆเบ™เบตเป‰เบšเปเปˆเปเบกเปˆเบ™เบ„เปเบฒเบ•เบญเบšเบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™เบ—เบตเปˆเบชเบปเบกเบšเบนเบ™. เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบชเบถเบเบชเบฒเบžเบทเป‰เบ™เบ–เบฒเบ™, เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เปเบฅเบฐเปƒเบซเป‰เบ„เปเบฒเบ•เบญเบšเบ•เปเปˆเบ„เปเบฒเบ–เบฒเบกเบ—เบตเปˆเบ•เบฑเป‰เบ‡เบ‚เบถเป‰เบ™.

fsync เปเบกเปˆเบ™เบซเบเบฑเบ‡ เปเบฅเบฐเบกเบฑเบ™เปƒเบŠเป‰เบขเบนเปˆเปƒเบช?

เป€เบžเบทเปˆเบญเป€เบฅเบฑเปˆเบ‡เบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเป„เบ”เบฃเบŸเปŒ, เบ‚เปเป‰เบกเบนเบ™เบˆเบฐเบ–เบทเบ buffered, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป„เบงเป‰เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เบˆเบปเบ™เบเปˆเบงเบฒเป‚เบญเบเบฒเบ”เบ—เบตเปˆเบชเบฐเบ”เบงเบเบˆเบฐเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เป€เบžเบทเปˆเบญเบŠเปˆเบงเบเบ›เบฐเบขเบฑเบ”เป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡ buffer เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป„เบ”. เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบชเปเบฒเบฅเบฑเบš "เป‚เบญเบเบฒเบ”" เปเบกเปˆเบ™เบ–เบทเบเบเปเบฒเบ™เบปเบ”เป‚เบ”เบเบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เปเบฅเบฐเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เป„เบ”. เปƒเบ™โ€‹เบเปโ€‹เบฅเบฐโ€‹เบ™เบตโ€‹เบ‚เบญเบ‡โ€‹เป„เบŸโ€‹เบŸเป‰เบฒโ€‹เบฅเบปเป‰เบกโ€‹เป€เบซเบผเบงโ€‹, เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เบ—เบตเปˆโ€‹เบขเบนเปˆโ€‹เปƒเบ™ buffer เบˆเบฐโ€‹เบชเบนเบ™โ€‹เป€เบชเบโ€‹เป„เบ›โ€‹.

เบกเบตเบงเบฝเบเบ‡เบฒเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบ™เบถเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เป„เบŸเบฅเปŒเบ–เบทเบเบ‚เบฝเบ™เป„เบงเป‰เปƒเบ™เป„เบ”เปเบฅเบฐเบšเปเปˆเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™ buffer เบเบฒเบ‡. เบเบฒเบ™เบฎเบฑเบšเบ›เบฐเบเบฑเบ™เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป„เบ”เป‰เบฎเบฑเบšเป‚เบ”เบเบเบฒเบ™เปƒเบŠเป‰เบเบฒเบ™เป‚เบ—เบฅเบฐเบšเบปเบš fsync เบ—เบตเปˆเบชเบญเบ”เบ„เปˆเบญเบ‡เบเบฑเบš POSIX. เบเบฒเบ™เป‚เบ—เบซเบฒ fsync เบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบ‚เบฝเบ™เบˆเบฒเบ buffer เป„เบ›เบซเบฒเป„เบ”.

เปƒเบซเป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบœเบปเบ™เบเบฐเบ—เบปเบšเบ‚เบญเบ‡ buffers เบ”เป‰เบงเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบ›เบญเบกเปƒเบ™เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เป‚เบ›เปเบเบผเบกเบชเบฑเป‰เบ™เปƒเบ™ 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;
}

เบ„เปเบฒเป€เบซเบฑเบ™เบญเบฐเบ—เบดเบšเบฒเบเป„เบ”เป‰เบ”เบตเบฅเปเบฒเบ”เบฑเบšเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปƒเบ™เป‚เบ„เบ‡เบเบฒเบ™. เบ‚เปเป‰เบ„เบงเบฒเบก "เบ„เปเบฒเบ•เบญเบšเบ‚เบญเบ‡เบ„เปเบฒเบ–เบฒเบกเบ•เบปเป‰เบ™เบ•เปเบ‚เบญเบ‡เบŠเบตเบงเบดเบ”, เบˆเบฑเบเบเบฐเบงเบฒเบ™เปเบฅเบฐเบชเบดเปˆเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”" เบˆเบฐเบ–เบทเบเบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เป‚เบ”เบเบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™, เปเบฅเบฐเบ–เป‰เบฒเบ—เปˆเบฒเบ™ restart server เป‚เบ”เบเบเบฒเบ™เบเบปเบ”เบ›เบธเปˆเบก Reset เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡ "เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆ", เป„เบŸเบฅเปŒเบˆเบฐเบซเบงเปˆเบฒเบ‡เป€เบ›เบปเปˆเบฒ. เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบเบฒเบ™เบชเบนเบ™เป€เบชเบเบ‚เปเป‰เบ„เบงเบฒเบกเบšเปเปˆเปเบกเปˆเบ™เบšเบฑเบ™เบซเบฒ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ fsync เปเบกเปˆเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™. เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบšเปเปˆเป„เบ”เป‰เปเบšเปˆเบ‡เบ›เบฑเบ™เปเบ‡เปˆเบ”เบตเบ™เบตเป‰.

เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เป‚เบ„เบ‡เบเบฒเบ™เบ—เบตเปˆเบชเบฐเบฅเบฑเบšเบชเบฑเบšเบŠเป‰เบญเบ™เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบžเป‰เบญเบกเบเบฑเบ™เบเบฑเบšเบซเบผเบฒเบเป„เบŸเบฅเปŒ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบ‚เบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบซเป‰เปเบ™เปˆเปƒเบˆเบงเปˆเบฒเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบ‚เบฝเบ™เบˆเบฐเบ–เบทเบเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เปƒเบ™เป„เบ”, เป€เบžเบฒเบฐเบงเปˆเบฒเบ„เบงเบฒเบกเบชเบญเบ”เบ„เปˆเบญเบ‡เบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เบžเบฒเบเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบ™เบตเป‰. เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ–เบทเบเบญเบญเบเปเบšเบšเบกเบฒเป€เบžเบทเปˆเบญเบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบ—เบตเปˆเบชเปเบฒเป€เบฅเบฑเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เปเบฅเบฐเบžเป‰เบญเบกเบ—เบตเปˆเบˆเบฐเบชเบนเบ™เป€เบชเบเบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™เป„เบ”เป‰เบ—เบธเบเป€เบงเบฅเบฒ. เบžเบถเบ”เบ•เบดเบเปเบฒเบ™เบตเป‰เบฎเบฝเบเบฎเป‰เบญเบ‡เปƒเบซเป‰เบกเบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ fsync เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เปƒเบ™เบ›เบฐเบฅเบดเบกเบฒเบ™เบซเบผเบฒเบ.

เบœเบปเบ™เบเบฐเบ—เบปเบšเบ‚เบญเบ‡เบเบฒเบ™เปƒเบŠเป‰ fsync เป€เบฅเบทเป‰เบญเบเป†เปเบกเปˆเบ™เบซเบเบฑเบ‡?

เปƒเบ™โ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡ I/O เบ›เบปเบโ€‹เบเบฐโ€‹เบ•เบดโ€‹, เบฅเบฐโ€‹เบšเบปเบšโ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบเบฒเบ™โ€‹เบžเบฐโ€‹เบเบฒโ€‹เบเบฒเบกโ€‹เบ›เบฑเบšโ€‹เบเบฒเบ™โ€‹เบชเบทเปˆโ€‹เบชเบฒเบ™โ€‹เบเบฑเบšโ€‹เปเบœเปˆเบ™โ€‹, เป€เบ™เบทเปˆเบญเบ‡โ€‹เบˆเบฒเบโ€‹เบงเปˆเบฒโ€‹เบเบฒเบ™โ€‹เบ‚เบฑเบšโ€‹เบžเบฒเบโ€‹เบ™เบญเบโ€‹เปเบกเปˆเบ™โ€‹เบŠเป‰เบฒโ€‹เบ—เบตเปˆโ€‹เบชเบธเบ”โ€‹เปƒเบ™โ€‹เบฅเปเบฒโ€‹เบ”เบฑเบšโ€‹เบซเบ™เปˆเบงเบโ€‹เบ„เบงเบฒเบกโ€‹เบˆเปเบฒโ€‹. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบžเบฐเบเบฒเบเบฒเบกเบ‚เบฝเบ™เบ‚เปเป‰เบกเบนเบ™เบซเบผเบฒเบเป€เบ—เบปเปˆเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เปƒเบ™เบซเบ™เบถเปˆเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบ”.

เปƒเบซเป‰เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบœเบปเบ™เบเบฐเบ—เบปเบšเบ‚เบญเบ‡เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ fsync เบ”เป‰เบงเบเบ•เบปเบงเบขเปˆเบฒเบ‡เบชเบฐเป€เบžเบฒเบฐ. เบžเบงเบเป€เบฎเบปเบฒเบกเบต SSDs เบ•เปเปˆเป„เบ›เบ™เบตเป‰เป€เบ›เบฑเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ‚เบฑเบš:

  • Intelยฎ DC SSD S4500 480 GB, เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบœเปˆเบฒเบ™ SATA 3.2, 6 Gbit/s;
  • Samsung 970 EVO Plus 500GB, เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบœเปˆเบฒเบ™ PCIe 3.0 x4, ~31 Gbit/s.

เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเปเบกเปˆเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบขเบนเปˆเปƒเบ™ Intelยฎ Xeonยฎ W-2255 เบ—เบตเปˆเปƒเบŠเป‰ Ubuntu 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 เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰. เบ™เบตเป‰เป€เบฎเบฑเบ”เปƒเบซเป‰เบชเบญเบ‡เบ„เปเบฒเบ–เบฒเบก:

  1. เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบ„เบงเบฒเบกเป„เบงเบเบฒเบ™เบญเปˆเบฒเบ™เปƒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป‚เบ”เบเบšเปเปˆเบกเบต fsync เป€เบเบตเบ™เปเบšเบ™เบงเบดเบ”เบ—เบฒเบ‡เบ”เป‰เบฒเบ™เบฎเปˆเบฒเบ‡เบเบฒเบเบ‚เบญเบ‡เบŠเปˆเบญเบ‡เบ—เบฒเบ‡?
  2. เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบžเบฒเบเบชเปˆเบงเบ™เป€เบŠเบตเบŸเป€เบงเบต SSD เบˆเบถเปˆเบ‡เบ”เบตเบเบงเปˆเบฒเปƒเบ™เบเบฒเบ™เบˆเบฑเบ”เบเบฒเบ™เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป fsync เบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบ?

เบ„เปเบฒเบ•เบญเบšเบ‚เบญเบ‡เบ„เปเบฒเบ–เบฒเบกเบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบ‡เปˆเบฒเบเบ”เบฒเบ: sysbench เบชเป‰เบฒเบ‡เป„เบŸเบฅเปŒเบ—เบตเปˆเป€เบ•เบฑเบกเป„เบ›เบ”เป‰เบงเบเบชเบนเบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเป„เบ”เป‰เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบผเบฒเบเบเบงเปˆเบฒ 100 gigabyte เบ‚เบญเบ‡เบชเบนเบ™. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ‚เปเป‰เบกเบนเบ™เบกเบตเบ„เบงเบฒเบกเป€เบ›เบฑเบ™เป€เบญเบเบฐเบžเบฒเบš เปเบฅเบฐเบชเบฒเบกเบฒเบ”เบ„เบฒเบ”เป€เบ”เบปเบฒเป„เบ”เป‰เบซเบผเบฒเบ, เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡ OS เบ•เปˆเบฒเบ‡เป†เบเปเปˆเป€เบ‚เบปเป‰เบฒเบกเบฒเบซเบผเบดเป‰เบ™ เปเบฅเบฐเป€เบฅเบฑเปˆเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบขเปˆเบฒเบ‡เปƒเบซเบเปˆเบซเบผเบงเบ‡.

เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ–เบฒเบกเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš 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 เปเบกเปˆเบ™เป€เบซเบฑเบ™เป„เบ”เป‰เบŠเบฑเบ”เป€เบˆเบ™. เป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป„เบ›เบ•เบญเบšเบ„เบณเบ–เบฒเบกเบ—เบตเบชเบญเบ‡เป„เบ”เป‰.

เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš เบซเบผเบท bluff

เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบšเบญเบเบงเปˆเบฒเบ‚เปเป‰เบกเบนเบ™เบ–เบทเบเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™ buffer, เปเบ•เปˆเบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบฅเบฐเบšเบธเบงเปˆเบฒเบญเบฑเบ™เปƒเบ”, เป€เบžเบฒเบฐเบงเปˆเบฒเบ™เบตเป‰เบšเปเปˆเบชเปเบฒเบ„เบฑเบ™. เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆ delve เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ intricacies เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เปเบฅเบฐเบˆเบฐเบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เบชเบญเบ‡เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡ buffers เบ—เบปเปˆเบงเป„เบ›:

  • เป‚เบ„เบ‡เบเบฒเบ™;
  • เบฎเบฒเบ”เปเบง.

เบšเบฑเบŸเป€เบŸเบตเบŠเบญเบšเปเบงเบซเบกเบฒเบเป€เบ–เบดเบ‡ buffers เบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™เบฅเบฐเบšเบปเบšเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™, เปเบฅเบฐเบฎเบฒเบ”เปเบง buffer เบซเบกเบฒเบเป€เบ–เบดเบ‡เบ„เบงเบฒเบกเบˆเปเบฒเบ—เบตเปˆเบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เบ‚เบญเบ‡เบ•เบปเบงเบ„เบงเบšเบ„เบธเบกเปเบœเปˆเบ™. เบเบฒเบ™เป‚เบ—เบซเบฒเบฅเบฐเบšเบปเบš fsync เบชเบปเปˆเบ‡เบ„เปเบฒเบชเบฑเปˆเบ‡เป„เบ›เบซเบฒเป„เบ”เป€เบžเบทเปˆเบญเบ‚เบฝเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบ buffer เบ‚เบญเบ‡เบกเบฑเบ™เป„เบ›เบซเบฒเบšเปˆเบญเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ•เบปเป‰เบ™เบ•เป, เปเบ•เปˆเบšเปเปˆเบกเบตเบงเบดเบ—เบตเบเบฒเบ™เบเบงเบ”เบชเบญเบšเบงเปˆเบฒเบ„เปเบฒเบชเบฑเปˆเบ‡เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡.

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบ SSD เบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”, เบชเบญเบ‡เบชเบปเบกเบกเบธเบ”เบ•เบดเบ–เบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰:

  • เปเบœเปˆเบ™เป„เบ”เป‰เบ–เบทเบเบญเบญเบเปเบšเบšเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป‚เบซเบผเบ”เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™;
  • เปเบœเปˆเบ™ "bluffs" เปเบฅเบฐเบšเปเปˆเบชเบปเบ™เปƒเบˆเบ„เปเบฒเบชเบฑเปˆเบ‡.

เบžเบถเบ”เบ•เบดเบเปเบฒเบ—เบตเปˆเบšเปเปˆเบŠเบทเปˆเบชเบฑเบ”เบ‚เบญเบ‡เป„เบ”เบชเบฒเบกเบฒเบ”เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบฎเบฑเบ”เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบเบฒเบ™เบชเบนเบ™เป€เบชเบเบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบเบงเบ”เป€เบšเบดเปˆเบ‡เบ™เบตเป‰เบ”เป‰เบงเบเบชเบฐเบ„เบดเบš diskchecker.pl, เบกเบฑเบ™โ€‹เปเบกเปˆเบ™ เบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบ‚เบถเป‰เบ™ เปƒเบ™เบ›เบต 2005.

เบชเบฐเบ„เบฃเบดเบšเบ™เบตเป‰เบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ - "เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ" เปเบฅเบฐ "เบฅเบนเบเบ„เป‰เบฒ". เบฅเบนเบเบ„เป‰เบฒเบ‚เบฝเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเปเบฒเบ™เบงเบ™เบ™เป‰เบญเบเป†เปƒเบชเปˆเปเบœเปˆเบ™เบ—เบตเปˆเบขเบนเปˆเบžเบฒเบเปƒเบ•เป‰เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš, เป‚เบ—เบซเบฒ fsync, เปเบฅเบฐเบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เป„เบ›เบซเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เบฝเบ™.

# ะ—ะฐะฟัƒัะบะฐะตั‚ัั ะฝะฐ ัะตั€ะฒะตั€ะต
./diskchecker.pl -l [port]

# ะ—ะฐะฟัƒัะบะฐะตั‚ัั ะฝะฐ ะบะปะธะตะฝั‚ะต
./diskchecker.pl -s <server[:port]> create <file> <size_in_MB>

เบซเบผเบฑเบ‡เบˆเบฒเบเปเบฅเปˆเบ™เบชเบฐเบ„เบฃเบดเบšเปเบฅเป‰เบง, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบ›เบดเบ”เป„เบŸเปƒเบซเป‰เบเบฑเบš "เบฅเบนเบเบ‚เปˆเบฒเบ" เปเบฅเบฐเบขเปˆเบฒเบชเบปเปˆเบ‡เป„เบŸเบ„เบทเบ™เป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบซเบผเบฒเบเบ™เบฒเบ—เบต. เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบˆเบฐเบ•เบฑเบ”เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบœเบนเป‰เบ—เบตเปˆเบ–เบทเบเบ—เบปเบ”เบชเบญเบšเบˆเบฒเบเป„เบŸเบŸเป‰เบฒ, เปเบฅเบฐเบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เบ›เบดเบ”เบขเปˆเบฒเบ‡เบซเบ™เบฑเบเปเบซเบ™เป‰เบ™. เบซเบผเบฑเบ‡เบˆเบฒเบเป€เบงเบฅเบฒเปƒเบ”เบซเบ™เบถเปˆเบ‡, เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบชเบฒเบกเบฒเบ”เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบฅเบฐเป‚เบซเบฅเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ OS. เบซเบผเบฑเบ‡โ€‹เบˆเบฒเบโ€‹เบเบฒเบ™โ€‹เป‚เบซเบผเบ” OS เบ—เปˆเบฒเบ™โ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เป„เบ”เป‰โ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เบกเบฑเบ™โ€‹เบญเบตเบโ€‹เป€เบ—เบทเปˆเบญโ€‹เบซเบ™เบถเปˆเบ‡โ€‹ diskchecker.pl, เปเบ•เปˆเบกเบตเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡ เบเบงเบ”เบชเบญเบš.

./diskchecker.pl -s <server[:port]> verify <file>

เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบเบงเบ”เบชเบญเบšเบ—เปˆเบฒเบ™เบˆเบฐเป€เบซเบฑเบ™เบˆเปเบฒเบ™เบงเบ™เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”. เบ–เป‰เบฒเบกเบต 0, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เปเบœเปˆเบ™เป„เบ”เป‰เบœเปˆเบฒเบ™เบเบฒเบ™เบ—เบปเบ”เบชเบญเบš. เป€เบžเบทเปˆเบญเบเบปเบเป€เบงเบฑเป‰เบ™เบเบฒเบ™เบšเบฑเบ‡เป€เบญเบตเบ™เบ—เบตเปˆเป‚เบŠเบเบ”เบตเบชเปเบฒเบฅเบฑเบšเปเบœเปˆเบ™, เบเบฒเบ™เบ—เบปเบ”เบฅเบญเบ‡เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบŠเป‰เปเบฒเบญเบตเบเบซเบผเบฒเบเบ„เบฑเป‰เบ‡.

S4500 เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเบชเบฐเปเบ”เบ‡เบ‚เปเป‰เบœเบดเบ”เบžเบฒเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบชเบนเบ™เป€เบชเบเบžเบฐเบฅเบฑเบ‡เบ‡เบฒเบ™, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบกเบฑเบ™เบเบฝเบกเบžเป‰เบญเบกเบชเปเบฒเบฅเบฑเบšเบงเบฝเบเบ—เบตเปˆเบกเบตเบเบฒเบ™เป‚เบ— fsync เบซเบผเบฒเบ.

เบชเบฐเบซเบฅเบธเบš

เป€เบกเบทเปˆเบญเป€เบฅเบทเบญเบเปเบœเปˆเบ™เบซเบผเบทเบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ—เบตเปˆเบเบฝเบกเบžเป‰เบญเบกเบ—เบฑเบ‡เบซเบกเบปเบ”, เบ—เปˆเบฒเบ™เบ„เบงเบ™เบˆเบทเปˆเบˆเปเบฒเบชเบฐเป€เบžเบฒเบฐเบ‚เบญเบ‡เบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เปเบเป‰เป„เบ‚. เบขเบนเปˆ glance เบ—เปเบฒเบญเบดเบ”, เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ NVMe, เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, SSD เบ—เบตเปˆเบกเบตเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบš PCIe, เปเบกเปˆเบ™เป„เบงเบเบงเปˆเบฒ "เบ„เบฅเบฒเบชเบชเบดเบ" SATA SSD. เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฝเบ™เบฎเบนเป‰เปƒเบ™เบกเบทเป‰เบ™เบตเป‰, เปƒเบ™เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบชเบฐเป€เบžเบฒเบฐเปเบฅเบฐเบงเบฝเบเบ‡เบฒเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ™เบตเป‰เบญเบฒเบ”เบˆเบฐเบšเปเปˆเป€เบ›เบฑเบ™เบเปเบฅเบฐเบ™เบต.

เป€เบˆเบปเป‰เบฒเบ—เบปเบ”เบชเบญเบšเบญเบปเบ‡เบ›เบฐเบเบญเบšเป€เบŠเบตเบšเป€เบงเบตเปเบ™เบงเปƒเบ”เป€เบกเบทเปˆเบญเป€เบŠเบปเปˆเบฒเบˆเบฒเบเบœเบนเป‰เปƒเบซเป‰เบšเปเบฅเบดเบเบฒเบ™ IaaS?
เบžเบงเบเป€เบฎเบปเบฒเบฅเปเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบขเบนเปˆเปƒเบ™เบ„เปเบฒเป€เบซเบฑเบ™.

เป€เบ›เบฑเบ™เบซเบเบฑเบ‡ NVMe เบ‚เบญเบ‡เบ‚เป‰เบญเบเบˆเบถเปˆเบ‡เบŠเป‰เบฒเบเบงเปˆเบฒ SSD?

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™