Was ist am /home folder so besonders dass "fileExistsAtPath" über 1000 mal länger dauert als bei anderen ordnern?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Was ist am /home folder so besonders dass "fileExistsAtPath" über 1000 mal länger dauert als bei anderen ordnern?

    Hallo,

    wie gesagt, was ist an dem "/home" folder so speziell?
    werden da irgendwelche netzwerkabfragen gestartet etc?

    ich hab hier mal test-code (zuerst die resultate dann den zugehörigen code):

    ​Result for 1 runs:
    /Users duration: 0.000010
    /home duration: 0.013842
    /asdf duration: 0.000010

    Result for 10 runs:
    /Users duration: 0.000041
    /home duration: 0.129310
    /asdf duration: 0.000110

    Result for 100 runs:
    /Users duration: 0.000369
    /home duration: 1.292589
    /asdf duration: 0.001129


    Quellcode

    1. ​#define RUN_COUNT 100
    2. NSTimeInterval usersTime = 0;
    3. NSTimeInterval homeTime = 0;
    4. NSTimeInterval asdfTime = 0;
    5. NSFileManager *fileManager = [[NSFileManager alloc] init];
    6. for (NSUInteger i = 0; i < RUN_COUNT; i++)
    7. {
    8. {
    9. NSDate *startDate = [NSDate date];
    10. [fileManager fileExistsAtPath:@"/Users/non/existsing/file.dat"];
    11. NSDate *endDate = [NSDate date];
    12. usersTime += [endDate timeIntervalSinceDate:startDate];
    13. }
    14. {
    15. NSDate *startDate = [NSDate date];
    16. [fileManager fileExistsAtPath:@"/home/non/existsing/file.dat"];
    17. NSDate *endDate = [NSDate date];
    18. homeTime += [endDate timeIntervalSinceDate:startDate];
    19. }
    20. {
    21. NSDate *startDate = [NSDate date];
    22. [fileManager fileExistsAtPath:@"/asdf/non/existsing/file.dat"];
    23. NSDate *endDate = [NSDate date];
    24. asdfTime += [endDate timeIntervalSinceDate:startDate];
    25. }
    26. }
    27. printf("Result for %i runs:\n", RUN_COUNT);
    28. printf("/Users duration: %f\n", usersTime);
    29. printf("/home duration: %f\n", homeTime);
    30. printf("/asdf duration: %f\n", asdfTime);
    Alles anzeigen
  • gritsch schrieb:

    werden da irgendwelche netzwerkabfragen gestartet etc?

    Anscheinend ja; /home ist automounted: discussions.apple.com/thread/2073807?tstart=0

    Quellcode

    1. ​$ mount
    2. /dev/disk1s2 on / (hfs, local, journaled)
    3. devfs on /dev (devfs, local, nobrowse)
    4. /dev/disk0s2 on /Volumes/Macintosh HD (hfs, local, journaled)
    5. map -hosts on /net (autofs, nosuid, automounted, nobrowse)
    6. map auto_home on /home (autofs, automounted, nobrowse)
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    /etc/auto_master


    ich will nicht jeden pfad 1000 mal prüfen sondern 1000 (bzw sogar noch viel mehr) verschiedene pfade. zur vereinfachung habe ich im sample-code nur einen verwendet (es wird ja nix gecached).

    der kunde hat sich nur gefragt warum das ganze jetzt 10 sekunden dauert und nicht wie vorher immer in einem augenzwinkern durch war (die frage ist jetzt wie er die pfade mit /home/ prefix überhaupt in die DB bekommen hat, denn /home ist bei ihm leer und er kann sich auch nicht erinnern dass in letzter zeit da mal was gemountet war (also irgendwelche shares oder so).
  • gritsch schrieb:

    mattik schrieb:

    Aber du machst das eh asynchron, oder? Das ist doch mal ein gutes Einsatzszenario für parallele NSOperations.


    was soll das in so einem fall bringen?
    die platte ist ja nicht schneller wenn du 1000 anfragen gleichzeitig sendest...

    Naja, nicht 1000 parallel, aber eine Handvoll. Ich bin mir nicht sicher, ob da wirklich die ganze Zeit fürs Warten auf die Platte draufgeht oder ob da noch anderer Voodoo stattfindet. Falls es die Platte ist, tun schlafende Threads kaum weh und du hältst die IO Queue der Platte immer gut gefüllt. Falls noch irgend ein anderer CPU-seiteiger Kram stattfindet profitierst du direkt. Keine Ahnung ob das etwas bringt aber es würde mich nicht wundern.
    Multigrad - 360°-Produktfotografie für den Mac