LINUX.ORG.RU

git index-fuck


0

2

С недавнего времени перестал работать git с kernel.org...

# export GIT_TRACE=1;
# git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
trace: built-in: git 'clone' 'git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git'
Cloning into 'linux-stable'...
trace: run_command: 'index-pack' '--stdin' '-v' '--fix-thin' '--keep=fetch-pack 11942 on localhost'
trace: exec: 'git' 'index-pack' '--stdin' '-v' '--fix-thin' '--keep=fetch-pack 11942 on localhost'
trace: built-in: git 'index-pack' '--stdin' '-v' '--fix-thin' '--keep=fetch-pack 11942 on localhost'
remote: Counting objects: 2899206, done.
remote: Compressing objects: 100% (453229/453229), done.
remote: Total 2899206 (delta 2433956), reused 2882999 (delta 2418221)

На другой консоли

# ps ax | grep [g]it
16184 pts/1    S+     0:00 git pull
16185 pts/1    S+     0:00 /bin/sh /usr/lib/git-core/git-pull
16203 pts/1    Sl+    0:00 git fetch --update-head-ok
16662 pts/1    S+     0:01 git index-pack --stdin -v --fix-thin --keep=fetch-pack 16203 on localhost --pack_header=2,2899206

После выкачивания двух гигов, процесс «git index-pack» клинит. Обновления git ни из дистра, ни из последних исходников не помогло. 

Трейс процесса git index-pack

# strace -p 16662 
Process 16662 attached
read(0, 0x7672c0, 4096)                 = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL} ---
rt_sigreturn()                          = 0
read(0, 0x7672c0, 4096)                 = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL} ---
rt_sigreturn()                          = 0
read(0, 0x7672c0, 4096)                 = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL} ---
rt_sigreturn()                          = 0
read(0, 0x7672c0, 4096)                 = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL} ---
rt_sigreturn()                          = 0
read(0, 0x7672c0, 4096)                 = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL} ---
rt_sigreturn()                          = 0
read(0, 0x7672c0, 4096)                 = ? ERESTARTSYS (To be restarted if SA_RESTART is set)
--- SIGALRM {si_signo=SIGALRM, si_code=SI_KERNEL} ---
rt_sigreturn()                          = 0

Такой глюк возникает на проектах с большим количеством объектов,примерно от 20000 и дальше.
Ядро 3.2.35 и 3.7, кстати глюк появился ещё в октябре, лень писать было. :)
OpenSuSE 12.2
sysctl не трогал
на дисках места навалом
/tmp как tmpfs или xfs - пофиг, не забивается.
xfs, reiserfs3, ext2/3/4, btrfs, jfs - пофиг.
другая сетевуха - пофиг



Последнее исправление: pavlinux (всего исправлений: 2)

У меня подозрения на лимит на размер непрерывного куска памяти. И ещё я где-то видел, что 32-битный git что-то там не может, когда размер чего-то больше гига. И нет никаких потугов решения этой проблемы; предлагается переходить на 64 бита. Мол, там такой проблемы нет.

В связи с чем вопрос: у тебя какая разрядность?

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Разрядность правильная, pure 64-bit.
Видел похожие репорты, там рекомендовали собирать git с флагом NO_MMAP

# NO_MMAP=1 ./configure;

---

Похоже, всё таки глюк у XFS, так как на tmpfs скачалось :)

pavlinux
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.