Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Низкая скорость хеширования маленьких файлов #993

Open
pavel-pimenov opened this issue Aug 23, 2015 · 15 comments

Comments

@pavel-pimenov
Copy link
Owner

From mike.kor...@gmail.com on March 22, 2013 16:54:55

Устанавливаем флайлинк, выбираем для расшаривания папку с множеством мелких файлов (сотни и тысячи байт).
Смотрим на статус хеширования.
Низкая скорость это не ошибка вычисления, она держится продолжительное время > 8часов.

Attachment: FlyLink_slow_hashing.png

Original issue: http://code.google.com/p/flylinkdc/issues/detail?id=956

@pavel-pimenov
Copy link
Owner Author

From Pavel.Pimenov@gmail.com on March 22, 2013 09:33:10

Т.е. поток завис?
на картинке бета 73 я ее час назад только выпустил.
почему 8 часов. или и старые бетки вешались?
а файлы меняются или вот этот файл стоит один?

Можете эти файлы завернуть в архив и кинуть мне в личку через обменник.
там ведь нет секретного ничего раз вы их шарите )

Status: Accepted
Labels: -Priority-Medium Priority-Critical

@pavel-pimenov
Copy link
Owner Author

From mike.kor...@gmail.com on March 22, 2013 11:02:50

Старые также работали, поток не завис хеширование идет по 3-10файлов в секунду.

@pavel-pimenov
Copy link
Owner Author

From zippoz...@gmail.com on March 22, 2013 11:09:18

Позволю предположить - железо виновато? В данном случае наверняка WD Грин какой-нить.

@pavel-pimenov
Copy link
Owner Author

From mike.kor...@gmail.com on March 22, 2013 19:51:16

http://yadi.sk/d/Dz9ShIhQ3TZOK - это архив более 300000 файлов, упаковывался 7z со скоростью более 2МБ/с, против 30-60кб/с хеширования. Диск зеленый, большой, кэш 64Мб, системный кэш еще больше (вся папка там 2 раза уместилась бы), произвольный доступ около 20мс, линейная скорость чтения 100-48МБ/с, раздача с него была и в момент архивации (архив писался на тот же диск).
Смею предположить, что что-то не то в клиенте, может быть, каждый файл порождает sql обращение к базе, может еще какую кучу ненужных действий, типа срочной записи xml файла на диск и его переупаковки в bz2.

@pavel-pimenov
Copy link
Owner Author

From Pavel.Pimenov@gmail.com on March 23, 2013 01:22:44

Скачал. поставил под профайлером на тест.

@pavel-pimenov
Copy link
Owner Author

From Pavel.Pimenov@gmail.com on March 23, 2013 02:01:28

Пока заметил баг

