[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [MirageOS-devel] Building a sample File storage app
I have tried and banged my head against it but haven't been able to move in any direction. Here is the upload function that gets stuck if I try to upload a file of more than 4Mb. I have tried to pin fat-filesystem and add log statements in it but to no success. Any pointer on how to fix this would be much appreciated.
Regards, Vansh
On 19 February 2016 at 08:12, Vanshdeep Singh <kansi13@xxxxxxxxx> wrote:
> I am have created FAT 16 disk with bytes per sector as 4096 but when reading
> the data off the
> disk I am not able to read the all bytes because bytes per sector is harded
> coded to be 512 in the
> underlying implementation. Is there a way to get around this ?
I see the TODO file in fat says:
* be consistent about sector size (replace 512 with bytes_per_sector)
> I tried to pin the source code of fat-filesystem but couldn't get the
> changes to be reflected. Any
> pointers would be helpful.
What does it say when you do "opam reinstall fat-filesystem"? You
should see something like:
$ opam reinstall fat-filesystem
=-=- Synchronising pinned packages =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[fat-filesystem] /home/user/.../fat already up-to-date
The following actions will be performed:
↻ recompile fat-filesystem 0.10.3*
Check it prints the path to your local checkout. If you're not sure
whether it worked, try adding a syntax error to the code somewhere -
it should fail to reinstall then.
Make sure you 'make clean' in your test unikernel too before rebuilding.
> On Tue, Feb 16, 2016 at 3:47 PM, Vanshdeep Singh <kansi13@xxxxxxxxx> wrote:
>>
>> Working on the tracing part but here's an interesting observation, If I
>> don't increment the file_offset
>> after writing each page_buffer then the all of the data is uploaded, only
>> when I increment the
>> file_offset after writing each page_buffer it gets stuck after writing
>> 3-4Mb of data.
>> Further, I tried creating a FAT 16 disk with logical sector size 4096 i.e.
>> mkfs.fat -F 16 -S 4096 -C disk.img 1024000
>> using this disk I was able to write almost 30MB of data after which it
>> started to hang again.
>> I am speculating that it hangs in write_to_location while allocating new
>> sectors. Any ideas on this ?
>>
>>
>> On Sun, Feb 14, 2016 at 3:38 AM, Thomas Leonard <talex5@xxxxxxxxx> wrote:
>>>
>>> On 13 February 2016 at 07:38, Vanshdeep Singh <kansi13@xxxxxxxxx> wrote:
>>> >
>>> >
>>> > On Fri, Feb 12, 2016 at 1:14 PM, Thomas Leonard <talex5@xxxxxxxxx>
>>> > wrote:
>>> >>
>>> >> On 12 February 2016 at 05:56, Vanshdeep Singh <kansi13@xxxxxxxxx>
>>> >> wrote:
>>> >> > Hi,
>>> >> > I tried running the my implementation directly on xen and
>>> >> > performance
>>> >> > was
>>> >> > much better (no idea why).
>>> >> > But I have run into new issues,
>>> >> > - Tried creating a disk of size 1000Mb using "fat create disk.img
>>> >> > 102400KiB"
>>> >> > and it returned
>>> >> > "fat: unimplemented" even though the disk was created.
>>> >>
>>> >> Boot_sector.format_of_clusters will choose FAT32 if it needs 65527 or
>>> >> more clusters. However, it appears that only FAT16 is implemented. I'm
>>> >> not sure what changes are required for FAT32.
>>> >>
>>> >> For testing, you could format it with mkfs (mkfs -t fat disk.img), but
>>> >> I guess you'll have the same problem using it.
>>> >
>>> > I was able to successfully create and run the a 1GB fat disk using
>>> > mkfs.fat
>>> >>
>>> >>
>>> >> > Then I tried running
>>> >> > it on the xen and got an
>>> >> > error after I ran the image on xen,
>>> >> > Fatal error: exception Fs.Make(B)(M).Fs_error(_)
>>> >> > Raised at file "src/core/lwt.ml", line 789, characters 22-23
>>> >>
>>> >> Mirage error reporting really needs sorting out. For now, you could
>>> >> use Printexc.register_printer in fs.ml to tell it how to display the
>>> >> error as something other than "_".
>>> >>
>>> >> > - I also tried uploading a file with size around 30MiB onto a
>>> >> > disk.img
>>> >> > of
>>> >> > size 100MiB. The hanged
>>> >> > after writing 4Mb of data.
>>> >>
>>> >> > Any suggestion on how to deal with the above situations ?
>>> >>
>>> >> Was it spinning (high CPU load shown in "xl list") or waiting for
>>> >> something (idle)?
>>> >>
>>> >> If spinning, you can grab a stack trace to find out where:
>>> >>
>>> >>
>>> >>
>>> >> http://www.brendangregg.com/blog/2016-01-27/unikernel-profiling-from-dom0.html
>>> >>
>>> >> If it's waiting for something, annotate your main thread with
>>> >> MProf.Trace.should_resolve and compile with tracing on. When you view
>>> >> the trace, your thread (which never finishes) will be shown in red and
>>> >> you can follow the yellow arrows to discover what it was waiting for.
>>> >> See:
>>> >>
>>> >> https://mirage.io/wiki/profiling
>>> >>
>>> >> Both of these techniques may be useful for finding performance
>>> >> problems
>>> >> too.
>>> >
>>> > I have tried to narrow down the problem and it turn turns out that the
>>> > code
>>> > gets
>>> > stuck at Fs.write because on commenting Fs.write all the data is
>>> > successfully
>>> > received and iterated using Lwt_stream.iter_s . But when I try to write
>>> > using Fs.write
>>> > first 3 to 4 page buffers are successfully written and then it hangs. I
>>> > tried to profile
>>> > the vm using mirage-trace-view but there was not much I could
>>> > understand. I
>>> > am
>>> > attaching the results in case you can see and suggest something.
>>>
>>> The first two traces seem to be mostly networking stuff. It might be
>>> worth simplifying the test case so the unikernel just writes test data
>>> directly (or reads a small request and writes it many times).
>>>
>>> The third doesn't have many labels, so it might be mirage-block-xen
>>> stuff. I see I started adding trace events, but never got around to
>>> submitting a PR:
>>>
>>> https://github.com/talex5/mirage-block-xen/tree/tracing
>>>
>>> (trace labels have no cost when compiling without tracing, so it would
>>> be good to have more!)
>>>
>>> The last two traces show the unikernel constantly waking up and them
>>> immediately sleeping again without doing anything. Very odd. Might be
>>> worth adding some trace labels around here:
>>>
>>>
>>> https://github.com/mirage/mirage-platform/blob/dfd00d518570c074b4e9b36a59472f5e7354df5f/xen/lib/main.ml#L62
>>>
>>> > Note: I was trying to upload a 30Mb file which could copy into the disk
>>> > using "fat add"
>>> > command but when I tried uploading and writing to the disk the Fs.write
>>> > call
>>> > won't
>>> > return after writing a few page buffers.
>>> >
>>> > about the files: trace.ctf 1-5 show the incremental trace of the vm
>>> > when I
>>> > upload the
>>> > 30Mb file
>>> >
>>> >
>>> >>
>>> >>
>>> >> > Regards,
>>> >> > Vansh
>>> >> >
>>> >> >
>>> >> > On Thu, Feb 11, 2016 at 8:11 PM, Vanshdeep Singh <kansi13@xxxxxxxxx>
>>> >> > wrote:
>>> >> >>
>>> >> >> Hi Thomas,
>>> >> >> I am chosen to implement the disk in FAT format. Drawing
>>> >> >> inspiration
>>> >> >> from
>>> >> >> your code I
>>> >> >> have tried to do disk writing operations but instead of
>>> >> >> V1_LWT.BLOCK I
>>> >> >> have chosen to
>>> >> >> go wo with V1_LWT.FS because for the api but the write performance
>>> >> >> I
>>> >> >> get
>>> >> >> is very poor.
>>> >> >> I takes more than 11 sec to upload a 67Kb file. The file is
>>> >> >> uploaded
>>> >> >> quickly but the time
>>> >> >> taken to write to disk is long hence they delay.
>>> >> >>
>>> >> >> Much of my implementation is similar to this code
>>> >> >>
>>> >> >>
>>> >> >>
>>> >> >> https://github.com/0install/0repo-queue/blob/master/upload_queue.ml#L159-L172
>>> >> >> the difference comes in the flush_page_buffer . Since I am using
>>> >> >> V1_LWT.FS
>>> >> >> I use
>>> >> >> FS.write call to write the data to the disk i.e.
>>> >> >>
>>> >> >>>
>>> >> >>> buffered_data = Cstruct.sub page_buffer 0 !page_buffer_offset
>>> >> >>>
>>> >> >>> Fs.write fs path !file_offset buffered_data
>>> >> >>
>>> >> >>
>>> >> >>
>>> >> >> How can I improve the performance ?
>>> >> >>
>>> >> >> Note: I am testing this using --unix
>>> >> >>
>>> >> >>
>>> >> >> Regards,
>>> >> >> Vansh
>>> >> >>
>>> >> >> On Sun, Feb 7, 2016 at 11:28 PM, Thomas Leonard <talex5@xxxxxxxxx>
>>> >> >> wrote:
>>> >> >>>
>>> >> >>> On 6 February 2016 at 20:48, Vanshdeep Singh <kansi13@xxxxxxxxx>
>>> >> >>> wrote:
>>> >> >>> > Hi,
>>> >> >>> > I am trying to build a sample file storage web app and I am need
>>> >> >>> > some
>>> >> >>> > directions
>>> >> >>> > on how to approach it, particularly I am trying to figure out
>>> >> >>> > how to
>>> >> >>> > do
>>> >> >>> > storage.
>>> >> >>> > Currently, I am drawing my insight from here and here (irmin).
>>> >> >>> > Any
>>> >> >>> > kind
>>> >> >>> > of
>>> >> >>> > suggestion
>>> >> >>> > would be really helpful.
>>> >> >>> >
>>> >> >>> > NOTE: files of any size could be uploaded so I am aiming at
>>> >> >>> > streaming
>>> >> >>> > uploads/downloads.
>>> >> >>>
>>> >> >>> Hi Vansh,
>>> >> >>>
>>> >> >>> Currently, FAT is the only supported file-system on Mirage/Xen:
>>> >> >>>
>>> >> >>> https://github.com/mirage/ocaml-fat
>>> >> >>>
>>> >> >>> If your needs are simpler then you could also implement your own
>>> >> >>> scheme. The file queue example you linked just stores the files
>>> >> >>> sequentially on the disk, which is fine for a queue.
>>> >> >>>
>>> >> >>> If you want to help build something better (e.g. to support
>>> >> >>> Irmin),
>>> >> >>> the ocaml-btree project is under development:
>>> >> >>>
>>> >> >>>
>>> >> >>>
>>> >> >>>
>>> >> >>> http://lists.xenproject.org/archives/html/mirageos-devel/2016-01/msg00059.html
>>> >> >>>
>>> >> >>>
>>> >> >>> --
>>> >> >>> Dr Thomas Leonard http://roscidus.com/blog/
>>> >> >>> GPG: DA98 25AE CAD0 8975 7CDA BD8E 0713 3F96 CA74 D8BA
>>> >> >>
>>> >> >>
>>> >> >
>>> >>
>>> >>
>>> >>
>>> >> --
>>> >> Dr Thomas Leonard http://roscidus.com/blog/
>>> >> GPG: DA98 25AE CAD0 8975 7CDA BD8E 0713 3F96 CA74 D8BA
>>> >
>>> >
>>>
>>>
>>>
>>> --
>>> Dr Thomas Leonard http://roscidus.com/blog/
>>> GPG: DA98 25AE CAD0 8975 7CDA BD8E 0713 3F96 CA74 D8BA
>>
>>
>
--
Dr Thomas Leonard http://roscidus.com/blog/
GPG: DA98 25AE CAD0 8975 7CDA BD8E 0713 3F96 CA74 D8BA
_______________________________________________
MirageOS-devel mailing list
MirageOS-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/mirageos-devel
|