ืืื ืืขื ืึทืจืืืงื, ืืืจ ืืืขืื ืงืืงื ืืื ืขืืืขืืข ื ืืึทื ืกืื ืคืื ืื I / O ืกืึทืืกืืกืืึทื ืืื ืืืืขืจ ืคึผืจืึทื ืืืืฃ ืคืึธืจืฉืืขืืื ื.
ื ืคึผืึธืจ ืคืื ืืืึธืื ืฆืืจืืง ืืื ืืขืืืคื ืืื ืึท ืงืฉืื ืืืึธืก NVMe ืืืืฃ ืืืื ืกืขืจืืืขืจ ืืื ืกืืึธืืขืจ ืืื SATA ืืืืฃ ืื ืืขืจื. ืืื ืืขืงืืงื ืืืืฃ ืื ืงืขืจืึทืงืืขืจืืกืืืงืก ืคืื ืื ืกืขืจืืืขืจืก ืืื ืืืื ืืขืืขื ืึทื ืขืก ืืื ืืขืืืขื ืึท ืงืื ืฅ ืงืฉืื: NVMe ืืื ืคึฟืื ืื ืืึทื ืืฆืขืจ ืึธืคึผืฉื ืื, ืืื SSD ืืื ืคึฟืื ืื ืกืขืจืืืขืจ ืึธืคึผืฉื ืื.
ืืึธื, ืขืก ืืื ื ืืฉื ืจืืืืืง ืฆื ืคืึทืจืืืืึทืื ืคึผืจืึธืืืงืื ืคืื ืคืึทืจืฉืืืขื ืข ืกืขืืืึทื ืฅ ืืื ืคืึทืจืฉืืืขื ืข ืื ืืืืืจืึทื ืืึทื ืฅ, ืึธืืขืจ ืืึธืก ืืื ื ืืฉื ืึท ืืืืึธืกืืืื ืืขืื ืืฉ ืขื ืืคึฟืขืจื. ืืืจ ืืืขืื ืืขืจื ืขื ืื ืืึทืกืืงืก, ืึธื ืคืืจื ืืงืกืคึผืขืจืึทืืึทื ืฅ ืืื ืืขืื ืึทื ืขื ืืคืขืจ ืฆื ืื ืืขืฉืืขืืืข ืงืฉืื.
ืืืึธืก ืืื 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;
}
ืืึทืืขืจืงืื ืืขื ืืขืจืงืืขืจื ืื ืกืืงืืืึทื ืก ืคืื ืึทืงืฉืึทื ื ืืื ืืขื ืคึผืจืึธืืจืึทื ืืขืืื ื. ืืขืจ ืืขืงืกื "ืืขืจ ืขื ืืคืขืจ ืฆื ืื ืืืืคึผื ืงืฉืื ืคืื ืืขืื, ืื ืึทืืืืขืื ืืื ืึทืืข ืืืึธืก" ืืืขื ืืืื ืืึทืคืขืจื ืืืจื ืื ืึธืคึผืขืจืืืืื ื ืกืืกืืขื, ืืื ืืืื ืืืจ ืจืืกืืึทืจื ืื ืกืขืจืืืขืจ ืืืจื ืืจืื ืืืขื ืื ืืึทืฉืืขืืืง ืงื ืขืคึผื ืืขืฉืึทืก "ืืฉืืื ืืช", ืื ืืขืงืข ืืืขื ืืืื ืืืืืืง. ืืื ืืื ืืืขืจ ืืืึทืฉืคึผืื, ืืขืงืกื ืึธื ืืืขืจ ืืื ื ืืฉื ืึท ืคึผืจืึธืืืขื, ืึทืืื fsync ืืื ื ืื ืืืจืฃ. ืืึทืืึทืืืืกืื ืืึธื ื ืื ืืืืื ืืขื ืึธืคึผืืืืืื.
ืืึทืืึทืืืืกืื ืืขื ืขื ืงืึธืืคึผืืขืงืก ืืืืื ืืืึธืก ืึทืจืืขื ืืื ืคืืืข ืืขืงืขืก ืืื ืืขืจ ืืขืืืืงืขืจ ืฆืืื, ืึทืืื ืืื ืืืืื ืฆื ืืืื ืืืืขืจ ืึทื ืื ืืึทืื ืืื ืฉืจืืึทืื ืืืขื ืืืื ืกืืึธืจื ืืืืฃ ืื ืคืึธืจ, ืืืืึทื ืื ืงืึธื ืกืืกืืขื ืกื ืคืื ืืึทืื ืืื ืื ืืึทืืึทืืืืก ืืขืคึผืขื ืืก ืืืืฃ ืืขื. ืื ืืึทืืึทืืืืกืื ืืขื ืขื ืืืืืื ื ืฆื ืจืขืงืึธืจืืืจื ืึทืืข ืืขืขื ืืืงื ืืจืึทื ืืึทืงืฉืึทื ื ืืื ืืืื ืืจืืื ืคึฟืึทืจ ืึท ืืึทืื ืึทืืืืืืฉ ืืื ืงืืื ืืึธืืขื ื. ืืขื ืึธืคึผืคืืจืื ื ืึทืืืืืืืฉื ืืืจ ืฆื ื ืืฆื fsync ืงืขืกืืืืขืจ ืืื ืืจืืืก ืงืืืึทื ืืึทืืื.
ืืืึธืก ืึทืคืขืงืฅ ืื ืึธืคื ื ืืฆื ืคืื fsync
ืืื ื ืึธืจืืึทื ื / ืึธ, ืื ืึธืคึผืขืจืืืืื ื ืกืืกืืขื ืคืจืืืื ืฆื ืึทืคึผืืึทืืืื ืืืกืง ืงืึธืืื ืืงืึทืฆืืข, ืืืืึทื ืคืื ืืจืืืกื ืืืง ืืจืืืืื ืืขื ืขื ืื ืกืืึธืืึทืกื ืืื ืืขืจ ืืืงืึธืจื ืืืืขืจืึทืจืงื. ืืขืจืืืขืจ, ืื ืึธืคึผืขืจืืืืื ื ืกืืกืืขื ืคืจืืืื ืฆื ืฉืจืืึทืื ืืื ืคืื ืืึทืื ืืื ืืขืืืขื ืืื ืืืื ืึทืงืกืขืก ืฆื ืื ืคืึธืจ.
ืืึธืืืจ ืืึทืืืืึทืื ืื ืคึผืจืึทื ืคืื ื ืืฆื fsync ืืื ืึท ืกืคึผืขืฆืืคืืฉ ืืืึทืฉืคึผืื. ืืืจ ืืึธืื ืื ืคืืืืขื ืืข SSDs ืืื ืคึผืจืืืืจื ืกืึทืืืืฉืขืงืฅ:
- 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 ืืื Ubuntu 20.04. ืฆื ืคึผืจืืืืจื ืืืกืงืก, ืกืืกืืืขื ืืฉ 1.0.18 ืืื ืืขื ืืฆื. ืื ืืืกืงืก ืืึธืื ืึท ืืืื ืฆืขืืืืืื ื ืคืึธืจืืึทืืืขื ืืื ืขืงืกื4. ืคึผืจืืคึผืขืจืื ื ืคึฟืึทืจ ืื ืคึผืจืึธืืข ืืื ืฆื ืฉืึทืคึฟื 100 ืืืืืืืื ืืขืงืขืก:
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+
ืืืืขื ืขื ืึธื ืคืกืื ืง, MiB/s
5734.89
9028.86
ืฉืจืืื ืึธื ืคืกืื ืง, MiB/s
3823.26
6019.24
ืืืืขื ืขื ืืื fsync, MiB/s
37.76
3.27
ืจืขืงืึธืจืืื ื ืืื fsync, MiB/s
25.17
2.18
ืขืก ืืื ืืจืื ื ืฆื ืืขื ืึทื NVMe ืคึฟืื ืืขื ืงืืืขื ื ืึธืคึผืฉื ืื ืงืึทื ืคืึทืืึทื ืืื ืคืืจื ืืืขื ืื ืึธืคึผืขืจืืืืื ื ืกืืกืืขื ืืื ืืืกืืืื ืืื ืฆื ืึทืจืืขืื ืืื ืืืกืงืก ืืื ืคืืจืืืจื ืืืขื ืคืกืื ืง ืืื ืืขื ืืฆื. ืืึธืก ืฉืืขืื ืฆื ืฆืืืื ืฉืืืืช:
- ืคืืจืืืืก ืืื ืื ืืืืขื ืขื ืืืืงืืึทื ืืงืกืื ืื ืืฉืืืืช ืืึทื ืืืืืื ืคืื ืื ืืื ืง ืืื ืื ืคึผืจืึธืืข ืึธื ืคืกืื ืง?
- ืคืืจืืืืก ืืื ืึท ืกืขืจืืืขืจ ืึธืคึผืฉื ืื SSD ืืขืกืขืจ ืืื ืืึทื ืืืื ื ืึท ืืจืืืก ื ืืืขืจ ืคืื ืคืกืื ืง ืจืืงืืืขืก?
ืืขืจ ืขื ืืคืขืจ ืฆื ืืขืจ ืขืจืฉืืขืจ ืงืฉืื ืืื ืคึผืฉืื: ืกืืกืืขื ืืฉ ืืืฉืขื ืขืจืืืฅ ื ืื-ืึธื ืืขืคืืื ืืขืงืขืก. ืืืื, ืื ืคึผืจืึธืืข ืืื ืืืจืืืขืงืึธืื ืืืืขืจ 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+
ืืืืขื ืขื ืึธื ืคืกืื ืง, MiB/s
45.5
178
ืฉืจืืื ืึธื ืคืกืื ืง, 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 ืืื ืงืืื ืืึทืื ืึธื ืืืขืจ ืขืจืจืึธืจืก, ืืืึธืก ืืืื ืึทื ืขืก ืืื ืืจืืื ืคึฟืึทืจ ืืึธืืื ืืื ืคืืืข ืคืกืื ืง ืจืืคื.
ืกืึธืฃ
ืืืขื ืืฉืืืื ื ืืืกืงืก ืึธืืขืจ ืืึทื ืฅ ืคืึทืจืืืง ืงืึทื ืคืืืืขืจืืืฉืึทื ื, ืืืจ ืืึธื ืืึทืืื ืืื ืืื ืขื ืื ืกืคึผืขืกืืคืืงืก ืคืื ืื ืืึทืกืงืก ืืืึธืก ืืึทืจืคึฟื ืฆื ืืืื ืกืึทืืืื. ืืื ืขืจืฉืืขืจ ืืืืง, ืขืก ืืืื ื ืงืืึธืจ ืืื ืืขืจ ืืึธื ืึทื NVMe, ืืึธืก ืืื, ืึท SSD ืืื ืึท PCIe ืฆืืืื ื, ืืื ืคืึทืกืืขืจ ืืื ืึท "ืงืืึทืกืืฉ" SATA SSD. ืึธืืขืจ, ืืื ืืืจ ืืึธืื ืคืึทืจืฉืืึทื ืขื ืืืึทื ื, ืืื ืกืคึผืขืฆืืคืืฉ ืื ืึธืื ืืื ืืื ืืืืขืจ ืืึทืกืงืก ืงืขื ืืึธืก ื ืืฉื ืืืื ืืขืจ ืคืึทื.
ืืื ืืึธื ืืืจ ืคึผืจืืืืจื ืกืขืจืืืขืจ ืงืึทืืคึผืึธืื ืึทื ืฅ ืืืขื ืจืขื ืืื ื ืคืื ืึท IaaS ืฉืคึผืืึทืืขืจ?
ืืืจ ืืืืจืื ืคึฟืึทืจ ืืืจ ืืื ืื ืืึทืืขืจืงืื ืืขื.
ืืงืืจ: www.habr.com