Re: [Patch] Optimize dropping of relation buffers using dlist
От | Thomas Munro |
---|---|
Тема | Re: [Patch] Optimize dropping of relation buffers using dlist |
Дата | |
Msg-id | CA+hUKGJ7Xv9NqREGjxm4VO5e=42YPs_XJZ-sHPdhejo3341_BQ@mail.gmail.com обсуждение исходный текст |
Ответ на | RE: [Patch] Optimize dropping of relation buffers using dlist ("tsunakawa.takay@fujitsu.com" <tsunakawa.takay@fujitsu.com>) |
Ответы |
RE: [Patch] Optimize dropping of relation buffers using dlist
|
Список | pgsql-hackers |
On Thu, Oct 22, 2020 at 8:32 PM tsunakawa.takay@fujitsu.com <tsunakawa.takay@fujitsu.com> wrote: > I'm probably being silly, but can't we avoid the problem by using fstat() instead of lseek(SEEK_END)? Would they returnthe same value from the i-node? Amazingly, st_size can disagree with SEEK_END when using the Linux NFS client, but its behaviour is worse. Here's a sequence from a Linux NFS client talking to a Linux NFS server with no free space. This time, I also replaced the fsync() with sleep(60), just to make it clear that SEEK_END offset can move at any time due to asynchronous activity in kernel threads: lseek(..., SEEK_END) = 9670656 fstat(...) = 0, st_size = 9670656 write(...) = 8192 lseek(..., SEEK_END) = 9678848 fstat(...) = 0, st_size = 9670656 (*1) sleep(...) = 0 lseek(..., SEEK_END) = 9670656 (*2) fstat(...) = 0, st_size = 9670656 fsync(...) = -1 lseek(..., SEEK_END) = 9670656 fstat(...) = 0, st_size = 9670656 fsync(...) = 0 However, I'm not entirely sure which phenomena visible here to blame on which subsystems, and therefore which things to expect on local filesystems, or on other operating systems. I can say that with a FreeBSD NFS client and the same Linux NFS server, I don't see phenomenon *1 (unsurprising) but I do see phenomenon *2 (surprising to me). > Or, can't we just try to do BufTableLookup() one block after what smgrnblocks() returns? Unfortunately the problem isn't limited to one block.
В списке pgsql-hackers по дате отправления: