OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 13 Декабрь, 2018 10:14

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 54 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: Вторник, 15 Январь, 2013 02:07 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2538
Откуда: Россия, Ярославль
Я видел цитату, конечно же. Видимо, выглядит назойливо, да :)
Правильно ли я понял, понимание повлияло в лучшую (без сомнения) сторону для всех уровней реализации компоненты, вплоть до винапи?
Собственно, у меня 'проблема" как раз с винапи, каждое погружение в которое вызывает во мне лютое отвращение, даже и не знаю, почему :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 15 Январь, 2013 02:15 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9060
Откуда: Россия, Орёл
Пётр, возьмите книги Рихтера - там WinApi в плане работы с памятью и прочей системщиной отлично описано.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 15 Январь, 2013 09:20 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
Илья Ермаков писал(а):
-- пардон, у Вас в цитате как раз про размер кластера тоже сказано. Ну дык - и какой на Вашей ФС размер кластера? :) А если она, например, в VDS, в виртуальной файловой системе, что для серверов почти норма сегодня - сколько там отображений до уровня НЖМД? :)

На персоналках сегодня в 99% случаев 4 КБ:
http://support.microsoft.com/kb/140365/ru
Для серверов может быть больше. Но обычно 4КБ - 8КБ.
Кстати автор Lua советует читать/писать по 8КБ.

Про VDS и Линупс ничего не скажу :)

И вот еще:
Цитата:
Каждый раз, когда происходит чтение или запись в файл с диска, то это происходит большими кусками, даже если вам нужен всего один байт. Так устроено, что минимальная физическая единица записи/чтения называется «сектор», стандартный размер которого 512 байт. Но при выборе файловой системы используется единица «кластер», размер которой кратен размеру сектора. При установке Windows, стандартный размер кластера – 4 KiB. Это значит, что если у вас есть файл размером 1 байт, то физически он будет занимать весь кластер. Соответственно при чтении/записи операционная система будет оперировать кластерами.
Из этого следует, что если записать в файл последовательно 2 KiB данных, а потом ещё 1 KiB, то на диск будет записано 4 KiB в первый раз, а потом 4 KiB второй раз. Чтобы избежать такой двойной записи в один и тот же кластер, достаточно объединить данные и скинуть их на диск за один раз. Также, если вы пытаетесь записать 2 KiB с позиции в файле 3 KiB, то первый KiB пойдёт в первый кластер, а второй KiB будет записан уже во второй кластер.
Похожая ситуация происходит при чтении. Если вы читаете сколь-угодно байт из файла, то будет прочитан весь кластер, а если данные пересекают границу двух кластеров – то два кластера. Хотя, стоит учесть, что все жёсткие диски и RAID контроллеры имеют внутренний кэш, который может существенно ускорить чтение и запись секторов.
Для избегания повторных операций чтения/записи, всегда оперируйте последовательными блоками памяти, размером в кластер. В этом поможет обычный класс FileStream, однако размер его внутреннего буфера по-умолчанию жёстко установлен в 4 KiB. Просто получите размер кластера, и передайте его в конструктор FileStream в качестве переменной bufferSize.

http://habrahabr.ru/post/165729/


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 15 Январь, 2013 12:42 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2233
Я попробовал 4k сделал, разницу не особо ощутил.
Сделал 8к — ББ стал летать ощутимо быстрее. У меня Ubuntu + Wine. Файловая система ext4.

Проверьте на Windows, чувствуется ли разница? Может у кого есть файловый benchmark?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 15 Январь, 2013 13:08 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
Иван Денисов писал(а):
Файловая система ext4.

А размер кластера какой?
хотя в Wine там фиг знает как оно работает

Сегодня постараюсь потестить вечером на винде.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 15 Январь, 2013 16:15 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9060
Откуда: Россия, Орёл
Так что там тестить - Иван же не с диском работает через файл, а наоборот - временный файл использует как буфер в памяти. Ясное дело, чем больше - тем быстрее будет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 15 Январь, 2013 16:31 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
Илья Ермаков писал(а):
Так что там тестить - Иван же не с диском работает через файл, а наоборот - временный файл использует как буфер в памяти. Ясное дело, чем больше - тем быстрее будет.

Ничего не понял :)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 15 Январь, 2013 19:36 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2233
Илья Ермаков писал(а):
Так что там тестить - Иван же не с диском работает через файл, а наоборот - временный файл использует как буфер в памяти. Ясное дело, чем больше - тем быстрее будет.
Да нет, на задаче по скачиванию не проверял. Да там это на самом деле и не критично, и на скорость скачивания скорее всего слабо повлияет. Мне показалось, что быстрее начали открываться документы и поиск по справке быстрее выполняться. Но вот проверил сейчас еще раз и, думаю, что нужен все-таки эталонный тест. Сложно «на глаз» оценить...


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 15 Январь, 2013 20:31 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4487
Откуда: Россия, Орёл
Иван Денисов писал(а):
Сложно «на глаз» оценить...
Ох, братцы... а если посмотреть вооружённым взглядом?
Вложение:
446404cbafcc.jpg
446404cbafcc.jpg [ 39.5 КБ | Просмотров: 8731 ]
Или прибавить в варево мышиный хвост, щепотку серы и каплю ртути --- приблизимся к философскому компоненту? ... :cry:


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 15 Январь, 2013 21:10 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2233
Евгений Темиргалеев писал(а):
Ох, братцы... а если посмотреть вооружённым взглядом?
Посмотрел вооруженным — разницы нет :) что 2K, что 8K.

