Cheleswer, Looks good for me.
-Dmitry On 2016-03-03 19:28, Cheleswer Sahu wrote: > Hi, > > Please review the new code changes for this bug. I have removed " fstat()" > call which seems not safe to read the "/proc/map/self" file and have made > some other changes too. Please find the latest code in below link > Webrev link: http://cr.openjdk.java.net/~csahu/8146683/webrev.01/ > > > Regards, > Cheleswer > > -----Original Message----- > From: Dean Long > Sent: Wednesday, February 24, 2016 7:44 AM > To: Daniel Daugherty; Thomas Stüfe; Cheleswer Sahu > Cc: serviceability-dev@openjdk.java.net; hotspot-runtime-...@openjdk.java.net > Subject: Re: RFR[9u-dev]: 8146683: check_addr0 should be more efficient > > On 2/23/2016 10:07 AM, Daniel D. Daugherty wrote: >> On 2/23/16 5:56 AM, Thomas Stüfe wrote: >>> Hi Cheleswer, >>> >>> >>> On Tue, Feb 23, 2016 at 9:38 AM, Cheleswer Sahu >>> <cheleswer.s...@oracle.com> >>> wrote: >>> >>>> Hi, >>>> >>>> >>>> >>>> Please review the code changes for >>>> https://bugs.openjdk.java.net/browse/JDK-8146683 . >>>> >>>> >>>> >>>> Webrev link: http://cr.openjdk.java.net/~csahu/8146683/ >>>> >>>> JBS Link: https://bugs.openjdk.java.net/browse/JDK-8146683 >>>> >>>> >>>> >>>> Bug Brief: >>>> >>>> While investigating bug >>>> https://bugs.openjdk.java.net/browse/JDK-8144483 >>>> it has been observed that "check_addr0() " function is not written >>>> efficiently. >>>> >>>> This function is trying to read each "prmap_t" entry in >>>> "/proc/self/map" >>>> file one by one which is time taking and can cause in long pauses. >>>> >>>> >>>> >>>> Solution proposed: >>>> >>>> Instead of reading each "prmap_t" entry in "/proc/self/map" file one >>>> by one, read the entries in chunks. There can be many entries in "map" >>>> file, >>>> so I have decided to read these >>>> >>>> in chunks of 100 "prmap_t" entries. Reading entries in chunks saves >>>> a lot of read calls and results in smaller pause times. >>>> >>>> >>>> >>>> >>>> >>>> Regards, >>>> >>>> Cheleswer >>>> >>> >>> We saw cases, especially on Solaris, where the content of a file in the >>> proc file system changed under us while we were reading it. So this >>> should >>> be kept in mind. The original code seems also broken in that regard, >>> because it assumes the ::read() call to read the full size of a prmap_t >>> entry, but it may theoretically read an incomplete entry. >>> >>> As for your coding, you first estimate the size of the mapping file and >>> then use this to determine how many entries to read; but when >>> reading, this >>> information may already be stale. I think it would be more robust and >>> also >>> simpler to just try to read as many entries as possible - in chunks, to >>> make reading faster - until you get EOF. >>> >>> Kind Regards, Thomas >> >> I'm really sure that we've been down this road before. In particular, >> Dmitry Samersoff has worked on this issue (or one very much like it) >> before, but he is on vacation until the end of the month. >> > > There was a similar issue with Linux /proc/self/maps, and whether it was > safe to read the file with buffered stdio or not. See 8009062 and 7017193. > > dl > >> Dan >> >> >>> >>> On Tue, Feb 23, 2016 at 9:38 AM, Cheleswer Sahu >>> <cheleswer.s...@oracle.com> >>> wrote: >>> >>>> Hi, >>>> >>>> >>>> >>>> Please review the code changes for >>>> https://bugs.openjdk.java.net/browse/JDK-8146683 . >>>> >>>> >>>> >>>> Webrev link: http://cr.openjdk.java.net/~csahu/8146683/ >>>> >>>> JBS Link: https://bugs.openjdk.java.net/browse/JDK-8146683 >>>> >>>> >>>> >>>> Bug Brief: >>>> >>>> While investigating bug >>>> https://bugs.openjdk.java.net/browse/JDK-8144483 >>>> it has been observed that "check_addr0() " function is not written >>>> efficiently. >>>> >>>> This function is trying to read each "prmap_t" entry in >>>> "/proc/self/map" >>>> file one by one which is time taking and can cause in long pauses. >>>> >>>> >>>> >>>> Solution proposed: >>>> >>>> Instead of reading each "prmap_t" entry in "/proc/self/map" file one by >>>> one, read the entries in chunks. There can be many entries in "map" >>>> file, >>>> so I have decided to read these >>>> >>>> in chunks of 100 "prmap_t" entries. Reading entries in chunks saves >>>> a lot >>>> of read calls and results in smaller pause times. >>>> >>>> >>>> >>>> >>>> >>>> Regards, >>>> >>>> Cheleswer >>>> >> > -- Dmitry Samersoff Oracle Java development team, Saint Petersburg, Russia * I would love to change the world, but they won't give me the sources.