Hi Waldek,

I am able to make the issue appear again by creating a big file (i.e. dd 
if=/dev/urandom of=1GB.bin bs=64M count=16 iflag=fullblock), creating a new 
app within the apps folder called big_file, setting the usr.manifest to 
include /big_file/**: ${MODULE_DIR}/**, and running:

./scripts/build fs_size_mb=8192 image=python-from-host,java8,big_file

I updated the buf.h file, and the issue remains.

When I used fs=rofs instead, the issue returns but it doesn't appear until 
I run the run.py script. Example: the last few lines of the build state:

First block: 5242316, blocks count: 5127
Directory entries count 43078
Symlinks count 10
Inodes count 43079

But when I run

./scripts/run.py -e "/python3.10"

I get the following message:

OSv v0.57.0-86-g873cb55a

Assertion failed: virt >= phys_mem (core/mmu.cc: virt_to_phys: 184)

[backtrace]
0x0000000040244a7c <__assert_fail+28>
0x00000000402b85fc <mmu::virt_to_phys(void*)+92>
0x00000000402ef3e2 <void mmu::virt_to_phys<virtio::vring::add_sg(void*, 
unsigned int, virtio::vring_desc::flags)::{lambda(unsigned long, unsigned 
long)#1}>(void*, unsigned long, virtio::vring::add_sg(void*, unsigned int, 
virtio::vring_desc::flags)::{lambda(unsigned long, unsigned long)#1})+34>
0x00000000402ef148 <virtio::blk::make_request(bio*)+312>
0x00000000403bfd75 <multiplex_strategy+197>
0x00000000403cacbb <rofs_read_blocks(device*, unsigned long, unsigned long, 
void*)+107>
0x00000000403c91fd <???+1077711357>
0x00000000403c1476 <sys_mount+694>
0x00000000403beadb <mount_rofs_rootfs+59>
0x0000000040239491 <do_main_thread(void*)+7809>
0x00000000403e4e69 <???+1077825129>
0x000000004037db2d <thread_main_c+45>
0x000000004030b361 <???+1076933473>

When I use Virtio-FS, the error does not seem to appear, but this seems to 
cause different errors possibly. When trying to run Python in the 
unikernel, I get:

sudo PATH=/usr/lib/qemu:$PATH ./scripts/run.py --virtio-fs-tag=myfs 
--virtio-fs-dir=$(pwd)/build/export -e "/python3.10"
OSv v0.57.0-86-g873cb55a
eth0: 192.168.122.15
Booted up in 109.01 ms
Cmdline: /python3.10
Fatal Python error: _Py_HashRandomization_Init: failed to get random 
numbers to initialize Python
Python runtime state: preinitialized

Hope this is enough to replicate the issue. Thank you!

On Monday, December 11, 2023 at 3:03:01 PM UTC-5 [email protected] wrote:

> Hi,
>
> On Thursday, December 7, 2023 at 6:43:00 PM UTC-5 Darren L wrote:
>
> Hi Waldek,
>
> Thanks for the quick response. For more details, I am trying to run a 
> research prototype that requires both Python 3 and Java 8 to run correctly, 
> and I placed the prototype's executable files (which includes large amounts 
> of static data required to run the program) as an image in the apps 
> directory to be linked to the image. The individual files are not huge (up 
> to a few hundred MB each), but rather there are a lot of files that need to 
> be included to run the prototype (totalling altogether 2-3 GB). I wasn't 
> sure if this was the best approach. It seems that I could also dynamically 
> link it in the .img file after the fact, since I only need the Python and 
> Java images to run the program correctly?
>
> The error I am getting occurs when I run the following command: 
> `./scripts/build 
> fs_size_mb=8192 image=python-from-host,java8,prototype` where prototype 
> contains my large executable files. The error I receive is during the build 
> process. It will state:
>
> ```
> Assertion failed: virt >= phys_mem (core/mmu.cc: virt_to_phys: 184)
>
> [backtrace]
> 0x0000000040244a7c <__assert_fail+28>
> 0x00000000402b85fc <mmu::virt_to_phys(void*)+92>
> 0x00000000402ef3e2 <void mmu::virt_to_phys<virtio::vring::add_sg(void*, 
> unsigned int, virtio::vring_desc::flags)::{lambda(unsigned long, unsigned 
> long)#1}>(void*, unsigned long, virtio::vring::add_sg(void*, unsigned int, 
> virtio::vring_desc::flags)::{lambda(unsigned long, unsigned long)#1})+34>
> 0x00000000402ef1e6 <virtio::blk::make_request(bio*)+470>
> 0x000010000006b1e5 <???+438757>
> 0x000010000009620a <???+614922>
> 0x000010000006e476 <???+451702>
> 0x000010000009620a <???+614922>
> 0x0000000040260e1e <???+1076235806>
> 0x0000000040260ef2 <taskqueue_thread_loop+82>
> 0x000000004037db2d <thread_main_c+45>
> 0x000000004030b361 <???+1076933473>
> ```
>
> I do not think this error has anything to do with the ELF layout or the 
> kernel shift. I think this issue is different and it happens when OSv runs 
> during the build process (ZFS builder) to create the ZFS disk and upload 
> all files.
> I am still very interested in replicating and fixing it.
>
> My wild guess is that it may be caused by the bug somebody else discovered 
> and fixed in his pull request - 
> https://github.com/cloudius-systems/osv/pull/1284/files. Can you only 
> update the include/osv/buf.h file to see if your problem goes away? 
> Otherwise, I have to be able to replicate it somehow.
>
> Also, can you try to build a ROFS image (add fs=rofs to your build 
> command) and run it?
>  
> There is also an option to use Virtio-FS (see 
> https://github.com/cloudius-systems/osv/wiki/virtio-fs).
>
> I'm using the most recent OSv pulled from Github. I'm not using node but 
> Python. To my best understanding, this is what I got using readelf for Java 
> and Python. I used the files within my own machine that were then 
> transferred into OSv. I wasn't sure how to use `readelf` within the 
> unikernel itself, so I might need guidance on using readelf within OSv if 
> this is not sufficient.
>
> openjdk-8-zulu-full's java binary:
>
> ```
> Elf file type is EXEC (Executable file)
> Entry point 0x400570
> There are 9 program headers, starting at offset 64
>
>
> Program Headers:
>   Type           Offset   VirtAddr           PhysAddr           FileSiz 
>  MemSiz   Flg Align
>   PHDR           0x000040 0x0000000000400040 0x0000000000400040 0x0001f8 
> 0x0001f8 R E 0x8
>   INTERP         0x000238 0x0000000000400238 0x0000000000400238 0x00001c 
> 0x00001c R   0x1
>       [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
>   LOAD           0x000000 0x0000000000400000 0x0000000000400000 0x0008c4 
> 0x0008c4 R E 0x200000
>   LOAD           0x000d98 0x0000000000600d98 0x0000000000600d98 0x00027c 
> 0x000290 RW  0x200000
>   DYNAMIC        0x000dd0 0x0000000000600dd0 0x0000000000600dd0 0x000210 
> 0x000210 RW  0x8
>   NOTE           0x000254 0x0000000000400254 0x0000000000400254 0x000044 
> 0x000044 R   0x4
>   GNU_EH_FRAME   0x000818 0x0000000000400818 0x0000000000400818 0x000024 
> 0x000024 R   0x4
>   GNU_STACK      0x000000 0x0000000000000000 0x0000000000000000 0x000000 
> 0x000000 RW  0x8
>   GNU_RELRO      0x000d98 0x0000000000600d98 0x0000000000600d98 0x000268 
> 0x000268 R   0x1
>
>  Section to Segment mapping:
>   Segment Sections...
>    00     
>    01     .interp 
>    02     .interp .note.ABI-tag .note.gnu.build-id .hash .gnu.hash .dynsym 
> .dynstr .gnu.version .gnu.version_d .gnu.version_r .rela.dyn .rela.plt 
> .init .plt .text .fini .rodata .eh_frame_hdr .eh_frame 
>    03     .ctors .dtors .jcr .data.rel.ro .dynamic .got .got.plt .data 
> .bss 
>    04     .dynamic 
>    05     .note.ABI-tag .note.gnu.build-id 
>    06     .eh_frame_hdr 
>    07     
>    08     .ctors .dtors .jcr .data.rel.ro .dynamic .got 
> ```
>
> python3.10.12:
>
> ```
> Elf file type is DYN (Position-Independent Executable file)
> Entry point 0x22cb80
>
> There are 13 program headers, starting at offset 64
>
> Program Headers:
>   Type           Offset   VirtAddr           PhysAddr           FileSiz 
>  MemSiz   Flg Align
>   PHDR           0x000040 0x0000000000000040 0x0000000000000040 0x0002d8 
> 0x0002d8 R   0x8
>   INTERP         0x000318 0x0000000000000318 0x0000000000000318 0x00001c 
> 0x00001c R   0x1
>       [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
>   LOAD           0x000000 0x0000000000000000 0x0000000000000000 0x06c228 
> 0x06c228 R   0x1000
>   LOAD           0x06d000 0x000000000006d000 0x000000000006d000 0x2b0dad 
> 0x2b0dad R E 0x1000
>   LOAD           0x31e000 0x000000000031e000 0x000000000031e000 0x23ee58 
> 0x23ee58 R   0x1000
>   LOAD           0x55d810 0x000000000055e810 0x000000000055e810 0x045528 
> 0x08b6c8 RW  0x1000
>   DYNAMIC        0x562bc8 0x0000000000563bc8 0x0000000000563bc8 0x000220 
> 0x000220 RW  0x8
>
>   NOTE           0x000338 0x0000000000000338 0x0000000000000338 0x000030 
> 0x000030 R   0x8
>   NOTE           0x000368 0x0000000000000368 0x0000000000000368 0x000044 
> 0x000044 R   0x4
>   GNU_PROPERTY   0x000338 0x0000000000000338 0x0000000000000338 0x000030 
> 0x000030 R   0x8
>   GNU_EH_FRAME   0x4e72a4 0x00000000004e72a4 0x00000000004e72a4 0x012e74 
> 0x012e74 R   0x4
>
>   GNU_STACK      0x000000 0x0000000000000000 0x0000000000000000 0x000000 
> 0x000000 RW  0x10
>   GNU_RELRO      0x55d810 0x000000000055e810 0x000000000055e810 0x0067f0 
> 0x0067f0 R   0x1
>
>  Section to Segment mapping:
>   Segment Sections...
>    00     
>    01     .interp 
>    02     .interp .note.gnu.property .note.gnu.build-id .note.ABI-tag 
> .gnu.hash .dynsym .dynstr .gnu.version .gnu.version_r .rela.dyn .rela.plt 
>    03     .init .plt .plt.got .plt.sec .text .fini 
>    04     .rodata .stapsdt.base .eh_frame_hdr .eh_frame 
>    05     .init_array .fini_array .data.rel.ro .dynamic .got .data 
> .PyRuntime .probes .bss 
>    06     .dynamic 
>    07     .note.gnu.property 
>    08     .note.gnu.build-id .note.ABI-tag 
>    09     .note.gnu.property 
>    10     .eh_frame_hdr 
>    11     
>    12     .init_array .fini_array .data.rel.ro .dynamic .got 
> ```
>
> Btw you can use a stock JDK or Python from your Linux host (see 
> modules/openjdk9_1x-from-host -> image=...,openjdk9_1x-from-host) and the 
> same for Python (apps/python-from-host -> image=...,python-from-host ).
>
> Let me know if you have any issues.
>
> Let me know if there is anything else you would like to see, or if you 
> would like more clarification on anything mentioned above. Thank you for 
> the help!
>
> Sincerely,
> Darren
>
> On Thursday, December 7, 2023 at 9:56:34 AM UTC-5 [email protected] 
> wrote:
>
> Hi,
>
> The 2GB limit and the commit you are referring to should only limit the 
> size of the position-dependent executables (these executables typically 
> want to be loaded in a place where OSv kernel used to be before this 
> commit).
>
> Are your executables larger than 2GB in size? Can you run 'readelf -W -l' 
> against java and node like in this example:
>
> readelf -W -l /usr/lib/jvm/java-8-openjdk-amd64/bin/java
>
> Elf file type is DYN (Position-Independent Executable file)
> Entry point 0x10b0
> There are 13 program headers, starting at offset 64
>
> Program Headers:
>   Type           Offset   VirtAddr           PhysAddr           FileSiz 
>  MemSiz   Flg Align
>   PHDR           0x000040 0x0000000000000040 0x0000000000000040 0x0002d8 
> 0x0002d8 R   0x8
>   INTERP         0x000318 0x0000000000000318 0x0000000000000318 0x00001c 
> 0x00001c R   0x1
>       [Requesting program interpreter: /lib64/ld-linux-x86-64.so.2]
>   LOAD           0x000000 0x0000000000000000 0x0000000000000000 0x000750 
> 0x000750 R   0x1000
>   LOAD           0x001000 0x0000000000001000 0x0000000000001000 0x0001a9 
> 0x0001a9 R E 0x1000
>   LOAD           0x002000 0x0000000000002000 0x0000000000002000 0x00011c 
> 0x00011c R   0x1000
>   LOAD           0x002d48 0x0000000000003d48 0x0000000000003d48 0x0002c8 
> 0x0002d0 RW  0x1000
>   DYNAMIC        0x002d58 0x0000000000003d58 0x0000000000003d58 0x000260 
> 0x000260 RW  0x8
>   NOTE           0x000338 0x0000000000000338 0x0000000000000338 0x000030 
> 0x000030 R   0x8
>   NOTE           0x000368 0x0000000000000368 0x0000000000000368 0x000044 
> 0x000044 R   0x4
>   GNU_PROPERTY   0x000338 0x0000000000000338 0x0000000000000338 0x000030 
> 0x000030 R   0x8
>   GNU_EH_FRAME   0x002038 0x0000000000002038 0x0000000000002038 0x000034 
> 0x000034 R   0x4
>   GNU_STACK      0x000000 0x0000000000000000 0x0000000000000000 0x000000 
> 0x000000 RW  0x10
>   GNU_RELRO      0x002d48 0x0000000000003d48 0x0000000000003d48 0x0002b8 
> 0x0002b8 R   0x1
>
> Can you give us more details about your use case and the error you are 
> getting with the existing limit of 2GB (I am assuming there is a reason you 
> want to increase it).
>
> Regards,
> Waldek
>
> On Thu, Dec 7, 2023 at 3:52 AM Darren Lim <[email protected]> wrote:
>
> Hello,
>
> Per the patch here (
> https://github.com/cloudius-systems/osv/commit/2a1795db8a22b0b963a64d068f5d8acc93e5785d),
>  
> I was hoping to get help with making the changes to increase the kernel 
> limit from 2GB to a larger size.
>
> For context, I am trying to load a large project (~3GB) into the 
> unikernel, along with decently large languages (Java, Python) by creating a 
> custom image for the build script. It currently complains in mmu.cc, 
> stating:
>
> Assertion failed: virt >= phys_mem (core/mmu.cc: virt_to_phys: 184)
>
> Thank you!
>
> -- 
> 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 [email protected].
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/osv-dev/a5c2844a-e03e-4ac4-8e0a-de81f575889fn%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/osv-dev/a5c2844a-e03e-4ac4-8e0a-de81f575889fn%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>
>

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/929419f2-2d51-461d-a13c-1443d72cdd2en%40googlegroups.com.

Reply via email to