Статус пишет 5 файлов/час https://www.box.net/shared/f3nj0amw6njvk4v39ifq Хотя по логу файлики обрабатываются шустрее:
[2013-03-23 12:58:07] Хеширование завершено: ...\10344\6.gif (1,81 МБ/с)
[2013-03-23 12:58:07] Хеширование завершено: ...\10344\7.gif (5,26 МБ/с)
[2013-03-23 12:58:07] Хеширование завершено: ...\10344\8.gif (842,60 кБ/с)
[2013-03-23 12:58:07] Хеширование завершено: ...\10344\9.gif (747,96 кБ/с)
[2013-03-23 12:58:07] Хеширование завершено: ...\10345\0.gif (470,38 кБ/с)
[2013-03-23 12:58:07] Хеширование завершено: ...\10345\1.gif (4,98 МБ/с)
[2013-03-23 12:58:07] Хеширование завершено: ...\10345\2.gif (8,60 МБ/с)
[2013-03-23 12:58:07] Хеширование завершено: ...\10345\3.gif (10,74 МБ/с)
[2013-03-23 12:58:07] Хеширование завершено: ...\10345\4.gif (9,15 МБ/с)
[2013-03-23 12:58:07] Хеширование завершено: ...\10345\5.gif (10,13 МБ/с)
[2013-03-23 12:58:07] Хеширование завершено: ...\10345\6.gif (15,74 МБ/с)
[2013-03-23 12:58:08] Хеширование завершено: ...\10345\7.gif (4,96 МБ/с)
[2013-03-23 12:58:08] Хеширование завершено: ...\10346\0.gif (1,63 МБ/с)
[2013-03-23 12:58:08] Хеширование завершено: ...\10346\1.gif (6,29 МБ/с)
[2013-03-23 12:58:08] Хеширование завершено: ...\10346\2.gif (2,04 МБ/с)
[2013-03-23 12:58:08] Хеширование завершено: ...\10346\3.gif (6,24 МБ/с)
[2013-03-23 12:58:08] Хеширование завершено: ...\10346\4.gif (9,18 МБ/с)
[2013-03-23 12:58:08] Хеширование завершено: ...\10347\0.gif (3,57 МБ/с)
[2013-03-23 12:58:08] Хеширование завершено: ...\10347\1.gif (8,41 МБ/с)
[2013-03-23 12:58:09] Хеширование завершено: ...\10347\2.gif (13,41 МБ/с)
[2013-03-23 12:58:09] Хеширование завершено: ...\10347\3.gif (8,53 МБ/с)
[2013-03-23 12:58:09] Хеширование завершено: ...\10348\0.gif (6,37 МБ/с)
[2013-03-23 12:58:09] Хеширование завершено: ...\10348\1.gif (19,13 МБ/с)
[2013-03-23 12:58:09] Хеширование завершено: ...\10348\2.gif (3,37 МБ/с)
[2013-03-23 12:58:09] Хеширование завершено: ...\10348\3.gif (23,06 МБ/с)
[2013-03-23 12:58:09] Хеширование завершено: ...\10348\4.gif (3,48 МБ/с)
[2013-03-23 12:58:09] Хеширование завершено: ...\10348\5.gif (11,10 МБ/с)
[2013-03-23 12:58:09] Хеширование завершено: ...\10348\6.gif (3,46 МБ/с)
[2013-03-23 12:58:09] Хеширование завершено: ...\10349\0.gif (495,77 кБ/с)
[2013-03-23 12:58:09] Хеширование завершено: ...\10349\1.gif (9,39 МБ/с)
[2013-03-23 12:58:10] Хеширование завершено: ...\10349\2.gif (1,48 МБ/с)
[2013-03-23 12:58:10] Хеширование завершено: ...\10349\3.gif (15,92 МБ/с)
[2013-03-23 12:58:10] Хеширование завершено: ...\10349\4.gif (7,62 МБ/с)
[2013-03-23 12:58:10] Хеширование завершено: ...\10349\5.gif (3,21 МБ/с)
[2013-03-23 12:58:10] Хеширование завершено: ...\10350\0.gif (6,93 МБ/с)
[2013-03-23 12:58:10] Хеширование завершено: ...\10350\1.gif (15,31 МБ/с)
[2013-03-23 12:58:10] Хеширование завершено: ...\10350\10.gif (1,18 МБ/с)
[2013-03-23 12:58:10] Хеширование завершено: ...\10350\11.gif (1,01 МБ/с)
[2013-03-23 12:58:10] Хеширование завершено: ...\10350\12.gif (1,79 МБ/с)
[2013-03-23 12:58:10] Хеширование завершено: ...\10350\13.gif (209,81 кБ/с)
[2013-03-23 12:58:11] Хеширование завершено: ...\10350\2.gif (6,54 МБ/с)
[2013-03-23 12:58:11] Хеширование завершено: ...\10350\3.gif (11,64 МБ/с)
[2013-03-23 12:58:11] Хеширование завершено: ...\10350\4.gif (11,49 МБ/с)
[2013-03-23 12:58:11] Хеширование завершено: ...\10350\5.gif (6,27 МБ/с)
[2013-03-23 12:58:11] Хеширование завершено: ...\10350\6.gif (13,73 МБ/с)
[2013-03-23 12:58:11] Хеширование завершено: ...\10350\7.gif (7,63 МБ/с)
[2013-03-23 12:58:11] Хеширование завершено: ...\10350\8.gif (17,17 МБ/с)
[2013-03-23 12:58:11] Хеширование завершено: ...\10350\9.gif (8,20 МБ/с)

Status: Started

@pavel-pimenov
Copy link
Owner Author

From mike.kor...@gmail.com on March 23, 2013 15:59:37

Думаю, проблема может быть с лог-файлом, у меня он оказался сильно фрагментирован.
С чего бы ? ;-)

11000 фрагментов
что там на счет остальной писанины?

@pavel-pimenov
Copy link
Owner Author

From Pavel.Pimenov@gmail.com on March 27, 2013 09:22:06

Провел тестирование разными способами открывать файлики
boost::iostreams::mapped_file_source
почти в 2 раза быстрее текущего способа чтения файлов.
это конечно не регит проблему, но элемент ускорения есть.

