mirror of
https://github.com/ceph/ceph
synced 2025-01-14 06:53:11 +00:00
Ceph is a distributed object, block, and file storage platform
a5297388a7
If poll() says a socket is ready for reading, but zero bytes are read, that means that the peer has sent a FIN. Handle that. One way the incorrect handling was manifesting is as follows: Under a heavy write load, clients log many messages like this: [19021.523192] libceph: tid 876 timed out on osd6, will reset osd [19021.523328] libceph: tid 866 timed out on osd10, will reset osd [19081.616032] libceph: tid 841 timed out on osd0, will reset osd [19081.616121] libceph: tid 826 timed out on osd2, will reset osd [19081.616176] libceph: tid 806 timed out on osd3, will reset osd [19081.616226] libceph: tid 875 timed out on osd9, will reset osd [19081.616275] libceph: tid 834 timed out on osd12, will reset osd [19081.616326] libceph: tid 874 timed out on osd10, will reset osd After the clients are done writing and the file system should be quiet, osd hosts have a high load with many active threads: $ ps u -C cosd USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1383 162 11.5 1456248 943224 ? Ssl 11:31 406:59 /usr/bin/cosd -i 7 -c /etc/ceph/ceph.conf $ for p in `ps -C cosd -o pid --no-headers`; do grep -nH State /proc/$p/task/*/status | grep -v sleep; done /proc/1383/task/10702/status:2:State: R (running) /proc/1383/task/10710/status:2:State: R (running) /proc/1383/task/10717/status:2:State: R (running) /proc/1383/task/11396/status:2:State: R (running) /proc/1383/task/27111/status:2:State: R (running) /proc/1383/task/27117/status:2:State: R (running) /proc/1383/task/27162/status:2:State: R (running) /proc/1383/task/27694/status:2:State: R (running) /proc/1383/task/27704/status:2:State: R (running) /proc/1383/task/27728/status:2:State: R (running) With this fix applied, a heavy load still causes many client resets of osds, but no runaway threads result. Signed-off-by: Jim Schutt <jaschut@sandia.gov> Signed-off-by: Sage Weil <sage@newdream.net> |
||
---|---|---|
debian | ||
fusetrace | ||
man | ||
qa | ||
src | ||
web | ||
wireshark | ||
.gitignore | ||
AUTHORS | ||
autogen.sh | ||
builddebs.sh | ||
ceph.spec.in | ||
ChangeLog | ||
configure.ac | ||
COPYING | ||
INSTALL | ||
Makefile.am | ||
NEWS | ||
publish.sh | ||
pull.sh | ||
push.sh | ||
README | ||
RELEASE_CHECKLIST | ||
release.sh | ||
sign.sh | ||
SubmittingPatches | ||
update_pbuilder.sh |
Ceph - a scalable distributed file system ----------------------------------------- Please see http://ceph.newdream.net/ for current info. ---- To build the server daemons, and FUSE client, $ ./autogen.sh $ ./configure $ make or $ cd src $ make (Note that the FUSE client will only be built if libfuse is present.) ---- A quick summary of binaries that will be built in src/ daemons: cmon -- monitor daemon. handles cluster state and configuration information. cosd -- storage daemon. stores objects on a given block device. cmds -- metadata daemon. handles file system namespace. ceph -- send management commands to the monitor cluster. userland clients: cfuse -- fuse client. csyn -- synthetic workload generator client. tools: monmaptool -- create/edit mon map osdmaptool -- create/edit osd map crushtool -- create/edit crush map scripts: mkcephfs -- cluster mkfs tool init-ceph -- init.d start/stop script