LINUX.ORG.RU

Избранные сообщения Nao

1c очень долго открывает файлы на NFS, CIFS

Форум - General

По сути вопрос мало касается самой 1с.
Открываю в конфигураторе 1С 8.3 файл конфигурации (*.cf). Размером он около 200-300 Мб.

Если открывать с локальной фс, то открытие происходит за несколько секунд.
Если открывать с nfs или cifs то открытие занимает минут 10 (sic!).

Моя машина и NAS с файлами находятся в сети 100Mbit/s.
Копирование файла с NFS на локальную фс идёт со скоростью близкой к 80-90Mbit/s.

Далее рассматриваем открытие файла на nfs3:
С помощью strace -cw выясняем что очень долго выполняется read:

% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 57.41 2007.728556      478600      4195      1538 futex
 28.74 1005.053317      434900      2311           epoll_wait
 13.04  455.978200         596    764976        25 read
  0.41   14.455605          14   1038231           lseek
(Насколько я понял futex и epoll_wait тут вообще не причём, они похоже не связаны с тормозами и время исполнения у них слишком большое)

Если просто сделать strace и посмотреть что делается с нашим файловым дескриптором то можно увидеть что-то такое:

open("/mnt/nas/foo/bar/1Cv8.cf", O_RDONLY) = 83 <0.000631>
fcntl(83, F_GETFD)                = 0 <0.000004>
fcntl(83, F_SETFD, FD_CLOEXEC)    = 0 <0.000004>
flock(83, LOCK_SH|LOCK_NB)        = 0 <0.000007>
open("/mnt/nas/foo/bar/1Cv8.cf", O_RDWR) = 84 <0.000616>
fcntl(84, F_GETFD)                = 0 <0.000017>
fcntl(84, F_SETFD, FD_CLOEXEC)    = 0 <0.000004>
fcntl(84, F_SETLK, {type=F_WRLCK, whence=SEEK_SET, start=4294967296, len=1}) = 0 <0.000012>
Целых два дескриптора на один файл.
На кой чёрт открывается второй с O_RDWR я понятия не имею, ибо менять файл 1С-ка всё равно не может.

И потом идёт куча таких вызовов:

lseek(83, 0, SEEK_END)            = 211404996 <0.000005>
lseek(83, 16, SEEK_SET)           = 16 <0.000004>
read(83, "\r\n00057a80 00057a80 7fffffff \r\n", 31) = 31 <0.000007>
lseek(83, 47, SEEK_SET)           = 47 <0.000004>
read(83, "\257z\5\0.{\5\0\377\377\377\177", 12) = 12 <0.000004>
lseek(83, 0, SEEK_END)            = 211404996 <0.000004>
lseek(83, 359087, SEEK_SET)       = 359087 <0.000003>
read(83, "\r\n00000060 00000060 7fffffff \r\n", 31) = 31 <0.001051>

Т.е. мы постоянно прыгаем в разные места файла и делаем read небольшими порциями (32 байта и меньше).
Таким образом читается весь файл (200-300 мегабайт).

Насколько я понимаю сетевые фс NFS/CIFS на такое не рассчитаны?

Способ обхода
Пока писал пост вроде нашёл решение, хотя хотелось бы попробовать другие и лучше понять почему происходят тормоза.

Чтобы всё работало почти так же быстро как работает локально делаем следующее:

  1. Настраиваем FS-Cache
  2. Монтируем NFS со следующими опциями: vers=4,fsc,ro

fsc - включаем кэширование через FS-Cache
vers=4 - на третьей кэширование с нашим файлом не работает, по-видимому из-за того что 1с открывает дескриптор на чтение/запись; в документации по FS-Cache написано что на NFSv3 кэш на файле отрубается пока открыт R/W дескриптор, а на NFSv4 всё ок.
ro - связано с одним тупым багом, из-за которого нельзя из 1с открывать файлы на NFSv4 если она смонтирована в r/w, к сабжу не относится.