Attachment: atlfile-atlfilemapping-boost-maped-file-benchmark.png

@pavel-pimenov
Copy link
Owner Author

From Pavel.Pimenov@gmail.com on March 27, 2013 09:23:25

А какой файл лога фрагментирован - имя какое?
сейчас логи после каждого "чиха" сразу скидываются на диск
т.к. файл открывается и закрывается.

если отключить логи у вас станет намного лучше?

@pavel-pimenov
Copy link
Owner Author

From mike.kor...@gmail.com on March 28, 2013 18:06:04

Файл, естественно, тот, в который пишутся наши грандиозные успехи хеширования Settings\Logs\System.log
Отключил логи чатов и все какие есть в настройках. Стоит галка открывать логи внутри программы. Однако, системный лог все равно пишется:
[2013-03-29 04:31:22] Хеширование завершено: ...\10028\13.gif (4,32 МБ/с)
[2013-03-29 04:31:22] Хеширование завершено: ...\10028\130.gif (856,80 кБ/с)
[2013-03-29 04:31:22] Хеширование завершено: ...\10028\131.gif (1,48 МБ/с)
...
[2013-03-29 04:45:12] Хеширование завершено: ...\10590\43.gif (4,95 МБ/с)
[2013-03-29 04:45:12] Хеширование завершено: ...\10590\44.gif (6,38 МБ/с)
[2013-03-29 04:45:12] Хеширование завершено: ...\10590\45.gif (5,86 МБ/с)
...
[2013-03-29 04:50:46] Хеширование завершено: ...\43151\7.gif (18,31 МБ/с)
[2013-03-29 04:50:46] Хеширование завершено: ...\43151\8.gif (8,71 МБ/с)
[2013-03-29 04:50:46] Хеширование завершено: ...\43151\9.gif (8,98 МБ/с)
[2013-03-29 04:50:46] Хеширование завершено: ...\43153\0.gif (6,01 МБ/с)
[2013-03-29 04:50:46] Хеширование завершено: ...\43153\1.gif (9,76 МБ/с)
[2013-03-29 04:50:46] Хеширование завершено: ...\43153\2.gif (7,13 МБ/с)
[2013-03-29 04:50:46] Хеширование завершено: ...\43153\3.gif (3,43 МБ/с)
[2013-03-29 04:50:46] Хеширование завершено: ...\43153\4.gif (5,62 МБ/с)
[2013-03-29 04:50:46] Хеширование завершено: ...\43155\0.gif (4,59 МБ/с)
[2013-03-29 04:50:46] Хеширование завершено: ...\43155\1.gif (6,88 МБ/с)
[2013-03-29 04:50:46] Хеширование завершено: ...\43155\2.gif (6,37 МБ/с)
...
Не знаю какие там мегабайты но за секунду прохешировано 11 файлов общим размером 145308 байт

Вообще, хеширование всегда странно себя вело. В данном случае, наблюдаю асинхронность составления списка для хеширования и сам процесс хеширования. Так количество и объем файлов растет независимо от того стоит ли хеширование на паузе или нет. А если нажать отмену хеширования - оно не прекращается и об этом есть записи в логе.

В моем случае, из-за специфичной структуры хешируемой папки (очень много вложенных папок, а в них много коротких файлов, размером 1-2 кластера) чтение папок и файлов входит в конкуренцию и не получается последовательного чтения с диска, видимо при составлении списка чтение папок идет с растущим отрывом от места фактического хеширования.

Attachment: FlyLink_slow_hashing2.png

@pavel-pimenov
Copy link
Owner Author

From Pavel.Pimenov@gmail.com on March 28, 2013 19:21:04

Я вашу структуру каталогов себе установил для теста.
ищу способы оптимизации.

@pavel-pimenov
Copy link
Owner Author

From mike.kor...@gmail.com on November 05, 2013 12:21:23

Все еще актуально. DC++ хеширует в несколько раз а то и на порядок быстрее.

@pavel-pimenov
Copy link
Owner Author

From Pavel.Pimenov@gmail.com on November 05, 2013 18:18:28

Можешь в функции bool HashManager::getMediaInfo(const string& p_name, CFlyMediaInfo& p_media, int64_t p_size, const TTHValue& p_tth, bool p_force /* = false*/)

в начале поставить return false;

и сравнить скорость?

@pavel-pimenov
Copy link
Owner Author