Чтение хромосомы, и запись в другой файл ей комплементарной последовательности.
Homo_sapiens.GRCh37.68.dna.chromosome.1.fa (253.4 МБ)
2k = 78.2 сек
4k = 78.4 сек
8k = 78.8 сек
64k = 78.3 сек

Разница в пределах случайной погрешности (фрагментации винта и т.п.).


Вложения:
bm.7z [2.68 КБ]
Скачиваний: 132


Последний раз редактировалось Иван Денисов Вторник, 15 Январь, 2013 21:15, всего редактировалось 1 раз.
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 15 Январь, 2013 21:10 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2538
Откуда: Россия, Ярославль
Теперь для куска обсуждения (про кластеры на диске) понадобится целый подфорум "Эзотерика" (хотя и Флуд подойдёт)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 15 Январь, 2013 21:46 
Аватара пользователя

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1162
Откуда: Tel-Aviv
Иван Денисов писал(а):
И длинные строки безразмерные тоже значит можно через Files делать? Такое часто надо для биоинформатики, например, где строки очень большие. И для приема данных с прибора...
Данные с прибора имеет смысл обрабатывать по мере поступления, в памяти.

Ещё мне вспомнился TextModels.Model из-за его способности гибко работать над текстом (вставка/вырезка текста). Хотя он может быть слишком "жирным" в памяти для безатрибутного и длинного текста.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 15 Январь, 2013 22:18 
Аватара пользователя

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1162
Откуда: Tel-Aviv
Просмотрел код bm.7z:
конвертер может быть слишком дорогостоящей операцией для такого вида манипуляций.
Я бы избавился от него в первую очередь.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 15 Январь, 2013 23:25 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
Потестил на Windows 7

Размер файла 1,5 ГБ
чтение:
2 КБ - 26193 миллисек 27253 миллисек
4 КБ - 24835 миллисек 25740 миллисек
8 КБ - 25912 миллисек 30014 миллисек


Размер файла 400 МБ
чтение:
2 КБ - 5600 миллисек 5600 миллисек
4 КБ - 5600 миллисек 5585 миллисек
8КБ - 5850 миллисек 5616 миллисек

Размер файла 1,8 ГБ
чтение:
2 КБ - 27004 миллисек 28579 миллисек
4 КБ - 28127 миллисек 28595 миллисек

Размер кучи файлов по ~4 МБ Всего 2,37 ГБ
чтение:
2 КБ - 42838 миллисек
4 КБ - 42198 миллисек
8 КБ - 41558 миллисек
16 КБ - 42573 миллисек

В общем разницы практически никакой. Думаю что виновник сего безобразия виндозный системный буфер :) Т.е. буфер BB похоже вообще ни на что не влияет.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 16 Январь, 2013 00:25 

Зарегистрирован: Вторник, 29 Август, 2006 12:32
Сообщения: 2538
Откуда: Россия, Ярославль
Роман М. писал(а):
Иван Денисов писал(а):
Ещё мне вспомнился TextModels.Model из-за его способности гибко работать над текстом
Текст тоже буферизуется в Files.dir.Temp()


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 16 Январь, 2013 08:14 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4487
Откуда: Россия, Орёл
Выделена тема: "Free Pascal буферизованное чтение и запись" (viewtopic.php?f=27&t=4217)

Поближе к теме, товарищи, пожалуйста. Свои темы поднимать не стесняемся, места всем хватит.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 16 Январь, 2013 09:58 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 7932
Откуда: Троицк, Москва
ilovb писал(а):
Думаю что виновник сего безобразия виндозный системный буфер :)
Он всегда был очень агрессивный.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 16 Январь, 2013 10:19 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
Весь мой тест ф топку. :(
Сделал трап во время чтения и оказалось что буфер так и остался 2 * 1024 ...
HostFiles в exe слинкован?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 16 Январь, 2013 10:25 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
Действительно :)

info21:
Цитата:
Таким способом нельзя подменить только BlackBox.exe и скомпилированные модули, в него скомпонованные: Kernel, Files, HostFiles, StdLoader.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 16 Январь, 2013 10:42 

Зарегистрирован: Вторник, 30 Июнь, 2009 14:58
Сообщения: 1438
И еще. Для корректного тестирования надо бы флаг FILE_FLAG_NO_BUFFERING выставить чтобы системный буфер не смазывал картину.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 54 ]  На страницу Пред.  1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2018, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB