Я работаю над встроенным программным обеспечением, где я использовал cryptsetup для создания зашифрованного дискового пространства через стандартное соединение NFS ethernet... Мне интересно понять скорость записи, которую достигает этот диск (простой анализ производительности).
Сначала я запускаю стандартный бенчмарк
root@sbc-lynx:/mnt# cryptsetup benchmark
# Tests are approximate using memory only (no storage IO).
PBKDF2-sha1 33098 iterations per second for 256-bit key
PBKDF2-sha256 52851 iterations per second for 256-bit key
PBKDF2-sha512 34492 iterations per second for 256-bit key
PBKDF2-ripemd160 29789 iterations per second for 256-bit key
PBKDF2-whirlpool 7062 iterations per second for 256-bit key
# Algorithm | Key | Encryption | Decryption
aes-cbc 128b 26.7 MiB/s 24.5 MiB/s
serpent-cbc 128b 6.6 MiB/s 7.3 MiB/s
twofish-cbc 128b 10.2 MiB/s 11.0 MiB/s
aes-cbc 256b 21.4 MiB/s 20.8 MiB/s
serpent-cbc 256b 6.6 MiB/s 7.3 MiB/s
twofish-cbc 256b 10.2 MiB/s 10.2 MiB/s
aes-xts 256b 9.0 MiB/s 9.0 MiB/s
serpent-xts 256b 7.0 MiB/s 7.2 MiB/s
twofish-xts 256b 10.7 MiB/s 10.9 MiB/s
aes-xts 512b 7.1 MiB/s 7.0 MiB/s
serpent-xts 512b 7.0 MiB/s 7.1 MiB/s
twofish-xts 512b 10.7 MiB/s 10.9 MiB/s
Просто для целей тестирования я выбрал eaes-cbc-256, который, кажется, имеет хорошую производительность.
Но теперь я хочу проверить реальную достигнутую скорость. Мой NFS смонтирован в /mnt/, а зашифрованная папка правильно смонтирована в /home/encryptroot/. Я использовал:
time dd bs=5M count=1 if=/dev/zero of=/mnt/ppx conv=fsync
1+0 records in
1+0 records out
real 0m0.556s
user 0m0.000s
sys 0m0.110s
time dd bs=5M count=1 if=/dev/zero of=/home/encryptroot/ppx conv=fsync
1+0 records in
1+0 records out
real 0m1.104s
user 0m0.000s
sys 0m0.180s
Из этих результатов я получил в обычной папке скорость почти 9 МБ/с,
тогда как для зашифрованной папки я получил 4 МБ/с.
Вопрос 1) Является ли это допустимым методом оценки скорости записи? Используя параметр fsync, можно оценить время, затраченное на реальное копирование файла на диск (а не на копирование в кэши)?
Я не удовлетворен этими результатами, поскольку при потенциальной скорости шифрования 20 МБ/с я не могу заполнить всю доступную полосу пропускания (около 9 МБ/с).
Окончательное расследование: я изменил шифр и использовал aes-xts по умолчанию, который должен достичь максимума в 9 МБ/с. Я повторил
time dd bs=5M count=1 if=/dev/zero of=/home/encryptroot/ppx conv=fsync
1+0 records in
1+0 records out
real 0m2.281s
user 0m0.000s
sys 0m0.180s
Получение скорости записи 2,2 МБ/с.
Вопрос 2) есть ли другие факторы, которые следует учитывать, и которые я упускаю из виду, чтобы проанализировать эти результаты? Возможно, что накладные расходы xts настолько высоки, что снижают пропускную способность? И есть ли другие тесты, которые можно предложить?
Спасибо