Hi,

I just submitted 2 patches that are addressing moving java stuff from java/
to modules/java-*. There is still some work to do as far as moving
jolokia-agent and cloudius modules from java-base and however I am not sure
what is the role of each module listed below (apart from jolokia) to know
if it is optional or essential and what it really is:

cat modules/java-base/module.py
from osv.modules import api

api.require('fonts')
api.require('ca-certificates')
api.require('libz')
api.require('josvsym')
api.require('httpserver-jolokia-plugin')
api.require('httpserver-jvm-plugin')

Also locally I have tried to remove all java c++ stuff from Makefile and
move it to modules/java-. However after I adjusted these 3 cc files
(core/mempool.cc, core/mmu.cc, libc/mman.cc) to point to the new location
of modules/java-base/jvm/jvm_balloon.hh I came across the linker errors:

Building into build/release.x64
  GEN gen/include/osv/version.h
  LINK loader.elf
build/release.x64/bsd/porting/mmu.o: In function `vm_throttling_needed':
/home/wkozaczuk/projects/osv/bsd/porting/mmu.cc:41: undefined reference to
`memory::throttling_needed()'
build/release.x64/core/mmu.o: In function
`mmu::jvm_balloon_vma::fault(unsigned long, exception_frame*)':
/home/wkozaczuk/projects/osv/core/mmu.cc:1555: undefined reference to
`jvm_balloon_fault(std::shared_ptr<balloon>, exception_frame*,
mmu::jvm_balloon_vma*)'
build/release.x64/core/mempool.o: In function `memory::on_alloc(unsigned
long)':
/home/wkozaczuk/projects/osv/core/mempool.cc:445: undefined reference to
`memory::jvm_balloon_adjust_memory(unsigned long)'
build/release.x64/core/mempool.o: In function
`memory::reclaimer::_do_reclaim()':
/home/wkozaczuk/projects/osv/core/mempool.cc:1031: undefined reference to
`jvm_balloon_voluntary_return()'
/home/wkozaczuk/projects/osv/core/mempool.cc:1011: undefined reference to
`memory::throttling_needed()'
build/release.x64/libc/mman.o: In function `mmap':
/home/wkozaczuk/projects/osv/libc/mman.cc:145: undefined reference to
`memory::return_jvm_heap(unsigned long)'
Makefile:1796: recipe for target 'build/release.x64/loader.elf' failed
make: *** [build/release.x64/loader.elf] Error 1

It seems to be that building loader.elf relies on stuff in
java/jvm/jvm_balloon.o, java/jvm/java_api.o and java/jvm/jni_helpers.o.
Based on my very shallow understanding of what is going on it seems that
JVM ballooning logic is pretty entangled with the core of OSv memory
management logic. How easy is it to untangle that and make it somehow more
pluggable?

It seems that moving compilation of java.cc to modules/java-base should be
easy but apart from that the rest does not seem trivial.

Any further advice?

Waldek


On Tue, Sep 20, 2016 at 8:43 AM, Nadav Har'El <n...@scylladb.com> wrote:

>
> On Sun, Sep 4, 2016 at 7:55 AM, Waldek Kozaczuk <jwkozac...@gmail.com>
> wrote:
>
>> I believe at some point somebody started reorganizing java folder content
>> to move it to modules/java and modules/java-tests but it was never
>> completed.
>>
>
> Indeed. The comment in commit df0fd92cc3a713f11874af369eb5f54c560d8b1f
> and "TODO" in Makefile make this intention clear.
>
>
>>
>> I am willing to finish this process but I would like a little bit of
>> guidance as far as:
>> - possible major challenges to such restructuring (somebody stated that
>> changing Makefile might be most challenging)
>> - elimination of possible dead code (for example so called ballooning was
>> disabled in java.cc and there seems to be a lot of relevant C++ and Java
>> code to support it)
>> - what to avoid
>> - general guidelines
>>
>
> One thing we need to do is to move the java-targets, java, jdk, etc.,
> stuff out of the main Makefile and into modules/java/Makefile.
> The challenge here is to get the right compilation line with the OSv
> headers. You can take examples from other modules like modules/tests, which
> also uses OSv headers.
>
> Second thing it would be nice to figure out is if we can get rid of the
> "jdkbase" setting in Makefile and build/script. For example, perhaps the
> "java" module can set up a link in its own directory, and the modules
> requiring the java module can just use that link.
>
> After both changes, grepping for "java" or "jdk" should come up empty.
>
> Finally it would be nice to move the remaining stuff in java/ to
> modules/java.
>
> Commit d9a7eba6e3f0a92074b579c0c181663e6c1d5e46 also points out that the
> modules/java/Makefile currently runs "maven" to compile a lot of Java code
> which isn't actually needed by all Java applications but just with some
> specific modules (e.g., jolokia-agent); We could move some of this
> compilation to the modules that needed them. I was always too afraid of
> Maven to actually go ahead and do this :-)
>
> Finally, please do not remove the Balloon stuff. I just added a
> bug-tracker issue that one day we need to bring it back - it was a nice
> feature, and unique to OSv (and we even explained it in the OSv paper). So
> I'd like to continue compiling it, even if it is currently disabled.
>
> Thanks,
> Nadav.
>
>
>
>>
>> Any thoughts?
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "OSv Development" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to osv-dev+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to osv-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to