С CIFS я ничего не придумал, хотя мне он особо и не нужен.
С NFSv3 тоже ничего не получается из-за того что файл открывается r/w и кэширование не работает.

 , , ,

Nao ()

Сайт для скринкастов терминальных сессий

Форум - Talks

Наткнулся случайно на сайт: https://asciinema.org/
Это вроде как script+wgetpaste+pastebin.

Можно записывать терминальные сессии типо как это делает script и выкладывать на их сайт.
Прелесть в том что это отображается не как видео, а как текст, который можно копипастить.
Для записи нужно поставить тузлу на питоне (есть в некоторых дистрах, например в Gentoo).
Может кому-то понадобится такое.


Пример:
http://asciinema.org/a/ad3lgm6hl8ocqc7h5owpt3486

 ,

Nao ()

Пластилиновый квест Armikrog

Новости - Игры
Группа Игры

Создатели игр The Neverhood и Earthworm Jim объявили сбор средств на выпуск новой игры с поддержкой GNU/Linux. Главный герой и его верный говорящий четвероногий друг терпят крушение на космическом корабле. Необычные враги и хорошо вылепленный мир прилагается. Классический квест сулит окружающему миру тонны использованного пластилина и горы веселья.

>>> Ссылка на kickstarter

 

Evgueni ()

network discovering

Форум - Admin

subj. Ну очень надо простую в использовании тулзу для «изучения сети». Нечто что можно поставить на нотебук, за день просканить сеть,чутка подстроить и оставить на неделю чтобы снять всякие показания (нагрузки на каналы, наличие конфликтов, потери и так далее).

пока-что всё испробованное (zabbix,nagion,netdisco,wiredmaps) либо требует долгой предварительной настройки, либо не умеет мониторить автоматом-обнаруженное. И абсолютно всё не умеет работать в оперативных условиях - нет use-case «новая сеть-изучить-уточнить-снимать статистику-сохранить». Все они ориентированны на то что ставятся сразу и навсегда на выделенный сервер подконтрольной сети.

MKuznetsov ()

Паленый мед (по мотивам известной серии)

Форум - Talks

Звук модема, подключающегося на 9600 бод, впился в ухо ВП, проник в его мозг и заставил открыть глаза. «Что-то случилось» — пронеслось в мозгу ВП, зрение постепенно возвращалось к нему. Кое-как поднявшись на 4-ре лапы и проклиная Дарвина, ВП пополз к столу, но по дороге вляпался во что-то липкое и вонючее. Надо завязывать жить на первом этаже подумал ВП, глядя как дождь месит говно по ту сторону окна. Говна изрядно прибыло: того и гляди дойдет до форточки и прорвется внутрь. В последнюю осушительную канаву ВП только вчера закопал новую линию оптоволокна. После чего всю канаву закатал в асфальт, чтобы кабель не сперли пчелы, что было весьма вероятно, т.к. этот кабель он сам срезал у пчелиного провайдера «пчел-нет» два дня назад. Оттерев лапу о корпус компа, который кролик принес ему неделю назад на ремонт, ВП продолжил путь к столу. Мозг его лихорадочно работал. Дело в том, что звук модема он не слышал уже десять лет, с тех пор, как через лес был проложен магистральный кабель федерального значения, к которому он и подключился через местный филиал пчел-нета. Но модем орал, и это значит, что был задействован резервный канал связи. Значит был взлом, его голландский сервер взломали, хотя защита последней надежды сработала, и все что было в базах сейчас шифруется с новыми кодами, а через модем сливаются эти новые коды и логи. Но кто, как, и главное, что они успели там увидеть? Официально на сервере крутился сайт с форумом, но это было прикрытие. ВП ухватился за край стула попытался подняться, но стул перевернулся, задев горшок с окурками, который и упал на голову ВП, отправив его в короткий нокаут.

...

 

soomrack ()