From mike.kor...@gmail.com on November 05, 2013 20:56:06

Скомпилировал с изменением.
Запись лога в файл отменить нельзя.
Но ничего не изменилось (файлы по 3-20кБ) :
[2013-11-06 08:51:26] Хеширование завершено: ...\16916\0.gif (7,92 МБ/с)
[2013-11-06 08:51:26] Хеширование завершено: ...\16916\1.gif (4,75 МБ/с)
[2013-11-06 08:51:26] Хеширование завершено: ...\16920\0.gif (5,97 МБ/с)
[2013-11-06 08:51:26] Хеширование завершено: ...\16920\1.gif (14,64 МБ/с)
[2013-11-06 08:51:26] Хеширование завершено: ...\16920\2.gif (12,44 МБ/с)
[2013-11-06 08:51:26] Хеширование завершено: ...\16920\3.gif (3,76 МБ/с)
[2013-11-06 08:51:26] Хеширование завершено: ...\16920\4.gif (25,78 МБ/с)
[2013-11-06 08:51:26] Хеширование завершено: ...\16920\5.gif (7,67 МБ/с)
[2013-11-06 08:51:26] Хеширование завершено: ...\16920\6.gif (8,50 МБ/с)
[2013-11-06 08:51:26] Хеширование завершено: ...\16920\7.gif (1,96 МБ/с)
[2013-11-06 08:51:26] Хеширование завершено: ...\16924\0.gif (10,71 МБ/с)
[2013-11-06 08:51:26] Хеширование завершено: ...\16924\1.gif (6,20 МБ/с)
[2013-11-06 08:51:26] Хеширование завершено: ...\16924\2.gif (8,72 МБ/с)
[2013-11-06 08:51:26] Хеширование завершено: ...\16924\3.gif (4,29 МБ/с)
[2013-11-06 08:51:26] Хеширование завершено: ...\16927\0.gif (4,40 МБ/с)
[2013-11-06 08:51:26] Хеширование завершено: ...\16927\1.gif (4,01 МБ/с)
[2013-11-06 08:51:26] Хеширование завершено: ...\16927\2.gif (6,87 МБ/с)
[2013-11-06 08:51:27] Хеширование завершено: ...\16927\3.gif (1,58 МБ/с)
[2013-11-06 08:51:27] Хеширование завершено: ...\16927\4.gif (5,21 МБ/с)
[2013-11-06 08:51:27] Хеширование завершено: ...\16927\5.gif (274,72 кБ/с)
[2013-11-06 08:51:27] Хеширование завершено: ...\16929\0.gif (3,97 МБ/с)
[2013-11-06 08:51:27] Хеширование завершено: ...\16929\1.gif (4,74 МБ/с)
[2013-11-06 08:51:27] Хеширование завершено: ...\16929\10.gif (4,61 МБ/с)
[2013-11-06 08:51:27] Хеширование завершено: ...\16929\11.gif (5,55 МБ/с)
[2013-11-06 08:51:27] Хеширование завершено: ...\16929\12.gif (6,53 МБ/с)
[2013-11-06 08:51:27] Хеширование завершено: ...\16929\13.gif (7,55 МБ/с)
[2013-11-06 08:51:27] Хеширование завершено: ...\16929\14.gif (8,30 МБ/с)
[2013-11-06 08:51:27] Хеширование завершено: ...\16929\15.gif (3,09 МБ/с)
[2013-11-06 08:51:27] Хеширование завершено: ...\16929\2.gif (6,67 МБ/с)
[2013-11-06 08:51:27] Хеширование завершено: ...\16929\3.gif (403,07 кБ/с)
[2013-11-06 08:51:27] Хеширование завершено: ...\16929\4.gif (11,49 МБ/с)
[2013-11-06 08:51:27] Хеширование завершено: ...\16929\5.gif (10,05 МБ/с)
[2013-11-06 08:51:27] Хеширование завершено: ...\16929\6.gif (6,93 МБ/с)
[2013-11-06 08:51:27] Хеширование завершено: ...\16929\7.gif (7,29 МБ/с)
[2013-11-06 08:51:27] Хеширование завершено: ...\16929\8.gif (13,25 МБ/с)

@pavel-pimenov
Copy link
Owner Author

From Pavel.Pimenov@gmail.com on November 09, 2013 00:47:56

Получается медиаинфа тут не виновата.
а можешь лог аналогичного от DC++ сдеалать на своей системе
для сравнения что там 10 раз

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant